po pierwsze i najwazniejsze - w przerwaniu N_I_G_D_Y nie daje sie opoznien, a juz szczegolnie tak dlugich jak 50ms. Popraw to i zobacz jakie da to efekty. A tak apropo - włączasz przerwanie od TXC z UARTu, ale nigdzie nie masz jego obsługi - jeśli przerwanie wystąpi, to procek się resetuje (czyli dioda gaśnie). 4\/3!!
Do odczytu stanu portu służy rejestr PIN. Czyli masz źle zrealizowane warunki w funkcji przerwania.
Witam. Dla wejść INT0 i INT1 możesz skonfigurować przerwanie dla zbocza narastającego, opadającego, zmiany stanu lub stanu niskiego. Przerwanie PCINT jest wywoływane przez zmianę stanu na wejściach PCINT0 - PCINT7. Dodatkowo można określić które z wejść PCINT ma wywołać przerwanie za pomocą rejestru PCMSK. Pozdrawiam - Daniel
Witam, Kilka uwag: 1. nie skonfigurowałeś trybu pracy timerów (rejestry TCCRxA, TCCRxB) Po resecie timery pracują w trybie "Normal", natomiast w twoim przypadku znacznie lepszy byłby tryb "CTC" 2. ustawiłeś prescaler a 1 a nie na 1024 3. brak zachowania stanu PSW i rejestrów w przerwaniach. W twoim konkretnym przykładzie nie spowoduje to błędu ale już...
Przerwania typu PCINT działają podczas zmiany stanu pinu, obojętnie czy to jest zbocze narastające czy opadające. Poprostu ma być to zmiana stanu, tak więc jeśli naciśniesz przycisk to przerwanie bedzie generowane dwa razy (w momencie naciśniećia i puszczenia). Natomiast inaczej jest w przypadku przerwań INT0 i INT1 gdzie możesz sobie wybrać kiedy ma...
Nie jestem pewien, ale wybudzanie da się chyba tylko stanem nie zboczem... doczytaj w dokumetacji:> Przed uśpieniem(procek wykonuje kod) , INT0 może być ustawione na falling , ale przed wykonaniem instrukcji SLEEP , należy zmienić sposób wyzwalania na LOW LEVEL i ... włączyć przerwania , jeśli usypiamy proca w przerwaniu. Poza tym , bit ISC01 może...
1. Rozwiązanie z przerwaniem od stanu niskiego akurat tutaj pasuje, ale gdyby np. w pętli głównej miała migać inna dioda to już to nie przejdzie. Wtedy można najpierw skonfigurować wyzwalanie zboczem opadającym (wciśniecie) i narastającym (puszczenie). 2. Dla AT90S2313 rejestr pinx jest tylko do odczytu, a dla Attiny2313 do odczytu i zapisu. Dodane...
Nie wiem czy to może coś mieć do rzeczy ale konfigurujesz przerwanie na porcie Int0 na falling a potem obsługujesz przerwanie od Int1. Przy resecie jak nic nie ustawiasz to przerwania zewnętrzne są aktywne stanem niskim. Jak nie ustawiasz Int1 na falling a potem pozwalasz na przyjmowanie przerwania z Int1 to możliwe, że wciśnięcie guzika powoduje kilkakrotne...
[syntax=c]ISR(TIMER0_COMPA_vect){}[/synt...
Musisz zaznaczyć cały tekst który chcesz pokazać jako kod, a następnie zaznaczyć napis Code $regfile = "attiny2313.dat" $crystal = 8000000 'kwarc 1MHz $prog &HFC , &HE4 , &H9F , &H00 ' generated. Take care that the chip supports all fuse bytes. Config Timer1 = Timer , Prescale = 64 'timer1 jako licznik 15536 Config Int0 = Rising 'detetor zera...
if((PIND & _BV(PD2)) PORTB |= _BV(PB2); else PORTB &=~_BV(PB2); Jak to ewentualnie zapisać w jednej linii to już sam pomyśl.
Tak obliczenia są w porządku. Wartość do TIMSKu możesz wgrać taki sposób jak napisałeś ale ładniej jest: ldi r16, (1<<TOIE1) out TIMSK, r16 Pamietaj że po wywowałniu procedury obsługi przerwania musisz odłożyć na stos wskażnik Z. W przerwaniu musisz załadować od nowa TCNT1. Procedure przerwania zawsze koczymy instrukcją reti. A co do wartości...
Na pewno musisz przy każdym ejściu do procedury obsługi przerwania wyjąć znak z udr, czyli in acc,udr ponieważ inaczej to przerwanie bedzie wywolywane caly czas, od momentu kiedy przyjdzie pierwszy znak. Nastepna rzecz, którą bym zmienił to użycie sei i cli. Przerwania włączaj dopiero po całkowicie zakończonej inicjalizacji. cli daj na samym początku...
Nie neguję rozwiązania przerwanie-w-przerwaniu, w niektórych sytuacjach jest to rozwiązanie bardzo eleganckie i efektywne, tylko należy pamiętać aby dobrze wyłączać przerwania. Nie popieram natomiast pętli oczekującej w przerwaniu, kod warto przeprojektować względem tych pętli pozbywając się ich - czy to przez automat skończony zmieniając INT1 na przerwanie...
..Wydaje się, że wszystk0o jest dobrze Po co włączasz przerwania :?:
Napisz tak: Dim Zmienna As Byte Zmienna = 0 Config Intx = Low Level | Rising | Falling [ | Change ] 'Konfiguracja reakcji na sygnał przerwania 'za x podstaw nr przerwania wybierz jeden ze sposobów pobudzenia kocówki uC Enable Interrupts 'Uruchomienie przerwań globalnych Enable Intx 'Uruchomienie przerwania INTx On Intx Obsluga_przerwania 'wskazanie...
Witam, gdy obsługujesz przerwanie wartość ICR jest już ustalona, na potrzeby programu możesz założyć, że zdarzenia te następują jednocześnie. Możesz także wyzerować spokojnie TCCR, wartość w ICR nie zostanie zmieniona aż do następnego przerwania. Pozdrawiam, GSM
Brutus_gsm : Radził bym Ci przeprojektować trochę ten kod: ustawianie flagi I (sei()) w przerwaniu jest największym błędem (chyba, że wiesz co robisz oraz to kontrolujesz). Przed wyjściem z funkcji przerwania ustawiasz flagę I (jeśli przyjdą kolejne przerwania, pojawią się kolejne wywołania i przepełni się stos - błąd), po czym usypiasz procesor (zakładając...
Czy przerwania są kolejkowane i po obsłużeniu komunikacji wykona kod przypisany do drugiego przerwania, czy informacja zostanie utracona? Może się tak zdarzyć, jeśli obsługa jednego przerwania będzie na tyle długa, że w czasie jej trwania jakieś przerwanie zostanie wywołane dwa razy (lub więcej). Czy komunikacja USB będzie działać stabilnie gdy podłączę...
A więc tak : - na przyszłość podawaj pełne nazwy, łatwiej bedziesz rozumiany. ;) - zajrzałem do pdf-ów od AT90S2313 i ATtiny2313 (trudno zgadnać którego miałeś na myśli) i tak - AT90S2313 (s.18 DOC0839.pdf) ma 11 wektorów przerwania wliczając RESET, a ATtiny2313 ma ich 19 (s.43 - doc2543.pdf). Wyciągając moją słabo działającą szklaną kulę jestem w stanie...
Ten kod u mnie działa w pełni prawidłowo. [syntax=c]MCUCR &= ~(1<<ISC01 | 1<<ISC00); // INT0 low level GIMSK |= 1<<INT0; // INT0 enable [/syntax] Wywal tę diodę, bo ona nie jest do niczego potrzebna, a może to nawet ona jest źródłem problemów. Widzę, że jest zewnętrzny rezystor pull up, więc nie trzeba go w programie ustawiać....
Witam Przez mój super programator STK200 na pająku, w czasie programowania znikło zasilanie i myślę od tego już zepsułem 2 procki: Atmega8, oraz Attiny2313. Nie wiem czy dało by się je jakoś naprawić może JTAG'em??, teraz gdy go chcę programować wyskakuje że nie wykryło sprzętu (ponyprog błąd 24) Wiem że te procki są bardzo tanie ale jednak jakiś sentyment...
To dobrze że da się te dwa układy niezależnie odpalić, tak mi się wydawało ale nie byłem pewien. Jeśli chodzi o zastosowanie to ma to odczytywać dane (w sumie 16bitów) z przetwornika ADC i wysyłać max 10x na sekundą dalej po rs485. To można napisać nawet bez użycia przerwań.
Napisałem podobny programik na ATtiny2313 w zeszłym roku. Użyłem komparatora bo szkoda mi było przerwań. Można go przerobić na ATmega8 Jest na elektrodzie-attiny2313 bascom pwm działa.
Witam , mam kawalek kodu i zauwazylem , ze w symulatorze programu nie wykonuje mi przerwania na timer1 , timer0 dziala bardzo dobrze i symulator go symuluje . Oto programik $regfile = "attiny2313.dat" $crystal = 8000000 Config Portb = Output Config Portd = &B1111000 Dim Adres As Word , Adh As Byte , Adl As Byte , T1pom As Byte Dim I As Byte , T As Byte...
...zamiast 14700us PB2 włącza się 1,7ms po PB3... Nie wiem, z jaką dokładnością mierzysz te 1,7ms, ale jako że 14,7ms/ 8 =1,8375ms (czyli może być w granicach błędu pomiaru) sugerowałbym sprawdzenie, czy fuse bit CKDIV8 jest prawidłowo ustawiony. Po prostu wygląda na to, że masz 8MHz zamiast 1MHz. TCCR1B = 0x04; //preskaler dla TC1 0x01 - CLK, 0x02...
WinAVR 20090313, widocznie starszej wersji co innego doskwiera:) Proponuje uaktualnić WinAVR [url=http://sourceforge.net/projects/win... Widzę, że jest już nowa wersja z 2010, może tam to będzie działać jak należy, a jeśli nie to tak jak pisałem wyżej pewnie zamiana INT0 na INT1 pomoże.
Witam, wiem że powinienem dostać łopatę za wykopalisko sprzed kilku lat, ale jak wpisuje w google attiny2313 przerwania to wyskakuje jako pierwsze, znalazłem stronkę która może się przydać wielu innym osobom, a są tam opisane problemy dotyczące nazw przerwań praktycznie dla każdego AVR'a. W tym wątku był problem związany z nazewnictwem dlatego wklejam...
Wskazówka: Pomyśl jakie są konsekwencje tej linii: [syntax=c]TIMSK=0b10000000; //odblokowanie TC1[/syntax]
Odepnij kwarca i zobacz czy dalej działa jeśli tak procesor dziala na wewnętrznym oscylatorze rc , jeśli nie to ustaw pułapki w symulatorze i sprawdz czy przerwania występują dokładnie co określiny czas .
ja zdaje się ze tak ale na innym procku. Jak mówiłem ci o ile robisz to jak należy czyli nie włączysz pinów PCINT na których jest AC, który wykorzystujesz to wszystko jest w porządku. i to nie tylko może ale i musi działać.
boohoo -> przecież jeśli masz AVR-GCC to masz taki folder: \WinAVR-20080610\avr\include\avr zajrzyj tam sobie, masz tam definicje wszystkiego czego chcesz i do każdego procka w tym twojego iotn2313.h poza tym ten twój kod ładnie się kompiluje i bez żadnych ostrzeżeń jeśli zrobisz tak: #include <avr\io.h> #include <util\delay.h> //#include...
A globalną flagę przerwań odblokowałeś?
Rodzaj przycisku jest bez wiekszego znaczenia . Algorytm : -jesli sygnal "0" nastapi przerwanie-skok do obslugi przerwania -czekaj w procedurze przerwania np. 100 mS -jesli po tym czasie sygnal jest dalej "0" to byl nacisniety przycisk -jesli "1" to byl to sygnal falszywy - zaklocenie -powrot z obslugi przerwania
Witam, Mam problem z uruchomieniem dwóch timerów. Timer0 ma obsługiwać przerwanie pochodzące z INT1 (Signal1), natomiast Timer1 (Signal0) z INT0 (ale może być odwrotnie). Każdy z timerów ma wykryć impuls PWM większy od 1,5ms i zapalić lub zgasić diodę / diody. Po wgraniu poniższego kodu, diodki migają chaotycznie, nie ma żadnej reakcji na zmianę szerokości...
Jeśli przerwanie działało by poprawnie to by non stop się te liczby nie wysyłały bo nie ma stanu niskiego na INT1. OK, wybacz, że będę pytał dalej: - jesteś pewien, że nie ma jakiegoś impulsu zera na INT1? - masz jakiś schemat swojego układu?
maximus - cls nie ma tu NIC do rzeczy bo nawet LCD nie używasz. Podejrzewam że program wywala ci się na deklaracji SUB, tym bardziej że używasz debounce jako GOTO a nie GOSUB, i potem próbujesz wracać returnem. No i SUB, a GOSUB to nie to samo :-) Zrób test - program powinien ci się wywalić gdy wciśniesz któryś z 2 przycisków, natomiast RC5 powinno...
W tym ATtiny nie ma pinu PD6, którego sprawdzasz: [syntax=C]if (!(PIND & 0b01000000))//sprawdzenie wyzwalania zewnetrznego[/syntax] Pewnie chodziło Ci o pin PD3 (ten od INT1)? EDIT: Ups, błąd, jest PD6 :) Mógłbyś dodać jakiś schemat albo opisać jak to ma w zamierzeniu działać? W jakim celu blokujesz przerwania?
Ale w przerwaniu Autor odblokowuje inne przerwania...
nic to nie dało, jakieś inne sugestie ? Jak skonfigurowałem te porty jako zwykłe wejścia to działało, ale to musi być na przerwaniu.
Zobacz co się dzieje: TCNT1 ma wartość 65535 i za chwilę nastąpi przerwanie, wykonywana jest instrukcja timer1_=TCNT1 i w tym momencie następuje przerwanie. TCNT1 po powrocie ma mniejszą wartość ale jest już po herbacie - licznik==1 warunek po if jest spełniony PORTB=0 i czekamy na następne przerwanie. Dlaczego 20 cykli jest dobrze? Bo przerwanie musi...
Witaj. Przyglądnij się przykładowi na ATmega: http://mikrokontrolery.blogspot.com/2011... Na podstawie przykładu opracuj swoją wersję na ATtiny. Funkcja USART_ReceiveByte() do przerwań Ci się nie przyda.
Panowie umiem w miarę C++ i przecież musi być miejsce wywołania funkcji a ja tego nie widzę. Pozdrawiam Wiesz co to są wektory przerwania, ATtiny2313 ma ich razem z resetem 19. Jeśli jakieś moduł np Timer, UART itp. zgłosi potrzebę obsługi, CPU przerywa wykonywanie programu, zapisuje swój stan na stosie i zaczyna wykonywać program od innego miejsca....
A dochodzi do obsługi tego przerwania ?
Chyba raczej ldi r16,2 out MCUCR,r16
i błagam tylko nie _delay_ms(); w przerwaniu!!
bo tak dzialaja przerwania? zmienna c jest sprawdzana w okreslonym miejscu w okreslonym czasie - jesli warunek byl kiedys tam spelniony i kod wszedl do jakiejs petli, to mozesz sobie z ta zmienna robic co chcesz - petla sie wykona tak czy siak - do kolejnego sprawdzenia warunku. 4\/3!!
Mam problem dotyczący ATTiny2313 jeżeli napisze program obsługujący przerwania i określe czas po jakim przychodzą przerwania od timera to przerwania przychodza po znacznie dłuższym czasie miż się spodziewano z obliczeń. Jestem początkujacym a więc proszę o pomoc. wcześniej ćwiczenia wykonywałem na AT90S2313 i nie było problemów. Cwiczenia wykonuje z...
A ile powinno być wolnej pamięci RAM? Obsługuję 2 przerwania, timer i uarta.
90S2313 - nie ma takiego - jest AT90S2313 Jak zabawa to zabawa .... Zapomnieliście o AT90LS2313 :P . A poza tym teraz jest już zastąpiony przez ATtiny2313.
Witam serdecznie. Mam do pinów PB[7...5] oraz pinów PA[2...1] podpięte przyciski. Piny te oczywiście konfiguruję jako wejścia z wewnętrznym podciąganiem i chciałbym zrealizować na tym sprzęcie klawiaturę obsługiwaną w przerwaniach. Ale nie chciałbym przy realizacji tego zadania wykorzystywać przerwań INT[0...1] tylko przerwania PCINT występujące na...
już pisałem co zrobić ale tym razem ty nie doczytałeś chyba, więc: po pierwsze - ustaw wyzwalanie przerwania INT0 zboczem opadającym (falling) po drugie - tuż po wejściu w przerwanie wyłącz je disable INT0 ale zaraz po tym daj Enable Interrupts, żeby mógł działać Timer potem odbierz kod RC5 ustaw swój znacznik Odebrano a resztę przetwarzaj w programie...
Nigdy nie był mi potrzebny USART a tu wyszło że potrzebny i to jeszcze w przerwaniu. Siedzę już kawałek czasu nad tymi wypocinami i nic mi do głowy nie przychodzi. Proszę o pomoc - co jest nie tak. #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> void Led_RED(unsigned char value) { if (value)...
Witam. Jestem początkujący w programowaniu więc proszę o wyrozumiałość. Potrzebuje program sterowania klapą (otwieranie i zamykanie dwie krańcówki góra dół i silnik lewo prawo). Chce aby jazda w gore lub w dol odbywała się w momencie zmiany stanu pewnej zmiennej zewnętrznej konkretnie zboczem rosnącym. Wyczytałem, że w Bascomie można zrealizować t przerwaniem...
Sprawdzałem z funkcja getrc5 w przerwaniu (przykład z książki Marcina Wiązani) i też nie działa. Coś skutecznie blokuje przerwania
Dlatego właśnie napisałem, że w swoim programie używasz niewłaściwego przerwania. Znajdź odpowiednik tego które podałeś wyżej, ale dla ATtiny2313: http://www.nongnu.org/avr-libc/user-manu... Do tego właściwą flagę w rejestrze TIMSK. I pokaż cały program po tych modyfikacjach. Teraz będziesz już na właściwej drodze do sukcesu...
Po pierwsze błąd jest w tytule wątku! Po drugie, jeśli ty pisałeś ten kod a nie jest to jakieś zadanie szkolne to pomyśl trochę nad tym: CPSE R18,R17 LDI R17,0B11111111 LDI R17,0B11111110 Całą tą procedurę przerwania można zrobić prościej.
Wykorzystujesz przerwanie zewnętrzne od Int0? W takim wypadku odczyt adresu i komendy wykonaj w podprogramie obsługi tego przerwania.
Jak ma ci wchodzić do przerwania jak cli (); wyłączyłeś przerwania.
Najbardziej wątpliwe w pracy tego timera jest przeładowywanie wartości w kodzie programu. Licznik w 4ms zwieksza swoją wartość o 250, więc przypisanie wartości "6" jest sensowne, ale jeśli to przypisanie nastąpi później niż po 64 cyklach od wystąpienia przepełnienia, to przerwania będą wywoływane rzadziej.. Polecał bym tryb pracy CTC. ps. zaczynanie...
Witam Od dwóch dni borykam się z pewnym problemem. Mam 2 mikrokontrolery: ATTiny2313 i AT90S2313. W tematach na elektrodzie znalazłem taki oto banalny program, odbierający znaki przez RS232 na przerwaniach, napisany dla AT90S2313: #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <stdlib.h> #define...
Ouuu :D faktycznie, ale program działa załadowało do attiny2313 i lampka zmienia kolory :)
Witam Niedawno zaczałem zabawe z uC i programowanie i docelowo, a może i nie ;) chciałbym zbudowac wydaje mi się prosty układ do regulacji opadania i podnoszenia ramienia. Mam dwa przyciski góra, dół. jeden potencjometr na ramieniu drugi do ustawiania zadanej wysokości na jaką ramie się ma opuścić. Tu sprawa jest prosta, ale chciałbym aby po ustawieniu...
Witam, widzę ze shg ładnie i poprawnie odrobił zadanie domowe, brawo ten gość, wygrał tę rundę. Chciałbym tylko dodać że skok z programu do adresu $0 nie zawsze oznacza wejście w podprogram RESET: bo może tam być inna procedura. Oprócz programowego istnieje jeszcze reset sprzętowy, np. przez podłączony przez ograniczający prąd rozładowania kondensatora...
Zamień linię: On Compare1 Przerwanie na: On Compare1a Przerwanie
1. Ustawienie dzielnika częstotliwości (prescallera) włącza licznik. 2. Po wystąpieniu przepełnienia licznik automatycznie liczy od zera. 3. Tak, przerwania są globalnie wyłączane na czas obsługi któregoś z nich.
Chyba jednak zdecyduję się skorzystać z Attiny2313 z przerwaniem i częstotliwością taktowania 32kHz. Wprawdzie prąd podany przez producenta został zmierzony przy napięciu 1,8V a w moim zastosowaniu attiny będzie działał przy napięciu około 3,3V ale prąd nadal powinien się utrzymywać na bardzo niskim poziomie.
Hmm... Pytasz o tytułową ATtiny2313, czy ATtiny13 ? Ogólnie najpierw ustawiasz WGM na CTC, preskaler, TCCR0A a potem przerwanie OCIE0A. Przecież pisałem, że w CTC Compare-B nie ma znaczenia...
Można wywołać przerwanie TIMERA, w trybie PWM, w momencie przeładowania licznika, a więc gdy licznik przekroczy ustawioną dla danej rozdzielczości wartość maksymalną. Musisz tylko włączyć przerwania dla danego Timera. Oczywiście częstotliwość wywoływania tego przerwania jest ściśle powiązana z ustawieniami PWM (jest równa częstotliwości działania PWM)....
Jakiś pomysł? Włącz przerwania (sei) :)
Przepraszam was wszystkich za to gnebienie, ale okazalo sie ze ATtiny2313 ma problemy z przerwaniami ogolnie. Ustawilem sobie parametry w ATmega8515 i zaczelo smigac od samego poczatku... dzieki wszystkim i pozdrawiam!
Uważnie przeczytaj: http://mikrokontrolery.blogspot.com/2011... trzy z tych błędów popełniasz (konkretnie numery 1-3) i w dodatku nie włączasz przerwań: sei()
Chcę zrobić prosty obrotomierz na attiny2313 (częstotliwościomierz), ale jak do tej pory każdy kod, który napisałem kończył się albo niedokładnym zliczaniem 1 sekundy, albo nie wiadomo skąd pojawiały się jakieś wartości w timerach i wynik był conajmniej dziwny. Kwarc mam 10MHz (akurat taki mam na płytce testowej), µP to attiny2313. Wykorzystywałem...
Podejrzewam, że te Waitms w obsłudze przycisków blokują wyświetlanie. Spróbuj je do testu usunąć. Oczywiście przyciski nie będą wtedy działać poprawnie, ale sprawdzisz wyświetlanie. Obsługa wyświetlania powinna być przeniesiona do obsługi przerwania, ale to już większa przeróbka programu. To przygasanie tak bardzo przeszkadza?
Problem tkwił w tej linijce TIMSK =(1<<TOIE1)|(0<<OCIE1A)|(0&l... |(0<<ICIE1)|(0<<OCIE0B)| (1<<TOIE0)|(0<<OCIE0A) ; Nie wiem dlaczego nie dziala, ale jak chce uruchmic samo przerwanie od timera 1 to taki zapis działa -> TIMSK =(1<<TOIE1); Po prostu czary :-)
Bez zmian, nic się nie pokazuje.
Błąd jest taki, że funkcje obsługi przerwań umieściłeś w funkcji głównej main. Najpierw musisz zakończyć main, a dopiera pod spodem, na samym końcu (poza funkcją main) piszesz obsługę przerwań, bez średników. Mam takie pytanie: w jakim celu chcesz mieć reset? przecież jeśli program będzie się wykonywał w koło to chyba będzie dobrze, właśnie o to chodzi....
Zrób porządek ze stosem, ustaw TCCR0B o którym zapomniałeś w kodzie (CS01), pamiętaj o pętli na końcu kodu. Poza tym kodu nie umieszcza się w obszarze wektorów przerwań.
Witam! Mam dość nietypowy problem z AVR-kami. Ostatnio używałem Timera na ATTiny2313. Ustawiłem preskaler /256, kwarc 8MHz, timer 16bit w trybie porównania i przerwanie. Wartość do porównania była ustawiona na ok. 31250. Ostatecznie powinienem otrzymać przerwanie z częstotliwością ok. 1Hz. To zwiększało licznik i on był wyświetlany. I tu pojawił się...
Bascomowe RC5 to syf. 1) dopisz na początku SET PORTD.3 dla pewności 2) gdy wchodzisz w przerwanie to bascomowe RC5 nie złapie ci pierwszej ramki, dopiero drugą. Spróbuj po wejściu w przerwanie dodać WAITMS 10 3) poszukaj tu na forum mojego poradnika "odbiór RC5 bez komendy GETRC5" i wklej do siebie.
Można je alternatywnie używać jako dodatowe wyprowadzenia I/O - PA0, PA1. W wersji Tiny2313A jedno z nich może pełnić dodatkowo funkcję wejścia przerwania zewnętrznego.
Wlasnie to mialem okazje przetestowac. Z tego Co piszesz to znaczy ze niema obslugi przerwania. Sprawdz nazwe wektora, bo jak jest inna niz w bibliotece to jest to pomijane i nie generuje przerwania. Kompilator GCC tego nie sprawdza a nazwy tych przerwan sa rozne dla roznych typow prockow.
A jak w Helpie opisano włączanie transmisji ? Mam wrażenie(być może mylne, bo nie wnikam w arkana tej pułapki ze złymi nawykami programistycznymi), że pomieszała ci się sprzętowa obsługa i programowa, w tym połowiczne włączenie przerwań.
Witam ,napisałem program który ma odmierzyć czas lotu helikoptera (do wyczerpania bateryjki) ,niestety po 2 tygodniach utknąłem na czymś takim: $regfile = "attiny2313.dat" 'wybór procesora attiny2313 $crystal = 8000000 Config Pinb.0 = Output 'dioda sygnalizująca odmierzenie czasu Config Pinb.1 = Output 'buzzer mający piknąć 3 razy po odmierzeniu...
Masz preskaler ustawiony na aż 256 więc przeładowywanie Timera nie powinno powodować błędów. A wyliczyłeś dobrze. A masz rezonator kwarcowy 8MHz? Zapis do EEPROMu jest sprzętowy więc nic mu nie będzie przeszkadzało. Zliczanie do 2500 też nie jest specjalnie trudne. A zawsze możesz też użyć dwa przerwania. Jedno co 400us do multipleksowania a drugie...
Myślę, że zdążysz. Wystarczy że wszystkie 4 piny podłączysz pod jeden port. Np. PORTB : PB0, PB1, PB2, PB3. Wtedy wystarczy że w przerwaniu odczytasz tylko stan całego portu B (PINB), zaś w programie głównym zbadasz który z wentylatorów wygenerował przerwanie.
Jak skomunikować dwa mikrokontrolery np: ATtiny2313 przez szynę I2C? Dokładnie chodzi o to aby odbierający po zgloszeniu przerwania odebrał pakiet danych z pierwszego. Najlepiej w Bascomie. Docelowo uklad ma byc taki aby nadawał jeden procesor do wybranego jednego z kilk (kilkunastu) odbierających.
Zawsze pamiętaj taki schemat, odblokowanie przerwania, określenie akcji przy przerwaniu, odblokowanie globalnego systemu przerwań
Konfigurujesz WD na 256 i startujesz. Teraz jeśli chcesz by WD wybudził procesor, ale go nie zresetował to MUSISZ włączyć przerwanie od WD. W obsłudze przerwania nie musisz nic robić. Procek wroci w miejsce gdzie użyłeś SLEEP. Teraz jeśli możesz przez tę sekundę kiedy pracuje resetować WD co 200ms to nic nie trzeba robić, ale jesli coś tam dłuzej trwa...
Jak wyrzucisz z przerwania obsługę przycisków- to będzie krótkie. Jak masz przerwanie co 10ms to daj flaga++ kasowanie w głównej pętli co 3-4 przerwania- 30-40ms. w linkach -nie pamiętam. Ale niektórzy zamiast napisać "wykorzystując przerwanie" piszą "w przerwaniu" Ja napisałem tak: "Wystarczy w przerwaniu ustawiać jeszcze jakąś flagę. Potem w głównej...
Może pokaż na początek jak jest zrobione zasilane awaryjne. Aby korzystać z przetrwania musisz: - odblokować przerwanie INT0 w rejestrze GIMSK (ustawienie bitu INT0 w stan 0) - skonfigurować kiedy ma być zgłaszane INT0 , bity konfiguracyjne ISC00,ISC01 w rejestrze MCUCR - zainicjować vektor przerwania od INT0 (jeżeli nie robi tego kompilator) - odblokować...
Weź sobie załaduj do jakiegoś podprogramu fragment w którym sprawdzane są przyciski, jednocześnie w tym podprogramie odliczaj opóźnienie. (np zrób pętle która będzie miała waitms 1 - ilość wykonań pętli ilość opóźnienia ale równocześnie sprawdzany port przycisku) Zamiast rozkaz waitms wywołuj ten podprogram. To tak najprościej i bez przerwań.
Nie bawiłem się ATtiny2313, ale jeśli ma PWM to da się zrobić jakieś odtwarzanie dźwięku z próbek. Robiłem takie coś na ATmega128. Puszczasz generator PWM na najwyższej częstotliwości i jakiś timer do generowania przerwania okresowo. Timer determinuje częstotliwość prókowania. Podczas każdego przerwania timera wpisujesz nową próbkę do rejestru generatora...
Bo obsługa przerwania też zajmuje trochę czasu- ileś taktów zegara. Bascom jest "bezpieczny" dla użytkownika i odkłada na stos wszystko- a nie tylko to co potrzebne. A potem zdejmuje ze stosu. Ale za to działa wolno. Spróbuj : on timer0 etykieta przerwania nosave. Ale to będzie szybsze i mniej bezpieczne. Albo ASM.
Włączyłeś przerwanie zgłaszane po opróżnieniu rejestru UDR, a nie masz nigdzie procedury jego obsługi. Musisz ją zdefiniować dyrektywą .org adres aby została umieszczona pod odpowiednim adresem w pamięci, który przypisany jest do wektora tego przerwania. Jeśli przerwań nie obsługujesz nie ustawiaj bitu UDRIE. Chodzi o to, że po przepisaniu danej z UDR...
Nie znam za bardzo C, ale sprawdź, czy ustawiłeś rodzaj przerwania int wg. tej tabelki: ISC11 ISC10 Description 0 0 The low level of INT1 generates an interrupt request. 0 1 Any logical change on INT1 generates an interrupt request. 1 0 The falling edge of INT1 generates an interrupt request. 1 1 The rising edge of INT1 generates an interrupt request.
Usuń <br/> z końca linka, bo przez to link nie działa. Pytanie, czy te wolne piny zostawiłeś w powietrzu. Bo one generują przerwanie, więc jeśli "dyndają", to w kółko wystawiany może być stan wysoki, który powinien po tych 304us zejść na niski, ale może nie zdążyć przez kolejne przerwania generowane przez "dyndadła". Wyobraź sobie, że to wykonuje...
np. Nie da się. TImer0 może zliczać tylko z pinu PD4. I to z PinD.4 a nie PortD.4 ;) Można i z PinD.0, ale nawet przerwania żadnego do tego nie ma więc trzeba by programowo. A nawet jak przerwanie by było (mowa o przerwaniach INTx) to Timer tego nie zliczy. Trzeba by programowo zwiększać zawartość licznika Timera0, ale po cholerę. Jeżeli to ma być...
Dawno Bascoma nie używałem ale to będzie coś takiego: On int0 czas 'przerwanie zewnetrze (wejście impulsów) do czestotliwosc=1/czas 'obliczenie czestotliwosci z czasu pomiedzy impulasmi loop czas: stop timer0 'zatrzymaj timer czas=timer0 'odczyt z timera timer0=0 'wyzerowanie timera start timer0 'ponowne uruchomienie timera return Oczywiście...
Muszę zbudować urządzenie stosując dwa ATtiny2313 (zbyt częste przerwania, na jednym nie działa..) i tu miałbym pytanie: czy wystarczy dla nich jeden kwarc? Czy muszą być dwa? Jeśli będą na jednej płytce, czy wystarczy jedna para kondensatorów 10u i 100n do zasilania, czy trzeba dwie (układ zasilany z USB)..? Czy może nie potrzeba ich, czy może inne...
przerwania attiny2313 renesas przerwania flagi przerwania
livebox router bezprzewodowo programy symbian wymiana ogniw bateria laptop
schemat elektryki skutera schemat elektryki skutera
Jak przywrócić kursor w przeglądarce - porady Podłączenie taksometru w Ford Galaxy MK2