Przerwanie wyzwalasz poziomem czy zboczem? Kolejna sprawa. Gdzieś czytałem, że AVR po wyjściu z przerwania wykonuje JEDNĄ INSTRUKCJĘ i przechodzi znów do obsługi przerwania (jeśli jest nowe). Jeśli chcesz blokować wskoczenie do nowego przerwania , to musisz w OBSŁUDZE POPRZEDNIEGO PRZERWANIA na samym końcu sprawdzać bit zgłoszenia ponownego przerwania....
przyzwyczajony do uC pokroju atmeg8 A jaka jest róznica w tym? Czy to atmega czy attiny dziala tak samo ale wyczyszczenie flagi tak? Po to jest
Efekt jest dokładnie taki jak kod - o to mogę się założyć. Twój kod ma po prostu błędy i tyle, więc czego oczekujesz? Poza faktem braku volatile "tu i tam", to zerowanie tej flagi w przerwaniu masz, ale gdzie masz jej ustawianie? Nigdzie. 4\/3!!
są różne tryby obsługi lcd(4/8 bitowy, zodczytem flagi zajętości i bez), i nie wszystkie piny musisz wykorzystywać http://radzio.dxp.pl/hd44780/
Powiem Ci, że nie wiem po co tak ma być, ale podam Ci mój kod. [syntax=basic4gl]Rc5get: Disable Int0 Enable Interrupts Set Rc5flag Return[/syntax] Zamiast ustawiania flagi można dać odbiór kodu. Ale ja wolę to robić w pętli. Nie wiem tylko po co to Enable Interrupts skoro jest ustawione na początku programu, ale bez tego nie działa.
A może masz gdzieś funkcję obsługi tego przerwania? Dodano po 4 Dodam, że korzystam z programowego bufora cyklicznego, który w przerwaniach odbiera dane od UDR. Jedyne co mi przychodzi na myśl to to, że przerwanie tak szybko się wykona (odebranie danych do bufora i skasowanie flagi RXC), że część programu: while ( !(UCSRA & (1<<RXC)) ); nawet...
Proszę, gotowy przyklad rozwiązania. Napisałem przy kawie i potestowałem w symulatorku czy się nie pomyliłem gdzieś ;) [syntax=basic4gl]$regfile = "m8def.dat" '$sim 'dla symulatora Config Portd.5 = Input : Set Portd.5 : Czuj_1 Alias Pind.5 Config Portd.6 = Input : Set Portd.6 : Czuj_2 Alias Pind.6 Config Portd.7 = Input : Set Portd.7 : Czuj_3 Alias...
programu to ja ci już nie przeanalizuję teraz bo padnięty jestem ..... .... ale to że wgrywasz bootloaderem i że atmega była programowana wiele razy - nie ma tu najmniejszego znaczenia Dodano po 22 ok - po pierwsze nie stosujesz wcięć w kodzie a jak stosujesz to totalnie bez ładu - przez co nawet tobie trudno później dostrzec jakieś błędy (a szczególnie...
Dlaczego wykorzystałeś drugie rozwiązanie zamiast pierwszego (IMHO - znacznie lepszego)? Wykorzystując takie zmienne jako flagi prowadzisz do niepotrzebnego komplikowania kodu i utrudnienia kontroli dynamicznie rozwijającego się programu :) Jedna z propozycji rozwiązania problemu: [syntax=c]char SPI_MasterTransmit(char cData){ char spi_return; ATOMIC_BLOCK(ATOMIC_RESTORESTATE){...
Czekaj, czekaj. Jeden czujnik odpali przerwanie INT0 a w tym przerwaniu sie uruchomi timer. Drugi czujnik po INT1 ma go wyłączyć. Raczej o tym myślałem. Lepiej tak: czy ktoś by mi dokładnie wytłumaczył jak wywoływać timery, zbierać z nich czas, do czego służą poszczególne rejestry. Noty katalogowej tego procka po polsku nie znalazłem, a dobrego poradnika...
Tego nie widziałem. Znalazłem za to informację że dotyczy to rezonatora pracującego jako generator wytwarzający główny sygnał zegarowy: http://obrazki.elektroda.net/9_123515576... A po drugie, akurat w ATMega8 jest błąd w krzemie i te wewnętrzne kondensatory nie działają (tzn. FuseBit ich nie włącza). Użycie rezonatora jako źródła sygnału dla...
Polecam blog naszego kolegi: http://www.stsystem.elektroda.eu/index.p...
Tomqu z podanych przeze mnie linków ściągnij przykład 04 i podmień w nim main.c na: [syntax=c]#include"main.h" //**************************************... #define BUF_SIZE 8 // definiujemy bufor o rozmiarze 8 bajtów (musi byc potega dwójki dla tego sposobu!!!) // definiujemy maskę dla naszego bufora #define BUF_MASK...
Robi się to prosto na wejściu ICP Atmegi, mierzysz czas pomiędzy kolejnymi zboczami, raz jest opadające, raz narastające itd.. potem to tylko interpretacja wyników, liczenie bitów i po odliczeniu 64 bitów z transmitowanych 66, bo dwa ostatnie dla uproszczenia procedury pomijasz. wyświetlasz na LCD lub wysyłasz po RS232 do komputera, a tam wyświetlasz...
No dobra, udalo ci sie polechtac moja proznosc wiec moze zrobimy tak. Opisze tutaj przykladowego mekafile-a z nastawieniem na WinAVR, Atmega8 i STK200 tak aby inni tez cos z tego mieli. W zasadzie wszystko jest opisane w angielszczyznie no ale jakby kto nie umial to daje po polsku. # Hey Emacs, this is a -*- makefile -*- #---------------------------------------...
http://obrazki.elektroda.pl/5636705900_1... https://filmy.elektroda.pl/37_1378532310... Termometr mikromocowy LCD ATMEGA16 Tym razem głównym celem projektu było sprawdzenie możliwości wykonania mikromocowego systemu pomiaru temperatury w oparciu o możliwie standardowe elementy, mówiąc w skrócie byłem ciekawy czy zwykły avr może być...
...Czy może być coś skopsane w kompilacji komendy "while" w kompilatorze? Pozdr. Skopsany jest zapis instrukcji , a nie kompilator :) Ponieważ kompilator złożone instrukcje wykonuje w pewnej kolejności , to zapisu jakiego użyłeś , chyba nie potrafi zinterpretować. A ponieważ ta instrukcja jest poprawna składniowo , to nie ostrzega o błędzie , choć...
http://obrazki.elektroda.pl/2095365300_1... LCD_RST - RESET LCD_RS - RS LCD_CLK - CLK LCD_DAT - DAT LCD_CS - CS LCD_GND - GND LED_GND - GND LED+ - LED+ LCD_2V9 - 2V9 LCD_1V8 - 1V8 Chyba nie takie trudne :) Czy zastosowanie dwóch mniejszych procków np. Atmeg8 komunikujących się ze sobą poprzez UART nie poprawiło by parametrów urządzenia?...
"Nowe" czyli od Xmega i nowsze AVR mają mozliwość priorytetu przerwania. Poprzednie miały ustalony. Nie wiem jaki to AVR, ale jeśli ustawisz Timer i przerwanie od niego to jak będzie w przerwaniu to oczywiście zauważy potem flagę przerwania z USART, ale może być za późno, dlatego jeśli nie trzeba, to się przerwań od wszystkiego nie uruchamia. Rzadko...
Aby korzystać z flag resetu do rozróżniania poszczególnych warunków wystąpienia resetu, użytkownik powinien odczytać i dopiero później resetować MCUCSR najwcześniej jak tylko to możliwe w programie. Jeżeli rejestr ten jest wyzerowany nim zajdzie inny reset, źródło resetu może zostać ustalone poprzez sprawdzanie flag reset. Atmega sterująca piecem co...
Do każdej noty aplikacyjnej jest dołączona licencja. Zazwyczaj mówi ona, że można używać kodu do celów komercyjnych, a autor nie ponosi odpowiedzialności za szkody wyrządzone przez kod ani za błędy. A więc nie przejmuj się ograniczeniami licencji. Musisz mieć jednak na uwadze to, że sporo (większość?) not aplikacyjnych od Microchipa zawiera błędy i...
Witam, Mam problem z ustawieniem flagi podczas zakończenia odbierania ciągu znaku. Program pisany pod atmege 8. UART inicjalizuje w następujący sposób: [syntax=c] #define UART_BAUD 9600 #define __UBRR ((F_CPU+UART_BAUD*8UL) / (16UL*UART_BAUD)-1) void USART_init(uint16_t x){ UBRRH = (uint8_t)(x>>8); UBRRL = (uint8_t)x; UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<&...
W ogóle nie używamy _delay() -nie tylko w przerwaniach. Poza tym- po co jest to kasowanie flagi przerwania w przerwaniu- po obsłudze przerwania ta flaga sama się kasuje.
Wymuszasz zmianę wartości danego pinu, ale bez ustawienia flagi OCFnx. Nie działa w trybach PWM.
Co do tych flag - nie prosciej ustawic ktrotki okres WD i w kazdym miejscu umiescic WDR? Wtedy na biezaco WD jest resetowany w miare poprawnego wykonywania kodu. W miarę niepoprawnego również. Dlatego flagi są lepsze.
Korzystając z sin ,cos, asin ,acos na avr mam inny wynik niż na komputerze kod identyczny a chodzi o wschód zach. słońca ,nie bardzo już wiem dlaczego tak się dzieje ,potrzebne jakieś flagi kompilatora czy co?
W przerwaniach wywołujesz bardzo długie funkcje. A przerwania masz szybkie więc zanim funkcja się skończy to już kilka-kilkaset przerwań Ci ucieknie pozostawiając po sobie flagi które wywołują przerwanie natychmiast po zakończeniu poprzedniego.
Dostosuj ten przykład do Twojego programu czyli nie mierz w przerwaniu tylko ustaw flagę by dokonano pomiaru. Możliwa wtedy będzie obsługa innych przerwań itd.. To klasyczny przykład jak nie należy obsługiwać przerwań. Ustawianie flagi nie ma żadnego sensu, bo wtedy nie trzeba przerwania. W przerwaniu jak najbardziej można obsługiwać pomiary ADC. Ale...
ATmega (ani prawie żaden inny uC) nie obsłuży przerwania generowanego z częstotliwością 1 MHz. Użyj jednego timera tyko do generowania przebiegu, a innego do zgłaszania przerwań, w ktśrych masz robić to, co robisz raz na jakiś czas.
Witam, drogich forumowiczów. Mam problem z komunikacją kilku urządzeń w sieci rs485. A tak prawdę mówiąc to z komunikacją pomiedzy dwoma, jednym "master" i jednym "slave". Normalnie staram się zadawać pytania w ostateczności na forum Elektroda, ale po prawie 3 tygodniach siedzenia przy problemie, przeglądaniu masy poradników i postów związanych z rs485...
Dodano po 8 Dopiero zauwazyłem, że co 100 ms wywołujesz podprogram Button wobec czego warunku tak nie można wyciąć bo nie będziesz mógł wywołać tego podprogamu. Zaraz coś zaproponuje. Dodano po 1 Jakiej częstotliwości masz kwarc i jaki procesor?
U mnie akurat dość szybko "zaskoczyło". Tylko mam w odbiorniku problem z blokowaniem przerwań/timerów . W nadajniku nie ma takiego problemu. timer działa, bo odlicza czas pomiędzy "wysłaniami" oraz czas wywołania czujników DS i DHT11. Zakładałem, że odbiornik działa tak: - nasłuchuje danych - pojawienie się danych wywołuje przerwanie INT2 ( stan niski...
Czy dobrze zrozumiałem? INT włącza Timer, który dla max prędkości zliczy np. 2000 taktów, więc w pętli głównej gdzie dokonuje obliczeń po ustawieniu flagi (dokonaniu pomiaru) powinien być warunek, żeby program nie obliczał jeśli timer<2000? Coś w stylu: do if flaga then if timer1>2000 tu robi obliczenia i wyswietla predkosc ... loop
Zamiana wyświetlaczy nic nie daje, zamieniałem nawet same kabelki łączące je z płytką i też nic. Jeśli chodzi o przerwania to mam odbiór danych z RFM12 oraz obsługę klawiatury na PCF8574. Może faktycznie coś na rzeczy z tymi przerwaniami. Wyświetlacz, który nie działa jak trzeba oprócz wyświetlania daty, godziny oraz części odebranych danych wyświetlać...
W zasadzie dlugiiii chyba robisz w tym przerwaniu "masło maślane". To chyba będzie działać bo kasowanie flagi przerwania następuje po obsłudze ale rozumiem irytację tadzik85. Mnie taki kod też nieco irytuje.
No to juz twoja glowa zeby wiedzial, kazdy uklad ma zbior instrukcji ktore okreslaja co ma w danej sytuacji zrobic, np jak dostaje 0x45 to odpowiedziec 0x35 a jak 0x25 to zapisac nastepny bajt jaki otrzyma itd itp... Jako ze kazdy uklad ma swoj zestaw instrukcji, a avr takowego nie ma by moc pracowac w dowolnej konfiguracji, to sam musisz taki zestaw...
Cos zle kombinujesz. Po co chcesz przesuwac PORTB ?? Przesuwasz rejestr z dana do wyslania szeregowego a nie rejestr portu. Do tego zadania najlepiej wykorzystac instrukcje ROL lub ROR i testowac flage C instrukcjami BRCC i BRCS (oczywiscie asembler) i w zaleznosci od stanu flagi ustawiac pin lub zerowac. Pozdro Dexter
A wzmacniacz przed głośnikiem dałeś oby? Sam TEA5767 nie wysteruje nawet słuchawek. Oczywiście że można zrobić szukanie - bity sterujące SEARCH, SUD (up/down), MUTE i flagi w statusie READY i BAND_LIMIT, zdaje się że nawet było to w osobnym dokumencie opisane.
Ale zdaje się chodzi o to że jeśli masz podłączoną linię R/W do uC to pewnie przeprowadzasz inicjalizację(czy jakąkolwiek operację na LCD) z odczytem flagi zajętości LCD. Nie wczytywałem się jak to wygląda bo używam biblioteki bez odczytu tej flagi ale prawdopodobnie każda funkcja odczytuje flagę zajętości na lcd aby przyspieszyć jego działanie(pominięcie...
W standardowej konfiguracji avr-gcc skok do przerwania zajmuje 4+2 cykle, ew. więcej gdy przerwanie nadchodzi "w środku" instrukcji trwającej więcej niż 1 cykl. Powrót z przerwania to 4 cykle. To prawda, możesz w pętli testować bit INT0 w rejestrze GIFR, daje to test co 3 cykle zegarowe (sbis + rjmp). Ale równie dobrze możesz testować stan na pinie...
Domyślnie atmegi są taktowane wewnętrznie 1MHz. Przyłączenie kwarcu bez przestawieniu fusebitów nie jest problemem. Atmega go nie używa i tak co jest napisane w dokumentacji. Wszystkie porty na starcie programu są wejściami co można przeczytać w dokumentacji kontrolera w opisie portów wejścia/wyjścia. Źle myślisz: Flagi kasuje się wpisując do nich programowo...
Nareszcie twórcza odpowieć. Dięki wielkie myślę że coś z tym zrobię chociarz nie ukrywam że wolałbym ręczny ruch potencjometru jako priorytet lecz ten program a właściwie atmega musi zmieścić jeszcze więcej funkcji. A jak zrobić żeby flaga była ustawiana dopiero po odebraniu komunikatu? Dodano po 2 Przepraszam za odgrzewanie tematu, napisałem program...
Witam. Mam następujący problem: gdy deklaruje zmienną jako float bądz double, po kompilacji mam około 4 kilo kodu więcej niż gdy jest zadeklarowana jako int, potrzebuje liczby ułamkowej dzieląc tę zmienną w tym przypadku przez tysiąc słyszalem coś ze mogę mieć zle ustawione flagi w kompilatorze ale nie bardzo wiem ocb. proszę o jakąś podpowiedz, dzięki.
To jest dobry pomysł. Na początku main(), zaraz po inicjalizacji LCD wrzuć funkcję wyświetlającą napis np "RESET" i będziesz wiedział, czy to funkcja się wywołuje czy uC się resetuje. Można także wykorzystać flagi resetów z MCUCSR, a konkretnie bit PORF. Bit 0 – PORF: Power-on Reset Flag This bit is set if a Power-on Reset occurs. The bit is...
Tak jak zacytowany w tym punkcie fragment dokumentacji (który także przytoczył piotrva) w momencie rozpoczęcia wykonywania przerwania, blokowana jest flaga I czyli globalne zezwolenie na przerwania. Powoduje ona to, że aktualnie wykonywana funkcja przerwania nie zostanie przerwana aż do jej zakończenia. W tym czasie flagi poszczególnych przerwań np....
To trzeba zrobić, mnie to działa w urządzeniu więc dlaczego miałoby nie działać innym. Atmel daje dokumentacje i trzeba z niej korzystać, może w opisie PWM nie tłumaczy zbyt jasno. Miałem zrobić PWM który miałby 5kHz no i regulację wypełnienia, zrobiłem i działa. Flagi są kasowane w momencie obsługi przerwania. Wykorzystaj przerwanie od przepełnienia....
Witam, Chciałem połączyć stosunkowo szybki przetwornik (lub przetworniki) AC z procesorem ATmega128 poprzez interfejs SPI. Napotkałem jednak kilka problemów do rozważenia. Jako, że jestem początkujący to być może dla wielu z Was te zagadnienia okażą się łatwe i będziecie w stanie mi pomóc, za co oczywiście z góry dziękuję. Problemy są następujące: 1....
No i trzeba sobie postawic pytanie jak dokladny czas jest potrzebny. W wiekszosci zastosowan nawet ten znieksztacony przez czasy przejscia przez siec jest bardziej niz wystaczajaco dobry. Dokładnie tak. Jak dla mnie czas odebrany przez NTP lub time protocol jest wystarczający. Dodatkowo stopień komplikacji w porównaniu z DCF77 jest mniejszy - DCF 77...
Witam, kod nie jest moje autorstwa, więc nie chcę go umieszczać . W każdym razie algorytm jest realizowany w następujący sposób: 1. Wysłanie za pomocą UARTu informacji do uC o zezwoleniu na regulację prądu + wysłanie wartości współczynników regulatora i prądu referencyjnego. 2. Jeśli ustawiona jest flaga zezwalająca na regulację, oraz ustawiona jest...
Jeśli proc faktycznie się nudzi, to może w pętli czekać na zapalenie flagi INTx zamiast zezwalać na wykonanie podprogramu obsługi przerwania. Zyskasz na czasie przyjęcia obsługi przerwania - nie będzie odłożenia adresu powrotu na stosie, oraz wywołania funkcji z wektora przerwań. powodzenia, genetix
atmega odczyt flagi timera attiny13 flagi własne flagi
iveco daily ciśnienie oleju karta pamięci uszkodzona założyć własny radio
Ligier Nova 50cc Morini – lokalizacja impulsatora, dostęp, testy, wymiana Ligier Nova 50cc 2T Morini – przewód impulsatora do CDI, kolory Dansi/Ducati, identyfikacja