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...
Do odczytu stanu portu służy rejestr PIN. Czyli masz źle zrealizowane warunki w funkcji przerwania.
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...
..Wydaje się, że wszystk0o jest dobrze Po co włączasz przerwania :?:
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ę...
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...
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ń.
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ż...
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!!
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...
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...
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...
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
if((PIND & _BV(PD2)) PORTB |= _BV(PB2); else PORTB &=~_BV(PB2); Jak to ewentualnie zapisać w jednej linii to już sam pomyśl.
[syntax=c]ISR(TIMER0_COMPA_vect){}[/synt...
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...
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...
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....
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 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...
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...
Ale w przerwaniu Autor odblokowuje inne przerwania...
Wywal return 0 z przerwania.
A dochodzi do obsługi tego przerwania ?
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ć....
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...
i błagam tylko nie _delay_ms(); w przerwaniu!!
Dokładnie takie samo ostrzeżenie dostawałem od kompilatora w momencie gdy popełniłem "literówkę" w nazwie przerwania.
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?
Sprawdzałem z funkcja getrc5 w przerwaniu (przykład z książki Marcina Wiązani) i też nie działa. Coś skutecznie blokuje przerwania
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.
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.
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)...
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 .
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
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ń.
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?
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ń.
Koledzy, nie wiem jak to jest w Attiny, ale spotkałem się z dwiema rzeczami w innych uC: 1. Timery mają własne przerwania, czyli nie musisz zajmować żadnego innego przerwania, które może Ci się przydać do czegoś innego. 2. Jest coś takiego jak priorytet przerwań, zatem jeden z timerów będzie ważniejszy, jeśli obydwa naraz wygenerują przerwanie.
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.
Hmmm... zezwalam na wywołanie przerwania przy przepełnieniu Timer1. A obsługi przerwania nie ma. (Co się wtedy stanie?)... Procesor pójdzie dalej i trafi na wywołanie kolejnego w liście przerwania i je wykona albo jeśli nie masz innych przerwań to będzie lecieć dalej aż trafi na jakiś kod. ...Tylko, czy w przypadku NIEustawienia TIMSK TC1 będzie zliczał...
Chyba raczej ldi r16,2 out MCUCR,r16
Jakiś pomysł? Włącz przerwania (sei) :)
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...
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()
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.
Od początku: W pierwszym programiku zauważyłem że włączasz przerwania od odbiornika ale nie masz napisanej obsługi tego przerwania. Czy mam rację ?
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.
Musisz w przerwaniu ponownie załączyć system przerwań komendą enable interrupts
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...
A ile powinno być wolnej pamięci RAM? Obsługuję 2 przerwania, timer i uarta.
Myślę, że to nie przepełnienie- ladnie patrzyłem, czy wynik do OCE0A jest ok, i jest ;P Bo czy dam do freq= 30, czy 10 nie wykonuje zmiany wartości przez przerwanie.. ;/ Dodano po 3 Z braku leku wstawiłem tam np "OCR0A=86" i działa jak marzenie.. ale mnie interesuje dlaczego 'freq' nie potrafi zmienić wartości w przerwaniu??
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ć.
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...
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.
...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...
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ć...
Zawsze pamiętaj taki schemat, odblokowanie przerwania, określenie akcji przy przerwaniu, odblokowanie globalnego systemu przerwań
Zamień linię: On Compare1 Przerwanie na: On Compare1a Przerwanie
Oba timery z kontrolerka, wykorzystuję w trybie PWM, co koliduje z wykorzystaniem ich do generacji przerwania dla klawiatury. Otóż niekoniecznie. Timer skonfigurowany do PWMa może także generować przerwanie od przepełnienia.
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...
Ouuu :D faktycznie, ale program działa załadowało do attiny2313 i lampka zmienia kolory :)
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.
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...
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....
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)....
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...
Owszem w konfiguracji Timera głupi błąd, ale ku mojemu zdziwieniu przerwanie działało. W liczeniu czasu chyba się koledze przecinek przestawił. Przerwanie w teorii kompilatora bascom trwa ok 0,16ms. W praktyce: po dodaniu w przerwaniu " toggle portb.0" częstotliwość generowanego przebiegu prostokątnego to 3,289kHz więc przerwanie wykonuje się z częstotliwością...
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?
W tym problem, że warunek może jest sprawdzany ale wykonanie przerwania zmienia zmienną c ale nie jest ona brana pod uwagę przy wykonywaniu pętli while. Sam program główny działa prawidłowo, przerwanie przerywa działanie programu głównego ale wykonanie programu przerwania nie wpływa na wyokonywania odpowiedniego fragmentu programu głównego. Chodzi mi...
Jest generowane co 1s bo tak ustawiłeś. Ustaw na co 400us i będzie ok. I od razu zliczanie czasu mógł byś umieścić w tym przerwaniu. Zmodyfikowane oczywiście.
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.
...Napisałem taki soft. Ale nie działa... A dlaczego robisz to programowo(przerwanie) :?: Jeśli musisz otrzymać ten przebieg na PINB.3, to wykorzystaj Timer1, a jeśli możesz użyć PINB.2 , to użyj Timer0. Wykorzystaj tryb CTC, to generowanie przebiegu 36kHz, nie zajmie procowi ani jednej instrukcji ;) ... PS Zapomniałeś o "prologu" i "epilogu", które...
Wyłącz przed wykonaniem skoku przerwania, inaczej w czasie inicjalizacji danych/przerwań (którą robisz na początku programu) mogłoby zostać wywołane jakieś przerwanie i namieszać
Witaj! Raczej najpierw musisz sie nauczyć C a później zabierać za przerwania. Taka moja rada bo raczej będzie Ci trudno. Nie za bardzo kumam co robi definicja procedury obsługi przerwania w pętli
1. Czemu praktycznie wszystkie zmienne są globalne? 2. Nie przeanalizowałem całości, ale wydaje się, że część zmiennych spokojnie może być jednobajtowa. 3. Większość osób zapomina o "volatile" Ty poszedłeś zdecydowanie w drugą stronę :) 4. Co to ma robić? [syntax=c]ws=ws; wd=wd; wj=wj;[/syntax] 5. Gdzieś w kodzie wypatrzyłem komentarz "//przekaźniki"...
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.
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 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...
Przy projektowaniu używam kalkulatora chociaż to akurat można policzyć na palcach. Jeśli dobrze pamietam to impuls powinien się zawierać między 1ms a 2ms a servo stoi na środku przy 1,5ms. Niemniej daje to 1ms którą chciałbś podzielić tak by móc sterować servem. Załóżmy że chcesz to podzielić tylko na 100 części. Jedna milisekunda ma 1000us Podzielona...
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ń.
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...
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...
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...
Na razie przestanę śledzić temat bo maili dużo :D Sprawa się rozjaśniła trochę. Compare pewnie używasz dlatego że chcesz mieć też sygnał przerwania i w nim ustawiasz jakieś flagi albo timery programowe. Spróbuj działać na zmiennej W w pętli głównej, a wartość przypisać w obsłudze przerwania.
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!
Zdaję sobie sprawę że program nie jest żadnym mistrzostwem świata (np. pierwsza cyfra zawsze mocniej świeci), ale program spełnia moje założenia. To zależy, jakie są Twoje założenia. Jeśli chciałeś osiągnąć to, żeby wykonać ten jeden konkretny projekt, bo był Ci potrzebny i na tym planujesz poprzestać, to może i bitwę wygrałeś, chociaż w niezbyt dobrym...
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.
Timer0 jest 8-mio bitowy a preskaler ustawiłeś na 1. Czyli 1Wire ma tylko 256 cykli. A potrzebuje kilkaset tysięcy żeby coś zdziałać z czujnikiem DS18B20. To ma działać w tle? Ładne mi tło: 1wreset 1wwrite &HCC 1wwrite &H44 Waitms 750 1wreset 1wwrite &HCC 1wwrite &HBE Ja bym preskaler ustawił na 1024 i kod napisał tak*: Dim Pobierz_temp_counter As Byte...
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 :-)
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...
Napisałem programik którego zadaniem ma być zliczanie impulsów, wydawało by się trywialne. gdy przeprowadzam symulacje działania programu wszystko dziala OK. Po podłączeniu wyświetlacza i klawisza juz nie jest tak różowo. wyświetlacz wyświetla zero i po wciśnięciu przycisku (zbocze opadające) wartość nie ulega zmianie(prawie ale o tym na końcu). co...
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...
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...
Po pierwsze musisz wyłączyć fusebit CKDIV8 dzielący sygnał zegarowy przez 8. Po drugie niepoprawnie podałeśfusebity cksel. 1 oznacza bit niezaprogramowany a 0 zaprogramowany. Pewnie używasz programatora który nie pokazuje 0 i 1 tylko "ptaszki" czy coś w tym stylu. Co do programu to polecam użyć tryb ctc i ustawić wyjście sygnału na pb2. Nie bedziesz...
Zapoznaj się obowiązkowo z konfiguracją timerów! Jeśli Ci potrzeba większych przedziałów niż pozwala na to standardowa konfiguracja timerów użyj dodatkowej zmiennej licznikowej w tym przerwaniu, która zwielokrotni wynik...
fakt przerwania od Timerów nie sa używane ale myśle że zliczanie odpowiedniego czasu lepiej zrobić w obsłudze przerwań niż w głównej pętli programu
attiny2313 przerwania renesas przerwania flagi przerwania
blaupunkt pobór prądu prędkość znamionowa płyta główna głośnik piszczy
Yamaha Majesty 125 1999 – układ i rozkład wskaźników, kontrolki, demontaż kokpitu Blokada korporacyjna MDM/UEM – Apple, Samsung, Windows – ograniczenia, usuwanie, bezpieczeństwo