PORTC &= ~_BV(3); - wyzerowanie PORTC |= _BV(3); - ustawienie i jeszcze: PORTC ^= _BV(3); - zmiana stanu.
Pomyśl o tym, aby zapamiętywać stan poprzedni i inkrementować licznik jedynie w przypadku zmiany stanu.
Uruchomi się - tak jak pisał kol. (at)dondu na wejściu masz układy Schmitta, czyli po przekroczeniu poziomu progowego nastąpi zmiana stanu. Problem w tym, że dla różnych egzemplarzy ATMega, czy różnych warunków, ten próg będzie nieco dryfował. Więc średnio to się nadaje np. do tego, aby odmierzać czas stałej RC.
Napisałeś że chcesz monitorować stan wejść . Co to za monitoring jeżeli zmiana stanu wejścia nie zmienia stanu wyświetlacza
bo zmieniasz caly port. tak BTW - przeczytales to: http://www.elektroda.pl/rtvforum/topic10... ? nie? tak myslalem. 0x41 0x56 0x45!!
Sposób jak podał Cezary nie jest zły. Trzeba jednak wygenerować impuls o odpowiedniej długości. Co zapewne będzie jakimś problemem. Zaproponowałem więc podłączenie fototranzystora do linii np. CTS. W językach typu VC, VB, VBnet, C# itp. zmiana stanu tej linii wywołuje zdarzenie. Wystarczy zliczać te zdarzenia.
Czy Atmega na Arduino znajduje się w stanie RESET?
Witam. Tak na szybko analizując kod: Dla Timer0 włączasz dwa przerwania od porównania: http://obrazki.elektroda.pl/6165324400_1...
Przyjrzałem się tej Twojej (znaczy - nie Twojej :)) płytce i wygląda mi, że podchodzisz do problemu od złej strony. Na tej płytce wyświetlaczy jest licznik 7493, który steruje multipleksowaniem (to widać nawet na tym niewyraźnym zdjęciu, które zamieściłeś). Zatem wystarczy tylko podać na wejście INT sygnał z wejścia zegarowego 7493 aby mieć stabilny...
Bity 6 i 7 portu B są podłączane do tych samych pinów ATmegi co rezonator kwarcowy. W takiej konfiguracji jak w Arduino (taktowanie z pomocą rezonatora) nie mogą pełnić funkcji wejścia-wyjścia, a wszystkie odpowiadające im bity w rejestrach są odczytywane jako 0. Dokładniejszy opis tej kwestii znajdziesz w dokumentacji ATmegi328 ( bitów portu ATmegi...
Zobacz czym można wyzwalać ADC w tym procku. W wielu przypadkach można ADC wyzwalać zboczem timera. Jeśli chcesz robić większe magię przy pomocy timera i ADC, to raczej użyłbym jakiegoś nowszego ATTiny/ATMega z event system.
Nad takim też myślałem ale to nie jest to. Chodzi o to, że pin wejścia będzie podpięty pod linie 5V w komputerze i jeśli będzie wykryty sygnał (to 5V) to wtedy na pinie przykładowo 13 będzie przez określony czas stan wysoki. Przez określony czas tylko. A jeśli stan tej lini 5V zmieni się na zero to wtedy znów na ten określony czas będzie stan wysoki...
W zasadzie nie, ale krótkie impulsy powodują niepotrzebnie straty mocy w kluczu i mogą być źródłem zakłóceń. W niektórych driverach MOSFET wymagana jest zmiana stanu na wyjściu dla podładowania kondensatora bootstrapu.
Testowałem 2 algorytmy: 1. Jeśli napięcie jest powyżej 200V włączony, poniżej wyłączony, atmega taktowana na 1Mhz, zmiana stanu po każdym odczycie z przetwornika. (Nie działał, więc testowałem też drugi) 2. 10ms wyłaczony 1ms włączony. Czyli 100-1000Hz (działał) Trudno mi teraz powiedzieć który program zabił mosfeta.
Opadające zbocze to zmiana ze stanu wysokiego na niski (narastające to przeciwna sytuacja). To wszystko tak działa jak napisałeś.
http://www.youtube.com/watch?v=2Ws78KWGP... - wygląda nawet ciekawie... Bez schematu i kodu niestety nie jestem w stanie bardziej pomóc.
Witam. Zmontowałem przed chwilą i sprawdzone. Zostaje tylko pozbycie się drgań styków klawisza. [syntax=c]#define F_CPU 16000000UL // Atmega644 #include <avr/io.h> /*biblioteka avr*/ #include <string.h> /*biblioteka napisy*/ #include <stdio.h> /*biblioteka podstawowa C*/ #include <stdlib.h> /*biblioteka C*/ #include <stdbool.h>...
Myślę, że mikro-kontroler będzie idealny. ATmega 8 będzie ok choć moim zdaniem trochę nadmiarowa. Ale jak jest w szufladzie ...jak najbardziej. Co do programu..wydaje mi się, że to raczej dość łatwa sprawa. Np. wejścia układu po obniżeniu napięcia do akceptowalnych przez AVR'a można podać na wejścia INT0 i INT1. Zmiana stanu na wejściu INT0 niech spowoduje...
Pewnie że mamy ;). Użyj przerwań. Najprościej jest zrobić całość 'głównej' części pracy na przerwaniach w następujący sposób: a) Pomiary na timerze 0, wywoływane cyklicznie b) Obsługa przycisków na przerwaniu int0, wystarczy że podepniesz odpowiednio przyciski do pinu int0 i AtMega automagicznie wywoła przerwanie gdy tylko wykryta zostanie zmiana stanu...
Prosił bym o pomoc w szukaniu. Przerobiłem już wszystkie kody obrotomierzy jakie znalazłem, wyszukane pod rożnymi hasłami. Nie wiem czy dobrze się do tego zabieram, ale próbuję napisać wsad do uC. Atmega jest podłączona jednym pinem (data) z odbiornikiem 433mhz, a druga atmega pracuje jako nadajnik i wysyła w różnych odstępach czasowych impuls który...
Ten programik miał tylko uruchomić zmianę stanu na porcie w przerwaniu. Pętla while u mnie jest nieskończona tak jak to zaobserwowałem w innych programach, jak na razie nic się w niej nie dzieje bo testuje same przerwania. Dziękuje ci za pomoc popołudniu wprowadzę poprawki i sprawdzę czy zadziała. Może masz jakiś przykład działającego programu który...
Witaj. Jako osoba pisząca w asm to sprawdzanie jest dla mnie przekombinowane, i jest to wynik działania jakiegoś kompilatora, dlaczego? dlatego: 1) zmiana stanu pinu może nastąpić pomiędzy odczytami portu a po niej jest kilka cykli więc nie chodzi tutaj o pilne i dokładne wykrycie tej zmiany. 2) analizując zapis można to zrobić o wiele prościej i będzie...
Witam, jak jest problem z edycją kodu a problem jest jedynie z zamianą poziomu stanu aktywnego to najprościej jest dać inwerter poziomu na tranzystorze Nie problem jedynie w zmianie stanu aktywnego poprzez inwertery. Atmega ma pewien czas "rozruchu" i zanim zacznie normalnie działać na wyjściach jest stan niski i reszta układu traktuje to jak stan...
chociażby przy wsadzie z mrugającym LED. Jak ustawiam zmianę stanu pinu z opóżnieniem 2000 ms, to w stanie wysokim jest 5V a w niskim jest zmiana na 2,30V. Myślałem, że miernik mi padł, więc podłączyłem LED, i w stanie wysokim świecił, w niskim też, ale ledwo ledwo.
Witam, pracuje nad małym systemem modułowym do sterowania w domu. Na ten moment mam : -klawiaturę Matrix do wpisywania kodu do drzwi (atmega88pa) -manipulator do temperatury (atmega164pa) -czujnik temperatury (attiny84a) Zamówiłem wszsystkie części i własny projekt płytek pcb. Klawiatura działa bez żadnego problemu, program wgrywa się i działa w 100%...
Masz 3 źródła przerwań od każdego z rejestrów osobno. Tryb ctc ładuje albo z OCR1A albo z ICR1. Za pomocą wymienionych przez ciebie bitów możesz zapisując do nich jedynkę wymusić taki efekt jaki by wystąpił w momencie gdy licznik jest równy danemu rejestrowi OCR1 (A,B,C). Efektem tym jest zmiana stanu wyjścia licznika (pinu portu) jeśli takowe wykorzystujesz....
Waitms umieśicłem w pętli dlatego żeby była jakakolwiek komenda, myślałem że między while [warunek] a wend musi znajdować się jakieś polecenie, jednak okzauje się że go tam nie musi być. Sprawdziłem program po zamienie polecenia Set przycisk1 na Set PORTB.0 itd - działa idealnie, po kilkudziesięciu próbach nie było ani jednej nieudanej ani nie było...
Ten algorytm zupełnie nie działa, bo nie posługuje się jakimkolwiek wiarygodnym wzorcem czasu. Nie wiesz więc, czy masz częstotliwość 5, 50 czy 500 Hz. WIszy tylko, że są jakieś zmiany stanu wejścia.
Teraz kod sprawdza przycisk co około 1,4s, a więc musisz trzymać przycisk tak długo. Nie chodzi mi o sprawdzanie co jakiś czas, tylko o wykrycie samego faktu, że na wejściu nastąpiła zmiana stanu z 1 na 0: //.... unsigned char pina_laststate = PINA; for(;;){ PORTC= 0b11111110; PORTB=LED[j]; _delay_ms(4); PORTC=0b11111101;...
Ta bramka AND nie ma możliwości ustawienia wyjścia w stan HiZ, więc jeśli będziesz chciał, aby MCP2515 był aktywny (CS w stanie niskim), to popłynie prąd od bramki do MCP2515 - próbujesz wysterować jedną ścieżkę dwoma układami. W ten sposób albo coś uszkodzisz albo popłynie trochę duży prąd, jakkolwiek niczego dobrego nie uzyskasz. Musisz pozbyć się...
Cześć wszystkim, jestem tutaj nowy i dopiero zaczynam przygodę z elektroniką więc jeśli zadam teraz głupie pytanie to bardzo przepraszam i liczę na wyrozumienie. Słuchajcie mam taką sytuację : - Chcę za pomocą atmegi8 "wrzucić" danę do przerzutnika (pin PB1 to stan do zapisania D, pin PB2 to zegar który CLK do przerzutnika) - Przerzutnik D zbudowany...
To wygląda na to, że uC ma poziomy zbliżone do CMOS (zmiana stanu logicznego jest wykrywana około 1/2 napięcia zasilania), a nie do TTL (około 1.5V), i trzeba zadbać o to, by przy braku sygnału napięcie na T5 było znacznie większe , co najmniej 3.5V. Może zamiast 1N4148 wstawić jednego niebieskiego LED-a? Poza tym myślę, że kondensator powinien mieć...
W ostatnim przypadku Atmega nie odpowiedziała nawet na żądanie o deskryptor... Komunikacja wchodzi w stan IDLE i tyle. Idealnie by było jakbyś w sofcie dodał jakieś logowanie komunikacji żeby zobaczyć co robi w tym czasie Twój procesor. Możesz dodać najprostsze wysyłanie przez RS232. Oscylogram też by się przydał bo te przebiegi co ostatnio wrzuciłeś...
Nie wiem jak to w bascomie nie wnikałem w kod, ale można to zrobić tak że deklarujesz aktywację przerwania jednym zboczem, a po jego wywołaniu zmieniasz tą konfigurację na drugie zbocze (zmiana w rejestrze MCUCR). Albo wywołanie przerwania ustawiasz na dowolną zmianę sygnału i w jakiejś zmiennej przechowujesz stan wcześniejszy i porównujesz
Dla mnie C jest czarna magia dlatego w LD programuje Dodano po 13 dało by się zaprogramować jakoś w LD? mniej wiecej tak ze jesli jest sygnał na wejsciu to ustawia znak na wyswietlaczu sutawia kolejny i kolejny i kolejny jesli jest zmiana sygnału na inne wejscie to sie resetuje wyswietlacz i znowu ustawia znaki po kolei?
#include <avr/io.h> #include <util/delay.h> #define LED_PIN PB1 // Pin PB1 int main(void) { // Ustawienie PB1 jako wyjście DDRB |= (1 << LED_PIN); while (1) { PORTB ^= (1 << LED_PIN); // Zmiana stanu diody (ON/OFF) _delay_ms(500); // Opóźnienie 500 ms } } Taki progrAm tez nie działa, pin pokazuje0v +plus dioda podlavzona Dodano...
Od czegoś trzeba zacząć :). Co do paięci w atmega - owszem jest ona, ale ma ograniczoną liczbę zapisów, a u mnie w pamięć bedzie szło co zmiana stanu jasności żarówki, stąd konieczna jest zewnętrzna. Ja próbowałem w AVR Stuidio i gcc.. ale jakoś mi się nie spodobało... Co nie zmienia faktu, że żarówka migocze :)
Zwróc uwagęna to, czas trwania stanu wysokiego na lini zegara SCK generowanego przez zmianę stanu lini PA1 jest bardzo krótki w porównaniu do trwania czasu niskiego: for (char a=0; a<8; a++) { PORTA &= ~0x80; // tu ustawianie w stan niski PORTA &= ~0x80; if((PINA & 0x20) == 0x20) Byte |= (0x80 >>...
a to co piszesz o NOP to jakaś herezja bo co ma zmiana stanu do porónywania zawartości zmiennej ze stałą ? Dużo, i zalecam lekturę datasheta temat wałkowany wielokrotnie.
Witam, mam problem i proszę o pomoc. Posiadam czytnik RFID, który ma wyjście TX. W terminalu na komputerze odbiera ok. przykładowy odczyt (0A00A295DD). Dane wysyłane są w 10-ciu znakach i działa to dobrze, praktycznie żadnych błędów. Teraz opiszę mój problem. Chciałem zacząć od prostej obsługi. Czyli odbiór danych przez UART. Wpisanie jednego odczytanego...
Witam mam prosty program. Timer zlicza naciśnięcia przycisku. Problem polega na tym że po jednokrotnym naciśnięciu wartość zwiększa się o jakąś ilość (nie zawsze o 1). Jak temu zaradzić? np. żeby zmiana stanu licznika była możliwa tylko co określony odcinek czasu. [syntax=basic4gl]Config Pinb.0 = Input Set Portb.0 Config Timer0 = Counter , Edge = Falling...
Witam Zerknij [url=http://www.elektroda.pl/rtvforum/to... nie jest to rozwiązane jak napisałeś, choć można się doszukać pewnego podobieństwa. To co opisałeś to zmiana kierunku transmisji na magistrali 1wire, a nie zmiana jej stanu. AVR mają porty (można sterować każdym bitem niezależnie) w których trzeba wprost określać kierunek przesyłania...
mega32 jest układem CMOS, dodatkowo jeśli pin w uC jest wyjściem, to jest ściągany do gnd lub vcc i nie ma potrzeby dodawania zewnętrznych oporników (nie występują stany nieustalone). O owych ładunkach to może być sytuacja, gdy przewód jest podłączony do samych wejść (nic nie wymusza żadnego napięcia), pojawia się stan nieustalony, który może być odczytany...
Witam, przecież wskazanie enkodera nie zależy od wartości na pinie, tylko od zmiany tej wartości. Teraz przerwanie wywołuje enkoder drugi, a Ty przy okazji zmieniasz pozycję dla pierwszego. Pozdrawiam. Właśnie na to samo wpadłem patrząc na ostatnie przebiegi - wszystkich wyjść enkoderów: https://obrazki.elektroda.pl/1941533100_...
Witam, czy ktoś może spotkał się (i znalazł rozwiązanie) z problemem zawieszania ATmega32 (lub podobnego układu) przy czym ze stanu zawieszenia nie można wyjść nawet poprzez ręczne zwarcie wejścia RESET do masy. Oczywiście na wejściu reset jest rezystor 4,7k + kondensator 10n, na zasilaniu procesora i większości układów kondensatory 100n, zasilanie...
Wpisywanie $CRYSTAL bez rzeczywistej zmiany taktowania procesora będzie powodować, że wszelkie opóźnienia i obliczenia kompilatora dotyczące liczników nie będą zgodne ze stanem faktycznym. GETRC5() korzysta aktywnie z licznika TIMER0. Tak manewruje wartością wpisaną do rejestru licznika oraz preskalerem by otrzymać jednakowe odcinki czasu zliczane później...
Nie da sie, stad pisalem, ze gcc pod tym wzgledem obsysa. Mozesz wykorzystac jeden bit wskaznika (zakladajac, ze 32kB ci wystarcza) do rozroznienia typu zmiennej (SRAM lub FLASH), badac stan tego bitu w procedurze i wywolywac odpowiednia wersje memcpy. Inna mozliwosc - miec dwie wersje funkcji.
Mam pytanie o programowy reset w jaki sposób może powstać reset -programowo .Mam ok 50k kodu dlatego nie prezentuje a układ ma ponad 600 pól lutowniczych jest dość skomplikowany .Moje pytanie brzmi jak w nie planowany sposób programowo powstaje pasożytniczy reset ? Dodaje że nie ma on związku ze zmianą stanu portów oprócz zmiany linii danych na wyświetlaczu...
Można by było spróbować tak: 1. Na pierwszym uC ustawić zegar 2. Zaprogramować tak, że po zmianie sekundy daje krótki impuls na jakiś pin. 3. W pozostałych dwóch stawić jeden z pinów INTx i w momencie wywołania przerwania zwiększać liczbę sekund. Wadą tego rozwiązania są możliwe zakłócenia indukujące się na przewodzie. Jednakże stosując zewnętrzne mocne...
Nie wiem czy dobrze zrozumiałem, ale jeśli ma byc obserwowalna zmiana na porcie (np. dioda pali sie, a za moment gaśnie), to dobrze byłoby wstawić gdzieś pomiędzy instrukcje ustawiania/zerowania pętlę opóźniającą. Oczywiście wszystko przy założeniu, że dobrze zrozumiałem :).
Kompilują się bez problemu, lecz z działaniem to raczej kiepsko :) Dopiero w nocy jak spałem uświadomiłem sobie że raczej nie ruszy, no bo co ze zwiększania A, musi być jakaś komenda jeśli wystąpi stan 0 to wtedy zliczaj, Powiedz mi, jaka jest Instrukcja za pomocą której możemy zliczać przyciśnięcia?? Bo cały czas tkwie w jednym jeśli jest stan 0 to...
Witam Buduję układ z wykorzystaniem hex inwertera HCF4049 , pracuje on jako układ drivera dla tranzystorów P-MOSFET, układ sterowany z atmega 8, częstotliwość niewielka kluczowania niewielka, co pare sek zmiana stanu. HCF4049 zasilony jest z 12V i tu mam problem, gdyż strasznie sie grzeje i pobiera ogromne ilości prądu gdy na wejściach ustawie stan...
Witam Mimo, że większość proponowanych tutaj rozwiązań podłączenia RFM12 do Atmegi wykorzystuje SPI programowe, ja podłączyłem tradycyjnie, przez SPI sprzętowe - mimo, że nie miałem problemów z wgrywaniem kodu do Atmegi spiętej z RFM12, to uruchomienie ich razem jest problematyczne ( każde osobno działa bez problemu ) [syntax=basic4gl] $include "Config_AVR-DOS.BAS"...
Witam, Podczas pisania programu wykorzystywanego w projekcie natknąłem się na niespotkany przeze mnie wcześniej problem, który próbowałem już rozwikłać samodzielnie przez dłuższy czas. Niestety zarówno poszukiwania w internecie jak i pomoc znajomych były bezowocne. Problem dotyczy programowania ATmega128A. Otóż zarówno podczas wgrywania programu do...
Piszesz, że co sekundę odświeżasz LCD a po sprawdzeniu poniższego warunku są tylko linie odpowiedzialne za buzzer. if(fzegar) //czy mozna odswiezyc czas na LCD Wyświetlacz odświeżany jest cały czas i pewnie to zajmuje więcej niż 1 sekundę. Przykład na sterowanie buzzerem który podał mirekk36 jest bardziej czytelny, a PORTB^=0x02; to zmiana stanu...
http://obrazki.elektroda.pl/5016503100_1... Układ nadążny za słońcem- inaczej układ śledzący, jest rodzajem układu sterowania, który umożliwia automatyczne lub półautomatyczne wodzenie za Słońcem. Układy tego typu wykorzystuje się najczęściej w celu znacznego podniesienia wydajności baterii fotowoltaicznych lub kolektorów słonecznych....
Nie o to mi chodziło ale mniejsza z tym :) Poprawka oprogramowania z 14 kwietnia. Dziś sobie przypomniałem, że jak zaczynałem robić oscyloskop (jeszcze na wyświetlaczu L2F50) miałem go w drugą stronę (Jakby do góry nogami) i dlatego zapisywanie do bufora próbek musiało być wykonywane od tyłu żeby potem dobrze było to wyświetlać. I zapomniałem potem...
Proponuję to zrobić tak: http://img376.imageshack.us/img376/2247/... Tranzystor zależny od prądu silnika (dla BD137 - do ok. 1A) Wartość R1 zależna od prądu silnika i wzmocnienia (β) tranzystora D1 ma za zadanie tłumić przepięcia powstające przy wyłączaniu silnika (silnik to indukcyjność!) Wystawienie stanu wysokiego na pin procesora do...
Na wstępie dodam, że po prostu nie miałem pojęcia jak nazwać temat. Nie jest on też problemem samym w sobie, a jedynie pytaniem, czy ktoś się z tym spotkał, jak nazywa się takie zjawisko i kiedy należy na nie zwracać uwagę. Czym dokładnie? Aktualnie próbuję swoich sił w obsłudze klawiatury matrycowej 2R x 4K na ATMedze 328p. Połączenia: - PC1:0 to rzędy,...
Mam jeszcze pytanie o wejścia do switchy. W tej chwili nie reagują wcale Brak jest obsługi przycisków. Poniżej kod z książki M.Wiązania [syntax=basic4gl] 'Program obsługi przycisków S1, S2 za pomocą instrukcji Debounce $REGFILE = "m8def.dat" 'informuje kompilator o pliku 'dyrektyw mikrokontrolera $CRYSTAL = 8000000 'informuje kompilator 'o częstotliwości...
no nie doprecyzowałem, przed resetem przerwanie wykonuje się 30 razy , potem jest reset programowy > czyli jak w opisach Dodano po 14 edit - 1 cykl od resetu do resetu to 30 razy wykonane przerwanie i potem reset wiem, że to brzmi niedorzecznie dlatego podejrzewam jakiś kardynalny błąd w ISR jest zmiana stanu pina i wysłanie na uarta > stąd wiem, że...
Istotnie są enkodery, które generują pojedyncze przejścia, albo całe cykle, lecz w praktyce nie ma to znaczenia i metoda opisana przez (at)PDT sprawdzi się w obu przypadkach. Jedynie wynik należy podzielić przez 4 jeśli enkoder generuje pełen cykl/przejście No nie bardzo, przecież w enkoderze z pojedynczymi przejściami (to znaczy ze zmianami pojedynczych...
Mam następujące pytania : Czy faktycznie zrezygnować z rezystorów "szeregowych" pomiędzy kolektorem układu "proxy" a wejściami uC ? Tak, nie są one potrzebne. Jaką rolę miałyby one spełniac? Czy rezystory podciągające kolektory należy podłączyć do ścieżki wyjścia stabilizatora 7805 ? Tak, ... I te też nie są absolutnie konieczne, lecz ze względu na...
Przede wszyskim sprecyzuj jakie sygnały chcesz badać - częstotliwość i szerokość badanych impulsów (granice). Od tego zależy czy wybrana metoda jest dobra. Po drugie sprecyzuj co chcesz badać - mierzysz szerokość impulsów, czy interesuje cię różna reakcja na zbocza? Wśród AVR masz różne rodziny, ATTiny, ATMega, XMEGA, niektóre znich mają specyficzne...
A konkretnie, czy zmiana stanu portów z wejściowych na wyjściowe w pętli nie uszkodzi mikro kontrolera ? A czemu miałaby to zrobić? Oczywiście warto to przemyśleć i nie ustawiać stanu wysokiego na porcie zwartym do masy. Niemniej uszkodzenie portów AVRa to nie jest taka prosta sprawa bo są całkiem dobrze zabezpieczone przed przeciążeniami i przepięciami.
Nie mam pojęcia po co chcesz pchać tutaj uC chyba, że jest to w ramach szkolenia. Co do schematu, jeżeli zamierzasz użyć atmegi należy przerobić trochę schemat. Program nie ma prawa działać, gdyż nie ma najmniejszego sensu. uC po trzykrotnym wykonaniu pętli pozostanie w stanie Portd.0 = 1, Portd.1 = 1. Masz tutaj kawałek kodu z opisem, przetestuj go...
Zrobiłem kod z przerwaniem i również nie działa tak jak powinien [syntax=c]#include <avr/io.h> #include <util/delay.h> #include<stdio.h> #include<hd44780.c> #include<avr/interrupt.h> #define TRIG PC1 #define ECHO PD2 volatile int echo_flag =0; volatile int time =0; char ekran[6]; int main(){ DDRD = 0x00; // ustawienie portu...
Chwileczkę, czy Autor tematu sądzi, że My przedstawimy (Napiszemy, wkleimy) gotowy kod, lub nawet fragmenty ? nie wydaje mi się, żeby było to problemem. Temat jest na tyle popularny, że prawie każdy przez niego przechodził i nie jest to kwestia trudności w "kopiuj-wklej", tylko "czy dać rybę, czy wędkę?" Timer1 w Atmega 8 ma dwa kanały PWM Korzystanie...
Czyli gdybym zastosował komparator np. LM339 i dzielnik 1/8 za nim, to mogłoby to działać? Nie rozumiem po co chcesz dzielić LM339 jest trochę wolniejszy od LM311, w LM339 zmiana stanu na wyjściu pojawi się po 0,5us, a więc 2MHz nie przekroczy, oczywiście istnieją szybkie komparatory, tylko nadal nie wiem jaką chciał byś uzyskać poprawę w ten sposób....
Dopiero teraz udało mi się wczytać w #65 na tyle, żeby zrozumieć, w czym problem: przy narastaniu napięcia z R2 zmiana stanu OUT jest przy 1.1V, a zmiana stanu DIS dopiero przy 1.9V; w drugą stronę jest dobrze, przy opadaniu napięcia z R2 DIS i OUT zmieniają się jednocześnie. Próba naprawienia tego przez dodanie opornika między OUT i RST spowodowałaby...
Witam. Postanowiłem spróbować nauczyć się kilku podstaw z mikrokontrolerami i programować je. Kupiłem zestaw EVBavr05 Propoxu z atmega16. Do zestawu dołączone zostały również przykładowe programy napisane w c. Próbuje w pisać w BASCOM, jednakże po poprawnym skompilowaniu programu, przeprowadzeniu symulacji i wgraniu na procesor nic się nie dzieje. Atmega...
Zacznijmy od pytań: 1. Które bity według Ciebie ustawiłeś w TCCR2B : Autor tematu pisał, że stosuje gotową bibliotekę do obsługi jakiegoś panelu dotykowego. Z tego, co zrozumiałem, to przerwanie to znajduje się we "wnętrzu" tej biblioteki. Takie efekty są oczywiście normalne, gdy ktoś mało świadomy tego, co się dzieje w jego programie stosuje gotowe...
Jak w temacie, poskładałem sobie prosty adapter do programatora STK200. Program sie wgrywa bez zarzutu. zamiast 0V podaje mi 3,4V natomiast stan wysoki jest normalnie 4,8V-5V wysłanie na port wartości binarnej np. 01010101b powoduje ustawienie napięć na pinach portu jak niżej 1 --->3,4V 2 ---> 5V 3 --->3,4V 4 ---> 5V 5 --->3,4V 6 ---> 5V itd. Program...
A kondensator C3? Ja to widzę tak - po podłączeniu zasilania cały układ "stoi", kondensator ładuję się do 2.5V, na wyjściu jest stan niski, układ LC rezonuje, sprzężenie zwrotne działa. Tak? Bez tego układ w ogóle nie zaczął by generować, startuje to jak oscylator RC niskiej częstotliwości (zobacz schemat I czy sinusoida sygnału na wyjściu układu LC...
drobna poprawka Zamiast "trwa świecenie" będziemy tworzyli nową zmienną kontroli stanu na porcie ? Nie bo ta informacja jest zapisana, tylko gdzie? ... w przerzutniku portu C ponieważ właśnie powyżej stan portuC zmieniliśmy na przeciwny. Niestety nie wiemy czy na 1 czy na 0? Ale wystarczy teraz ten bit odczytać z portu i sprawdzić czy jest 1 Dodano...
Zmiana tego: if (PINB == (0<<PB0) na to: if (!(PINB & (1<<PB0)) lub: if (PINB & (1<<PB0) Zadziałała. Aczkolwiek jeszcze jej nie rozumiem. Tylko na pinie PA5 (tam gdzie ma świecić dioda) napięcie w stanie niskim jest ok 1,8V. Więc jak włącznik włączam/wyłączam to dioda świeci mocno/słabo.
Składam sterownik do wykonania zadań opisanych w poprzednim temacie: Schemat sterownika wygląda tak: http://obrazki.elektroda.pl/8915390500_1... płytka: http://obrazki.elektroda.pl/2389739900_1... Schemat płyty przekaźników: http://obrazki.elektroda.pl/2178550400_1... Płytka: http://obrazki.elektroda.pl/9184412900_1...
Przepraszam ale w pierwszej wypowiedzi popełniłem błąd logiczny - oba przerwania powinny być ustawione na te same zbocze a nie różne. Dlaczego, bo tak jak napisałem wcześniej nie będzie można określić kierunku zmian, zawsze bedzie ta sama kolejność wywoływania przerwań. Obojętnie czy kręcimy w lewo czy w prawo. np. ChA narastanie 0->1 a ChB opadanie...
Witajcie, Sytuacja wygląda tak: mam procesor ATMEGA88 i wykorzystuję bibliotekę PinChangeInterrupt do obsługi przerwań. Co się stanie w momencie, w którym dwa przerwania przyjdą w tym samym momencie? Jedno z nich zostanie całkowicie zignorowane czy obsłużone po tym wcześniejszym? I jeśli ta pierwsza sytuacja, czy da się je jakoś skolejkować? Druga kwestia;...
Nic się nie stanie, jeśli przeliczenie tablicy opóźni trochę zmianę przebiegu na wyjściu - zwykle i tak musi być rampa przystosowująca (spowalniająca) takie zmiany do możliwości napędu. Zwróć uwagę, że w zasadzie możesz wprowadzać zmiany w przebiegu po wygenerowaniu przynajmniej jednego pełnego okresu, w przeciwnym wypadku, może pojawić się składowa...
Chciałbym Ci zaproponować trochę bardziej eleganckie rozwiązanie - bez delaya w przerwaniu i z sensownym debouncingiem: [syntax=c]#include <stdio.h> //dodajemy biblioteki, które umo¿liwiaj¹ korzystanie z procedur #include <math.h> #include <avr/io.h> #include <util/delay.h> #include "LCD.h" #include <avr/interrupt.h>...
Raczej nie wydłuży obsługi przerwania,a w przypadku uC wydajniejszych od ATmega wręcz ją skróci, bo modyfikacje zmiennej bez atrybutu volatile zajmują zwykle mniej czasu, niż modyfikacje stanu portu. Być może w AVR jest tak samo - to zależy i od sprzętu i do kompilatora. Po prostu te operacje, które wykonujesz na porcie, należy wykonywać na zmiennej...
Jak wcześniej pisałem wyrzuciłem wszystko co nie było związane z transmisją aby bliżej przyjrzeć się problemowi i faktycznie wyrzuciłem zbyt wiele. W pętli głównej oryginalnie jest skok do funkcji analizującej drugi bajt oraz zmiana stanu odbiornika - NetRxState = 0x00; //RESET Użyty kwarc to 11,059200MHz Chyba trochę przesadziłem pisząc ten automat....
Hej, Dzielnik zmieniłem i jest przed diodą. Dodanie kondensatora C6 za diodą powodowało, że przy rozłączeniu zasilania mega nic nie zapisywała i zliczała od zera. Podobnie jak wpisanie polecenia RISING. Odlutowałem C6 i zmieniłem polecenie na FALLING. Zamieniłem dzielnik tak jak był na początku a więc 100K i 18K tak aby comparator wyzwalał się przy...
Nie napisałeś nic o tym, ile będzie trwał stan wysoki (czas minimalny jeśli dany pin jest podciągany pod VCC), czy są jakieś czasy krytyczne. Co ile może pojawić się zbocze ? Generalnie ja to widzę tak: potrzebujesz zmienną. Jej wartość odpowiada wartości danego pinu, na którym masz wykrywać zbocze. Załóżmy wartość początkową 0. Gdy zmienna=0 i odczytany...
"Prosty program" już dawno napisany, wszystko działa, procesor, wejścia, wyjścia, procesor reaguje na sygnały z przycisków oraz z LPT. Problem ewidentnie dotyczy obsługi licznika. Jeśli dobrze zrozumiałem, program powinien zliczać zbocza opadające wejścia T0 i po dwóch takich impulsach ma nastąpić przepełnienie licznika i przeładowanie do wartości 254,...
Dzięki piotrva za wyczerpującą odpowiedź :) Rozumiem, co się dzieje kiedy kondensator jest pusty, ale przecież kiedy po resecie się naładuje, układ również działa, tzn: 1. Kondensator pusty, BT zmienia stan na LOW, kondensator ciągnie z resetu 1.7V, następuje reset, kondensator się ładuje i pozostaje naładowany 2. BT po odłączeniu zmienia stan na 3.3V...
Co zrealizować? Programowe zliczanie impulsów? Ustawiasz timer tak, żeby generował przerwanie co 100 us, sprawdzasz stan portu, robisz xor z poprzednim stanem i testujesz, które bity są ustawione - ustawiony, znaczy zaszła zmiana stanu, czyli inkrementujesz odpowiednią zmienną.
Pod kompa nie podłączysz bo nie ma konwertera na RS232 (chyba że jesteś w stanie podpiąć jakiegoś max'a na 3,3V). Kwarc i tak musisz dołożyć bo na wewnętrznym generatorze (zakładam, że taki właśnie masz) nie uzyskasz nawet 19200 (mimo, że z tabelki wynika, że błąd jest poniżej 2%). Kształt może wynikać z pojemności w torze pomiarowym. Co to za oscyloskop...
Witam. Jestem początkującym programistą z językiem c dopiero zaczynam. Póki co trenuję na układzie atmega i dioda led . W jaki sposób mogę napisać pętle w której dioda będzie migała od chwili "naciśnięcia i zwolnienia przycisku" i przestanie migać po ponownym naciśnięciu i zwolnieniu przycisku? Mam taki kod: [syntax=csharp] #define LED_PIN (1<<PB1)...
Witam, Jeszcze aby była pełna jasność odnośnie sposobu działania modułu odbierającego RFM01 (a może również i RFM12xx). Na podstawie własnych obserwacji przedstawiam sposób działania sygnału nIRQ dla modułu odbiorczego RFM01 ver. 3.0 868MHz. Konfiguracja modułów dokładnie jak w przykładowych programach od producenta. Poniższy obrazek przedstawia przebieg...
Jaka prędkość transmisji baud ? Schemat masz poprawny. Dzięki za czas poświęcony na analizę schematu. Parametry transmisji: 19200 8N1 Przy czym problem raczej nie ma związku z prędkością transmisji. Nawet pojedyncza zmiana sygnału przełączającego nadajnik/odbiornik powoduje zmianę sygnału na linii odczytu danych. ------------- Właśnie zrobiłem jeszcze...
Cześć. Z pomocą arduino, atmeg, radia rf24 oraz innych komponentów zmajstrowałem sobie aparaturę nadawczą i odbiorczą do modelu rc własnego autorstwa. Oczywiście napotkałem problem. Kod programu jest w 100% sprawny i maksymalnie uproszczony, więc problem dotyczy elektroniki. Nadajnik nadaje bez zarzutu, natomiast odbiornik zachowuje się dość dziwnie....
Tylko, że tak zapisany kod wygeneruje trochę więcej intstrukcji niż "ręcznie" zoptymalizowany z AND, OR, SHIFT. Oczywiście biorąc pod uwagę pewne uproszczenia. Na przykład. dim xx as byte dim yy as byte xx = pinb yy = pind xx = xx and &b00000110 shift xx, right, 1 yy = yy and &b11000000 shift yy, right, 4 xx = xx or yy na wyjściu w XX dostniesz:...
moze pomogłoby połaczenie kilku programowanych równolegle liczników i na tej podstawie (przy odpowiedniej częstotliwości zegara) programować go wartością przy której liczniki zgłaszałyby przerwanie (przeniesienia albo pożyczki w zależności w którą stronę by liczył) wówczas może by można było mówić o nieco płynniejszej regulacji częstotliwości. Tylko...
dla pozostałych wejść masz przecież też przerwanie od dowolnej zmiany stanu na wejściach więc chyba coś można wymyślić innego niż zewnętrzna logika. Dokładnie w tym miejscu problem - w moim AtMega nie ma PCINT, więc próbuję to obejść sprzętowo. Inaczej bym się nawet nie bawił, ale dwa przerwania (INT0 i INT1) to dość niewiele dla kilku przycisków +...
Niestety zmiana częstotliwości nie pomogła, ale używając funkcji "kreślarki" w Arduino i prostego programu wyświetlającego stan pinu, udało mi się nagrać dwa przebiegi: Z programu w poście #19: https://obrazki.elektroda.pl/3840938300_... Ze zwykłego pilota ir: https://obrazki.elektroda.pl/1732657400_... może ten przebieg...
Z tego co mi wiadomo to Xplain jest oparty na µC AtXmega (dokładnie Atxmega128A1), w sumie jest to architektura AVR, więc piszesz podobnie jak na inne AVR-y np. ATmega, ale nie zupełnie. Na przykład do portów możesz dostać się tak: - "kierunek" odpowiednik DDRx (data direction register) pinu 0 portu A -> PORTA.DIRSET=PIN_0_bm, - "ustawienie" pinu...
No właśnie nie. Dlatego pisałem skokowo. W dodatku nie moga być 2 zasilacze bo .... projekt ma umożliwiać ustawienie tych 2 stanów. Czyli w atmega robie soft którym ustawiam napięcie LOW ( np. 12, 14, 16V ) i napięcie HIGH ( 14, 16, 24V ) oraz czas pomiędzy zmianami. I sterownik zmienia napięcie co zadany czas. Dodam iż wg. pomiaru oscyloskopem nie...
WITAM CLK - Sygnał taktujący. Jeden impuls podany na tą końcówkę obraca silnik o 1 krok DIR - Wybór kierunku obrotów. Zmiana stanów na tym wejściu powoduje zmianę kierunku obracania się silnika. ENA - Sygnał luzujący silniki - Stan niski na tej końcówce odłącza zasilanie doprowadzane do uzwojeń silnika. Zobacz:http://www.akcesoria.cnc.info.pl/...
sprawdzenie stanu atmega licznik zmiana stanu zmiana stanu licznika
silnik dymić biały prawa konsument bosch sterownik silnika
schemat amator stereo radio internetowe
Gdzie w Radomiu wytarować wagę łazienkową? Odzyskiwanie kodu radia Hyundai Santa Fe 2007