Cześć Pobierz notę katalogową np. Attiny2313a i popatrz jak wygląda kod obsługi USART'a, bo masz błędy w kodzie. Nie chce mi się wierzyć, że nie da się osiągnąć tego czego oczekujesz na Attiny. W przerwaniach timer'a, czy to jednego czy drugiego, możesz manipulować rejestrami COM0Xn, przerwaniami TIMSK. Powinieneś osiągnąć możliwość włączania i wyłączania...
Możesz czytać timer w przerwaniu INT lub PCINT
Warunek w if nie będzie spełniony bo raczej te kilka instrukcji w przerwaniu nie bedzie się wykonywać 20ms. Czas wykonywania tego ISR nie ma nic wspólnego z wartością _debounce_timer w momencie porównania.
Przepisałem wedle swej wiedzy. Symulacja w AVR Studio 4 działa poprawnie, ale po zaprogramowaniu LED'y nie migają... Drogi kolego ucy74 , jeśli już coś robisz , to rób to dobrze , albo nie rób wogóle - nie mogłem się powstrzymać ;) Ustawiasz INT0 na wyzwalanie zboczem narastającym ,"usypiasz" proca snem głębokim (Power-down) i dziwisz się , że nie...
Ciekawe jest to widać w twoim profilu (Pomógł: 79927) :P ale do rzeczy. Według mnie coś takiego można zrealizować w następujący sposób: - konfigurujesz przerwanie zewnętrzne żeby było wyzwalane przerwanie zboczem opadającym, rosnącym etc. - w tym przerwaniu uruchamiasz timer który zlicza sobie impulsy - jeżeli zliczy określoną ilość impulsów to wykonujesz...
wystarczy tylko przerwaniem wyzwolić nasłuchiwanie na lini Masz na myśli żeby pin ATTiny od przerwania spiąć z wykorzystywanym pinem jako RX, i w ten sposób czkać na transmisje z SIM800L ?
$include (REG51.inc); dołączenie definicji rejestrów uK (kompilator RA-51 Raisonance) NAMEOBSLUGA_AT24C64 ;Poniżej definicje stałych użytych w programie FIXEDADDR EQU0A0H;stała częśc adresu pamięci 24C64 USRADDR EQU0;ustawiana przez użytkownika część adresu (wartości 0..7) MEMSIZE EQU2000H;liczba bajtów dla 24C64 PMEMSIZE EQU32;liczba bajtów na stronę...
A włączyłeś w Keilu wektory przerwań? "Cofigure Flash Tool" zakładka "C51". Zaznacz "Interrupt vectors at adres".
Witam Chciałem zrobić prosty sterownik światła na pilota. Poniższy kod nie daje się skompilować - czy są jakieś przeciwwskazania do pracy Attiny45 + RC5 ? [syntax=basic4gl] $regfile = "attiny45.dat" 'etykietka mikrokontrolera $crystal = 9600000 'standardowy zegar wewnetrzny $hwstack = 16 ' rozmiar stosu sprzętowego $swstack = 16 ' rozmiar stosu programowego...
Popatrz sobie w moje listingi... poprawiłem Ci to już wcześniej. Myślałem że zrobisz kopiuj wklej :D
Przerwania są wyłączone i trzeba zezwolić na konkretne przerwanie i w ogóle na jakiekolwiek 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
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.
Tak jeszcze analizowałem i przy teorii że obsługa przerwania czeka na zakończenie instrukcji to pasek byłby poprzesuwany losowo, w zależności od tego jak zbocze na INT0 "trafiło" w cykl i instrukcję. A tu mam cyklicznie powtarzająca sie piłę, 6 zębów na ekran. Dokładnie. Piła jest stacjonarna, czy "płynie"? Szczerze mówiać, nie wygląda mi to na zakłocenia...
pier - twój program działa bardzo dobrze, dokładnie tak jak go napisałeś. A że napisałeś go badziewnie to taki masz efekt. Błędy: 1) W przerwaniu INT0 wyskakujesz z niego GOTO do głównego programu, tak nie można. Wyjdź z przerwania komendą RETURN, ale na jego końcu a nie przez podmianę GOSUB. Powinno być: If Sw = 1 Then Powerdown i RETURN na koncu....
Tak, można zrobić tak, że B pierwsze co zrobi to odblokuje przerwania. Będzie to działać ok. O priorytetach na ATTiny zapomnij - nie ma ich.
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 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...
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
Po pierwsze...nie ma takiego przerwania PCINT w ATtiny. Konfigurujesz to w zupełnie inny sposób (BOTHEDGES). Po drugie z założenia nie patrzę na kody Arduino, gdyż nie jest to jakikolwiek rezerwuar jakichkolwiek rozwiązań. Z resztą nie w tym problem. Popełniam jakiś błąd programowy a nie koncepcyjny, gdyż zawsze działało to dobrze... R
Spacja w linii polecenia jest traktowana jako separator. Kompilator nie może znaleźć pliku o nazwie "with" - masz to jawnym tekstem. Nie używaj nazw plików ze spacjami.
Witam wszystkich, Tytułem wstępu: Jestem poczatkującym użytkownikiem Arduino (i dlatego piszę w dziale dla początkujących). Jednym z moich projektów jest sterowanie urządzeniem za pomocą enkodera. Problem wydaje się bardzo prosty - ale na Arduino. Z GitHub'a (https://github.com/brianlow/Rotary) ściągnąłem doskonałą bibliotekę do obsługi enkodera, która...
powrót do Attiny 13. Korzystam z przerwania od Timer0. Okres impulsów ok 27 us, pojedynczy impuls 1,2 us, funkcja micros wyłączona, w zasadzie wszystko pod kontrolą i realizuje się zgodnie z oczekiwaniem. Zamykam temat.
Czyżby ta etykieta jest wykonywania podczas przerwania?
Timer, który dodałeś generuje najwyraźniej przerwania które blokują przerwania z timera od odliczania czasu. Nie wiem czy sie da ustawić priorytety przerwań w ATtiny, ale jeśli sie da to daj temu o odliczania czasu wyższy priorytet żeby go ten drugi timer nie wykluczał czasem. Myśle że powinno pomóc. Powodzenia.
co do bascoma, to może kolega zumek tu zajrzy wtedy napewno coś poradzi ;) a jak nie to znajdź go i zapytaj na PW pozdr Bascom w tym przypadku nie ma nic do rzeczy , a przyczyna jest prozaiczna ;) Procek idzie spać w przerwaniu , a w takim przypadku WSZYSTKIE przerwania są wyłączone :D Już mi pora , przejść w STANDBY ;) Piotrek
Wygląda na to, że procedura obsługi przerwania TIMER0_COMPA_vect się nie wyrabia (ma do dyspozycji 80 taktów). Innymi słowy czas pomiędzy przerwaniami jest krótszy od czasu wykonania kodu procedury obsługi przerwania. Wpisanie na początku procedury instrukcji TCNT0=0; powoduje po prostu wydłużenie czasu zliczania timera 0 o czas trwania prologu procedury...
Witam. Robię projekt do sterowania fazowego i potrzebują układ do detekcji zera, a dokładniej kod. Układ składa się z transoptora z podwójną antyrównoległą diodą. Wiec program musi robić przerwanie kiedy stan na pinie przechodzi z niskiego na wysoki. (faza przechodzi przez zero, więc kolektor-emiter transoptora zamknięty, pin przez pullup do 5V) Więc...
A na jakim to jest procku? ATMEGA czy ATTINY? Dużo zależy od czystości sygnału i jego amplitudy. Zliczanie można zrealizować na przerwaniu INT0 ale wczśniej dobrze aby sygnał przepuścić przez komparator aby ukształtować ładny prostokąc, można też wykorzystać wbudowany w procek komparator analogowy.
A, że tak dopytam...... tatuś się ni w ząb na tym nie zna? a chce zamieniać scalaka? tzn jak? - sam będzie go programował ? jeśli tak to czym? - tzn czy ma kod źródłowy, który można przekompilować ? bo jeśli ma - to można sobie czasami jeszcze z tymi różnicami poradzić o ile są one istotne w kodzie właśnie. (bo tak jakoś od tyłka strony podchodzisz...
Napisałem tutaj bo dwa dni temu wyczytałem że niby attiny dwóch funkcji na raz nie wykona chyba że że się zrobi przerwanie w przerwaniu a to wyższa szkoła jazdy. No i mnie to przeraziło. Oczywiście sensu stricte dwóch rzeczy jednocześnie nie wykona. Ale biorąc pod uwagę, że chcesz migać LEDem w okresach rzędu sekund, a procesor wykonuje instrukcje...
I jeszcze przerwania...
Witam Piszę program pod sterownik na attiny2313. Na chwilę obecną jest obsługa wyświetlacza LED 3 cyfry multipleksowanego przerwaniami z timer0. Chciałem wprowadzić attiny w tryb power down. Jak doczytałem tryb powerdown powinien ustawić wszystkie porty w tryb wysokiej impedancji więc spodziewałem się, że gdy wejdzie w ten tryb to wyświetlacz zgaśnie....
Pytałeś o wybudzanie procesora, odpowiedz masz w linku dla przykładu klawiatury matrycowej. W ogóle lepiej zastosuj power-down A wybudzić możesz tylko stanem niskim przerwania int0. A jeśli chodzi o przerwania pin change warto zapoznać sie z rejestrami z tym związanymi a wszystko stanie się jasne. Chodzi o to ze przerwania zostaje wywołane, jeśli choć...
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.
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!!
if((PIND & _BV(PD2)) PORTB |= _BV(PB2); else PORTB &=~_BV(PB2); Jak to ewentualnie zapisać w jednej linii to już sam pomyśl.
No to od razu bez szczegółowego liczenia powinieneś zrobić tak: Tak naprawdę powinieneś wykorzystać Timer2 w trybie asynchronicznym z kwarc 32,768kHz na pinach TOSC1 i TOSC2, a mikrokontroler popędzać wewnętrznym 1MHz. Innymi słowy Twój mikrokontroler będzie prawie 100% czasu spał: - w czasie zamkniętych drzwi w trybie Power Down, - w czasie odliczania...
Do odczytu stanu portu służy rejestr PIN. Czyli masz źle zrealizowane warunki w funkcji przerwania.
Załączam 2 programy do obsługi RS-232 w Turbo Pascalu. Są to programy terminalowe, ale uproszczone w ten sposób, że najpierw jest wczytywane polecenie z klawiatury, wysyłane do modemu, a potem wypisywana jest odpowiedź modemu. Można więc wykonać jedno polecenie AT. Programy operują na portach (bez BIOS'u), jeden z użyciem przerwań, drugi bez. Niestety...
Przerwanie od WD TRZEBA włączać za każdym razem przed komendą SLEEP bo wejscie w przerwanie automatycznie kasuje bit który zezwala na przerwanie i następny okres WD po prostu bez tego zresetuje uC. Tak jest w trybie Interrupt+Reset, wtedy pierwsze przepełnienie odpala przerwanie a drugie i następne reset. W trybie Interrupt bit WDIE nie jest kasowany....
Witam wszystkich :D Zanim zalozylem ten temat b. duzo szukalem tego co potrzebuje i wiem ze bylo juz pisane na ten temat ale nie znalazlem nic konkretnego wiec pisze . A chodzi mi o to ze potrzebuje napisac program w bascom do attiny 2313 ktory mial by utrzymywac procka w trybie uspienia a gdy wcisne jeden z 2 guzikow to ma sie obudzic wyslac dany kod...
Jeżeli zasilacz jest AT to nie ma takiej opcji żeby automatycznie wyłączył się komputer niestety. Jak wrzucisz zasilacz ATX to z pewnością będzie się wyłączał prawidłowo. W zasilaczu AT jest to nie wykonalne bo jest on wyłączany "na twardo" przez przerwanie obwodu elektrycznego.
• Bit 2- PCKE: PCK Enable ... It is safe to set this bit only when the PLL is locked i.e the PLOCK bit is 1. ... Zgodnie z powyższym spróbuj może sprawdzić po: ldi A, 0b00000010 ; turn on PLL out PLLCSR, A _Waiste_us 10000 ; delay 100us for stabilize PLL czy bit PLOCK jest ustawiony, ewentualnie poczekaj na jego ustawienie przed włączeniem PCKE...
Pisząc klawiatura PC masz na myśli typową klawiaturę PC AT, PS/2? Jeśli tak, to protokół nie pasuje do SPI. Najprostsze rozwiązania czytają/piszą pojedyncze bity w przerwaniu każdego cyklu zegara: [url=http://www.atmel.com/Images/doc1235... Interfacing the PC AT Keyboard.
http://obrazki.elektroda.pl/7214276300_1... Pilot oparty na projekcie http://www.bigmike.it/ircontrol/ jednak zbudowany na mniejszym attiny13, myślę że można by zastosować dostępny na Allegro attiny4. Zasada działania jest dość prosta. Po uruchomieniu podzespołów (timera i przerwań) attiny przechodzi w tryb power-down, w którym oczekuje...
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...
Przerwania i Timery to rozwiązanie idealne i książkowe, na początek, ale tylko do nauki możesz zrobić na Wait'ach, ale nie polecam tej metody bo prowadzi do złych nawyków...
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)....
Spróbuj zrobić tak Co4ms: 'procedura obsługi przerwania od Timera T/C0 wykonywana co 4ms Timer0 = 6 'załaduj do Timera0, żeby zliczył 250 (=256-6) impulsów Incr Licznik If Licznik = 6 Then 'zmienna Licznik liczy do 6 aby Licznik = 0 'sprawdzanie stanu przycisku następowało If Pind.0 = 0 Then 'co ok.24ms If Pomoc = 1 Then 'jeśli zmienna Pomoc...
To może lepiej użyć dwóch procków z mniejszym flash-em, albo dwie ATtiny wykorzystując obsługę po 3 przerwania w każdym wtedy wsad będzie lżejszy. ATtiny 2313 nie są drogie i mają wbudowany rezonator co upraszcza sprawę. Tylko jak się tu zabrać za ten wsad:D Na razie zamówiłem na Allegro programator STK 200 i czekam. Mam nadzieję , że nie zaginie po...
Dane odbieraj w przerwaniu. Jak natrafisz na znaki "AT" to rozpoczynaj zliczanie 154 bajtów po czym ustawiaj flagę "Data_ready" czy jakąś taką i znowu czekaj na znaki "AT". A jak chcesz odbierać dane o rożnych długościach to czekaj na znaki "AT" i ustawiaj flagę po ich odebraniu. Tyle że odebranie poprzedniej ramki będzie wymagało pojawienia się początku...
Nie wiem, czy nie mąci wszystkiego sprawa taka, że ten warunek sprawdzany jest podczas realizacji przerwania - ale jak zaczynam obsługę przerwania, to je wyłączam (cli). Obsługa ISR automatycznie na czas jego wykonania blokuje przerwania więc nie ma potrzeby blokować ich po raz drugi. Trochę mało czytelny ten kod, ale pierwsze co się rzuca w oczy,...
Spróbuj może jeszcze zamiast używać funkcji beep(), w pętli głównej programu po prostu jej treść wpisać i zobaczyć co będzie. Na początek pojedyncze bipnięcie, potem dwa, a jak to będzie działać to trzy i tak do tyle ile chcesz. Zwróć też uwagę że rejestr OCR1A jest 16 bitowy, a rdzeń Twojego AVR jest 8 Bitowy. Czyli zapis tego rejestru nie odbywa się...
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
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ć...
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ż...
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...
ok,dzięki za wszelkie posty.Już sobie poradziłem.zrobilem na przerwaniu od timer'a.Dzieki!Pozdrawiam!
Ewentualnie przy większej liczbie sygnałów - przerwania INT lub PCINT. Ale to już bardziej programowy pomiar, przez co mniej dokładny ale dokładniejszy niż w przerwaniu od timera.
Dobry pomysł z tą dodatkową flagą. Muszę się zastanowić w jaki sposób mógłbym go wykorzystać. Jeszcze jedno pytanie. Padło hasło "kasowanie przerwań", rozumiem to jako programowe zerowanie flagi wystąpienia przerwania od komparatora (ACI), czy mam rację ?? Jeżeli nie to jak wykonuje się takie kasowanie przerwań ? Co jeśli wystąpi kilka przerwań po sobie...
Do optymalizacji: 1) formatowanie kodu (można wcinać więcej poziomów niż tylko jeden ;) ) 2) za dużo "magicznych liczb", za 3 dni zapomnisz co te PORTD=0xXX znaczą 3) zmienne i funkcje globalne powinny być static (poza main i przerwaniami) - oznacza to, że nie będą eksportowane = kompilator może je zoptymalizować/rozwinąć w miejscu wywołania. 4) o stałych...
Kodzik który wkleiłem jezt w asm pod atmege . Asm atmegi i attiny jest bardzo porównywalny ale niewiem czy attiny obsługuje wszystkie przerwania tak samo jak atmega. Podejzewam ze trzeba bedzie troche korygować program poza oczywistymi zmianami nazw tejesrów odp za stany portów. Ale w zasadzie to wszystko powinno być jak nalezy. Jakby tak znalezć ten...
Co do drugiego przezutnika to zegar, reset, set dalem pod zasilanie ale to i tak nic nie daloo :( i wsumie to olalem i zrobilem to na attiny 12 ( na przerwaniu wyzwalanym zboczem opadającym) i jakos działa, ale zauwazylem ze jak nie ma rezystora + kondensator to dzieje sie to samo co z 74hc74 ( przy opadajacym i narastajacym zboczu sie wlancza przerwanie...
Dziękuje że nie daliście mi gotowca, przynajmniej się czegoś nauczyłem. No to gratuluję, ale niestety musisz się jeszcze nauczyć duuużo więcej, bo nadal jest źle. Multipleksowanie wyświetlacza miałeś zrealizować w procedurze obsługi przerwania a Ty zrobiłeś dokładnie odwrotnie, czyli przeniosłeś cały kod z funkcji main() do procedury obsługi przerwania,...
Witam !!! Nie napisałeś jakiego używasz kompilatora a w przypadku przerwań, wiele od niego zależy. W standardzie ANSI C nie opisuje się przerwań więc wyglądają one różnie. To kod dla standardowego kompilatora CodeVision. Obsługuje tylko odbiornik w przerwaniu pakując odebrany bajt do bufora. Pzdrawiam (M.) #include <mega8.h> #define RXB8 1 #define...
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...
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...
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...
PoE at działa na 2 parach. Jeśli odległość nieduża to "bieda PoE" też będzie działać, wtedy 6 zył wystarczy.
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...
To są różne uC, tej samej rodziny, ale jednak się różnią, ilością pinów, RAM, flash, przerwaniami zewnętrznymi, ilością timerów, itd. Blink zadziała na każdym AVR czy Attiny, bardziej skomplikowany program już niekoniecznie. Na początek doprecyzuj czy masz problem z wgraniem czy kompilacją.
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ę...
"Początkowo program działa poprawnie" to nie dziwne, że na początku działa ci poprawnie a potem leci w przysłowiowe "maliny" nie potrafisz kolego jeszcze dobrze się posługiwać przerwaniami i samą konstrukcją programu - masz tak namieszane że szok w zasadzie czytając sam program to nie wiadomo dokładnie co chciałeś uzyskać pierwsza wskazówka - najpierw...
Z tego prościej korzystać: http://www.nongnu.org/avr-libc/user-manu...
Dlaczego nie Timer ? Obsługa przerwania TIMER0_OVR w niczym nie przeszkadza w działaniu PWM, a mamy w ten sposób jakąś podstawę czasu, który można sobie odliczać w tym przerwaniu. Dokładność co do 3 miejsc po przecinku nie jest taka istotna przy dekodowaniu RC5... Co do kodu - to nie ma prawa tak działać, obsługa przerwania powinna być jak najkrótsza,...
Tak jest, w Twoim wypadku (zakończenie działania programu) najodpowiedniejsze będzie wejście w tryb power down . Mój kod miał tylko ogólnie zwrócić uwagę na uśpienie (wejście w domyślny, najmniej oszczędny tryb idle; pętla nie szkodzi, ale jest potrzebna tylko dla programów, które chcą pozostawać w trybie uśpienia, ale wykonywać procedury obsługi przerwań...
Ale zważ że 25Khz to oznacza obsługe co 50KHz czyli przy częstotliwości attiny 10MHz masz 200 cykli do dyspozycji. Poza tym, oznacza również, że przy zgłoszeniu przerwania innego w tym samym czasie będziesz miał zakłócenia w generowaniu przebiegu. Poza tym, niczego to nie zmienia w mojej wypowiedzi.
http://obrazki.elektroda.pl/9785417500_1... Witam wszystkich Przyszedł czas aby wykorzystać przedstawiony przeze mnie w http://obrazki.elektroda.pl/6714514800_1... Sygnał start i stop jak widać na schemacie przechodzi przez tranzystor Q1 i Q2, bramki Schmitt’a i podawany jest na wejścia INT0 i INT1 procesora. Diody...
Założenia Watchdoga są takie, że jeśli włączysz przerwanie od niego to za pierwszym okresem nie zresetuje procesora tylko wejdzie w obsługe przerwania, ale on w tym przerwaniu skasuje bit WDTIE i już za drugim okresem zrestartuje procesor. Żeby Watchdog stale miał włączone przerwanie to trzeba to w kółko ustawiać. Teoretycznie nie powinno się z powrotem...
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...
Dziękuję wszystkim za zainteresowanie. Chcę sterować czterema mosfetami silnikiem krokowym z około 100Hz. Chyba podłączę bramkę przez opornik 10k do +9v i tranzystor do masy.W jakich warunkach może dojść do przebicia bramki, bo spaliłem w ten sposób kolejnego bc547 i nie wiem jak go przed tym zabezpieczyć. Po ponownym podłączeniu zasilania mosfet działa...
Może trzeba dać SEI przed uśpieniem procka? Przecież włącza SEI tyle że wszystko wg najgorszych praktyk programistycznch. SREG |= 0x80; --------------------------------- W nocie PDF ATtiny2313 wprawdzie napisano w uwadze, że tylko INT0 reaguje na wybudzanie poziomem, ale to słówko tylko (Only) tyczy się poziomu a nie samego przerwania. Powinno być...
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.
heh, miales wielkiego niefarta... mozesz sprobowac odszukac taka sama plyte, gdy bedzie wlaczona - wyciagnac dzialajacego biosa, wsadzic tego swojego uwalonego, zaprogramowac i wtedy bedzie dzialalo, mozesz tez sprobowac utworzyc dyskietke startowa z biosem - napisz jaki on byl (ami, award) - isc do sklepu elektronicznego ze scalakiem i dyskietka z...
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...
Witam jak opanujesz używanie trybów oszczędzania energii będzie trochę więcej ale też będą to pojedyncze uA. N.p.: czujnik podłączasz do wejścia INT, w while(1) cały czas go "usypiasz" a program wykonujesz w przerwaniu "od INT " - ot taki odpowiednik np pilota wykonanego na uC ( tu wystarczy maleństwo - Attiny ); póki nic nie naciskasz cały czas śpi....
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...
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...
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...
Masz błędny kod. Jak chcesz by program działał jak trzeba to musisz wiedzieć co robi każda linijka. Włączasz przerwanie od przepełnienia timera0, a nie maż funkcji do jego obsługi. Deklarujesz funkcję do obsługi przerwania zewnętrznego, a nie masz funkcji obsługi i nie zezwalasz na to przerwanie. Na moje oko to po uruchomieniu timera procesor się zresetuje...
łatwiej się już chyba nie da. Sorki, ale ja bym raczej powiedział, że: "JUŻ GORZEJ SIĘ NIE DA :(" Co to za rozwiązanie gdzie w środku siedzi jeszcze obrzydliwy Wait !!! brrr ale żeby nie być gołosłownym, który tylko krytykuje.... Ok, panowie - widzę, że wasze zmagania spełzają na niczym, pokażę wam więc jak się powinno podchodzić do programowania....
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...
#include <avr/signal.h> Wywal, nowa wersja gcc dla avr wymaga juz tylko <avr/interrupt.h> Zresztą, dwie poniższe funkcje w ogóle nie korzystaja z przerwań, więc możesz się pozbyć handlerów (SIGNAL(...){}) i uaktywniania przerwań (UCSRB = (1 << RXCIE) | (1 << TXCIE);) zresztą cały ten fragment jest źle. UCSRB = 1 << TXEN;//...
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 może wyłumaczyć mi ktoś tak jaśniej niż whelpie bascoma ;) co to jest ten prescaler i co on dzieli. Może tak po kolei jak twój program widnieje: 1. Jeżeli PORTB jest przeznaczony do obsługi LCD to nie konfiguruj go w ogóle w stylu jaki podałeś w pierwszym poście. Config Portb = &B11111111 : Portb = &B11111111 ===> źle!!! Może to powodowac zakłócenia...
Po co stosować tu przerwanie? Kardynalny błąd to stosowanie polceceń opóźnień w przerwaniach. W tym programie problem tkwi w: If Przycisk = 0 Then Waitms 100 If Przycisk = 0 Then Incr Sekwencja If Sekwencja = 0 Then Incr Sekwencja If Sekwencja = 4 Then Sekwencja = 1 End If End If End If End If Popraw na: If Przycisk = 0 Then Waitms 100 If Przycisk =...
Według tego: [url=http://mirley.firlej.org/fuse_bity_... oraz tego: [url=http://www.engbedded.com/fusecalc]L... Przy kwarcu zewnętrznym powyżej 8Mhz lfuse=0xff to dobre ustawienia...jeśli się mylę...niech koledzy w razie czego mnie poprawią Mam nadzieję, że linki pomogą EDIT Może to nie fusy, a np funckja opóźniająca, albo preskaler...
ENABLE INTERRUPTS 'Włączenie globalne przerwań ENABLE INT0 'Właczenie przerwania INT0 ON INT0 podprogram: 'Przypisanie podprogramu który zostanie wywołany po stwierdzeniu przerwania. "Only an level interrupt on INT0...". Wypadałoby jeszcze ustawić przerwanie aktywne na poziom a nie na zbocze. config INT0= LOW LEVEL Proszę bardzo :) Na marginesie, to...
Czas otwarcia wtryskiwaczy mierzysz za pomocą 1 timera, ale nie tak od razu. Są dwie metody: pierwsza to podpięcie (przez transoptor) wtryskiwacza do wejścia timera i wejścia przerwania - po wykryciu przerwania (początek stanu niskiego) startujesz timer, przestawiasz stan aktywacji wejścia INT na przeciwny i procek wraca do pętli głównej, po ponownym...
attiny przerwania zewnętrzne attiny bascom przerwania przerwania pcint attiny
tuning telewizora wkrętarki baterie parkside nagrzewnica power
kluczyk kodowanie kluczyk kodowanie
Dlaczego forum Elektroda ma niski poziom merytoryczny? Elektroda.pl - Dlaczego użytkownicy są niezadowoleni?