while(1) { AD(); //obsluga ADC if(ADC>630) { PORTC=0X00; //wlacza,wylacza diode TIMSK |=1<<TOIE2; //ZEZWOLANIE NA PRZERWANIE OD T0 } } } Moze tak?
No a co to jest jak nie pętla for(;;); ? +0000007F: CFFF RJMP PC-0x0000 Relative jump
$regfile = "m8def.dat" $crystal = 8000000 Config Timer1 = Pwm , Pwm = 8 , Compare B Pwm = Clear Down , Prescale = 1 Config Portb = 255 Config Portc = 255 Config Portd = 255 Portb = 0 Dim A As Byte 'Czerwony Dim B As Byte 'Zielony Dim C As Byte 'Niebieski Dim D As Byte 'Czas A = 0 B = 255 C = 255 D = 4 Zolty: Do Pwm1b = A Set Portb.4 Waitms...
Dałem pętlę while(1) w main i dioda nadal nie miga. Gdze ją dodałeś? U mnie działa. [syntax=c] #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define LED_PIN (1<<PD7) #define LED_TOG PORTD ^=LED_PIN volatile int licz; int main(void) { DDRD |= LED_PIN; TCCR0 |= (1<<CS02); TIMSK |= (1<<TOIE0);...
Zmienna licznik powinna być przy inicjalizacji poprzedzona słowem: volatile .
Co do problemu nr 2 to nigdzie nie uruchamiasz Timer 0, zarówno na poczatku programu jak i w procedurze przerwania (tam masz tylko Stop Timer0).
"Tą" liczbę masz zapisaną w zmiennej Liczba_przerwan_tim0 a nie w ośmiobitowym (czego się chyba obawiałeś) rejestrze timera0 - więc nie ma problemu.
Pierwsze pytanie - czy w inny sposób udaje ci się coś wyświetlić na LCD? I drugie - tam jest funkcja dodająca transakcje, która przy okazji włącza timer. Poprawiłeś ją? Chodzi o tą: [syntax=c] bool LCD_PutText_B(uint8_t x, uint8_t y, char *txt, LCD_trans *buf, bool autodel) { buf->cmd=LCD_Text; buf->Ready=false; buf->SelfDel=autodel; //Czy zwolnić pamięć...
A nie łatwiej jest policzyć DO ilu ma liczyć a nie OD ilu? :) i robić przerwania COMP a nie OVF? Ja tak robię i na kwarcu 4MHz timer1 odlicza sekundy bardzo ładnie. Ale u Ciebie timer1 wydaje się mieć dobrze ustawianą wartość. Przy prescalerze 256 musisz mieć 15625 taktów zegara, aby osiągnąć sekundę. W drugim coś mi nie gra. Odliczasz od 0x0F czyli...
Absolutnie żadne Start Timer0 nie jest tu potrzebne. Wystarczy, że tak będzie skonfigurowane przerwanie: [syntax=basic4gl]Config Timer0 = Timer , Prescale = 256 On Timer0 Sekunda Const Przerwanie = 131 Counter0=Przerwanie Enable Timer0 Enable Interrupts . . . end Sekunda: Counter0=Counter0+131 . . . Return [/syntax] ...i unikaj jak ognia "drukowania"...
1. Do tego co napisał Fredy wyżej: http://mikrokontrolery.blogspot.com/2011... 2. Zmienną akt_wyswietlacz zdefiniuj sobie jako lokalną statyczną w funkcji przerwania. 3. F_CPU definiuj w opcjach, a nie w kodzie: http://mikrokontrolery.blogspot.com/2011... 4. W jakim celu zerujesz TCNT2 w przerwaniu...
Nie chcę grać roli lokalnego guru (zwłaszcza korzystającego z cudzych stron WWW), ale widzę następujące błędy: F_CPU nie defniuje się w kodzie -> http://mikrokontrolery.blogspot.com/2011... Twoje zmienne używane w przerwaniu powinny być volatile -> http://mikrokontrolery.blogspot.com/2011... Nie...
TCCR0 = _BV(x<<CS00); Źle użyłeś makra _BV. _BV(x) jest równoznaczne z ( 1 << x ), czyli w Twoim przypadku próbujesz wykonać podwójnie przesunięcie bitowe. Jeżeli x = 3 (CS00=0): _BV(3<<CS00) = _BV(3) = (1<<3) = 0b00001000 czyli TCCR0 będzie równe 0b00001000 . Innymi słowy, próbujesz ustawić bit tylko do odczytu, zamiast...
No jest kretyński :) TIMSK = _BV(TOIE1); // wlacz obsluge przerwan T/C1 TIMSK = _BV(TOIE0); //jw dla T/C2 TIMSK = _BV(TOIE1) ; // wlacz obsluge przerwan T/C1 TIMSK |= _BV(TOIE0); //jw dla T/C2 albo TIMSK = _BV(TOIE1) | _BV(TOIE0) ; ;)
Nie bardzo jest co komentować, bo najważniejszej procedury (ISR) nie pokazałeś. Jedno jest pewne: Taka konstrukcja i wywołanie procedury 800_ms zakończy się opóźnieniem programu głównego o parę mikrosekund i tyle. Zmienna Licz_8ms będzie się inkrementować tzw. "sobie a muzom". Co więcej, nawet jakbyś poprawnie skonstruował tą procedurę to dalej zamiana...
Poczytaj sobie dokładniej o różnych trybach oszczędzania enegii. W niektórych mogą być timery włączone a w niektórych nie. W PDF'ie masz dokładną tabelkę, która pokazuje co działa a co nie w każdym z trybów. Więc nawet angielskiego nie trzeba znać żeby się tego dowiedzieć z PDF'a.
ad 1. Dla timer 0 nie jest źle, bo masz preskaler i licznik jest 16-bitowy, więc wystarczy odpowiednio to skonfigurować i te 5 Hz uzyskasz. Timer 2 ijest tylko 8-bitowy, więc 5 Hz nie uzyskasz (chyba, że zwolnisz taktowanie MCU). ad 2. Zainteresuj się bitami COM, które definiują zachowanie wyjścia timera.
Jaki masz programator? Ściągnij sobie lepiej MkAvrCalculator. Jest to naprawdę bardzo przyjemny programik i nie ma możliwości abyś źle ustawił fusebitów i zablokował procka. W bascomie ustawianie fusebitów jest dość trudne i może przysporzyć sporo kłopotów. Pozdrawiam.
Przeczytaj sobie w datasheecie czy dzielisz zegar przez 8 czy przez 4 ;) Nie wiem co koledzy z tym fuse bitem ckdiv8, atmega8 nie ma takiego ;) Vectra96 sciagnij tez sobie program avrcalc i tam szybko bedziesz mogl wyznaczyc konfiguracje timerow :)
Tak poza tematem, czy to sie nie pisze "Load Timer0, 100" ? i zrob timer0=cos na starcie i w przerwaniu.
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...
[syntax=basic4gl]$regfile = "m8def.dat" $crystal = 10000000 Config Timer0 = Timer , Prescale = 128 Load Timer0, 5 On Timer0 czas Enable Interrupts Enable Timer0 Do If Pinc.0 = 1 Then Start Timer0 end if If Pinc.0 = 0 Then reset portd.1 end if Loop czas: set portd.1 stop Timer0 return [/syntax] Tak na szybko,... nie testowany. Zrobić możesz wszystko,...
Spróbuj skompilować ten programik pod konkretny mikrokontroler. W Bascomie domyślenie masz ustawione AT90S2313. Użyj dyrektywy: $regfile = "m8def.dat" - dla ATMega8, $regfile = "2313def.dat" - dla AT90S2313, Może pomoże :)
Timer0 w Atmega8 może pracować tylko w trybie OVERFLOW (przepełnienia).
Witam Potrzebuje aby co 15 minut była wykonana pewna operacja. Wykorzystałem do tego timer0 dim Liczba8ms as integer Config Timer0 = Timer , Prescale = 256 On Timer0 Pomiar_paliwa On Interrupts Enable Timer0 Load Timer0 = 250 '****PROGRAM GŁÓWNY END Pomiar_paliwa: Load Timer0 = 250 incr liczba8ms If Liczba8ms = 112500 Then '*****jakies dzialanie'...
Przecież w Normal Mode też można używać rejestrów OCRx. Na przykład do generowania 2 przebiegów 50% przesuniętych względem siebie o dowolną fazę regulowaną właśnie przez OCRx. Czy w Atmega8 i Timer0 też można?
Przede wszystkim to zastanów się dlaczego do generowania nośnej usilnie chcesz pisać jakiś kod programu i obciążać tym program główny procesora, skoro można to zrobić CZYSTO sprzętowo za pomocą timera. Tylko nie Timera0 bo ATmega8 jest biedna w porównaniu do ATmegai88 gdyż timer0 nie posiada w niej trybu CTC. Tymczasem masz jeszcze timer2 i wystarczy...
TCCR0=0x04; TCNT0=0x05; I w przerwaniu na początku musisz mieć: TCNT0=0x05; I zliczać równo 125 przerwań - odliczysz doładnie 1s. ok ....tylko jak np. chcę żeby po tych 125 przerwaniach nastąpiła zniana stanu portu ?? to jak to ując w pętli głównej ??
ok problem rozwiązany, musiałem dodatkowo urychomićprzez enable, timer0 i 2
Load Timer0 = 100 Niewłaściwa składnia. Ma być: Load Timer0 , 100 albo Timer0 = 155
Jezeli dasz prescaller 256 to musisz zliczyc 31250 impulsow aby odmierzyc sekunde.
Dołacz do wyjscia Timera rezystor 3k3 do masy, powinno pomóc,smieci zostaną "odfiltrowane" do masy. Zmniejsz tez napiecie z 5,6V do poziomy TTL, dając jakiś bufor przed. Napięcie wejśwciowe nei powinno przekraczać napiecia zasilania uC a pewnie z 5V jest zasilany. Pozdrawiam
A co jeśli do pierwotnego kodu dodasz: [syntax=c]ISR(TIMER1_COMPB_vect) { }[/syntax]
pewnie wspaniala komenda $crystal, czy jakkolwiek to tam sie pisze... 'no przeciez zadeklarowalem czestotliwosc kwarcu,,, czemu mi nie dziala...??????!!!!!1111 jeden jeden !!!111???/// ' 4\/3!!
Nie sprawdzilem dokladnie calego kodu, ale w oczy rzucilo mi sie to dziwne cos :) : char licznik=3200; ?????????? Nie mozesz do zmiennej typu char zaladowac wartosc 3200 bo jest to liczba 16-to bitowa! A zmienna char jest tylko 8 bitowa ( maks 256) . Poza tym jesli jest ona ze znakiem ( bez unsigned) to od -127 do 128. Powinienes zapisac unsigned int=3200;...
(at)seba_x:A co to za bzdura?:> • Peripheral Features – Two 8-bit Timer/Counters with Separate Prescaler, one Compare Mode – One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode A co do pytania autora, nie, zliczanie umożliwiają tylko dwa pierwsze timery. Trzeciego można używać jako wewnętrznego. Nie tylko...
Jeszcze po odblokowaniu przerwań dopisz Start Timer0 .
Wiem o tym, że zazwyczaj się używa do tego zazwyczaj Counter2/Timer2, ale właśnie, chcę użyć Timera0 do tego celu. Mam problem z stworzeniem generatora sygnału, który wykorzystywał by mi ten kwarc 32kHz.
To co dawid512 napisał jest najprawdopodobniej na atmega32. Musisz poczytać dokumentację i zmienić ten kod, gdyż timer0 na atmega8 ma trochę mniejsze możliwości. [dodano] Można też skorzystać z timer2, jego obsługa będzie łatwiejsza.
witam! mam taki problem: chcę zliczać zewnętrzne impulsy, timer mam skonfigurowany w taki sposób: config Timer0 = counter, edge = falling, noice cancel = 1, na portd.4 mam ustawiny wewnętrzny pull-up i dodatkowo zewnętrzny rezystor podciągający 4,7k.do masy kondensatorek 100 nF. Licznik oczywiście mi liczy ale zlicza też przypadkowe impulsy. widać to...
A co ma zrobić program jeśli opuści tę ostatnią pętlę do loop?
Dlaczego jak napisze: On Timer0 Timer0_int Disable Timer0 nop nop nop Tirf.0=1 'Ustawiam flagę oznaczająca rzadanie przerwania od Timer0 nop nop nop Enable Timer0 nop nop Timer0_int: nop nop Return to program nie wykonuje przerwania po wykonaniu instrukcji Enable Timer0? Czy ustawienie bitu tirf.0 jest niemożliwe programowo? Czy to wina Bascoma?...
A gdzie masz polecenie Start Timer0?
A gdzie jest umieszczony główny program? Musi być po instrukcjach Enable Timer0 i Enable Interrupts.
Witam, próbuje wykonać prosty odtwarzacz midi w oparciu o mikrokontroler atmega8535. Bazując na przykładach z internetu udało mi się temat jakoś wstępnie ogarnąć. Niestety na atmedze nie uruchamia mi się zegar o który oparte mają być programy. Wszystko jakby "wisi". Dodam że programuję w C w środowisku Code Vision AVR. W celu zlokalizowania problemu...
tylko że do PC.4 nie możesz. Musi być pod PD.4. Bo to jest wejście impulsów zewnętrznych dla Timer0
ach... tak ze sklepu nowy.. dzięki, spróbuję..
OK, uzywam juz w tym celu timera... Tylko nie do konca orientuje sie z preskalerem i czestotliwoscia.. Tzn, jak uzykac jakies w miare dokladne wartosci...? Mam uC pracujacy na wew. oscylatorze 1MHz [ATMega8, Timer0]... Chcialbym, zeby przerwanie wywolywalo sie co 1 albo 10ms, jak dobrac preskaler i wartosc poczatkowa timera [8bitowego]?
W atmega8 timer0 nie ma trybu CTC, ale już w atmega88 taki tryb jest. Rejestr TCNT0 to rejest przechowujący aktualną wartość licznika timera0. Skoro nie ma trybu CTC to w normalnym trybie przerwanie będzie występowało co 100 cykli jeśli na początku programu i w obsłudze przerwania wpiszesz do tego rejestru taką wartość aby do przepełnienia (zmiany z...
ATmwga 8 ma 3 timery... 2x 8-bit i 1x 16bit... Timer2 może pracować z kwarcem zegarkowym... Timer1 jako PWM... A timer0 jako licznik...
Musisz też załadować nową wartość do licznika timera. Jak już pisałem, bez fragmentu kodu odpowiadającego za pobranie czasu przerwania dziaął poprawnie, więc nie w tym problem.
Config Timer0 = Timer , Prescale = 32 Enable Interrupts Enable Int0 On Int0 Przerwanie1 Nosave Cls 'tutaj wysyłasz impuls pierwszy start timer0 Do : Loop Przerwanie1: stop timer0 'tutaj co ci sie podoba lcd "odleglosc:" ; wynik 'co tam jeszcze chcesz 'wysyłasz impuls start timer0 return End
Witaj migot. Już byłem na tej stronce, i jest fajna. Jednak nie opisuje ona sposobu wyliczenia częstotliwości na timerze. Znalazłem fajny program tj. kalkulatorAVR i porównując przykład z innego programu doszedłem jaką podać wartość aby uzyskać przepełnienie co daną ilość mikrosekund. Dzięki za zainteresowanie. Nadmieniam, że kożystam z CodeVisionAVR...
No nie tyle "sztywne", co ich po prostu nie ma ;) - kto pierwszy ten lepszy Można napisać soft przydzielający priorytety, ale jest to dość skoplikowane i nie zawsze się opłaca (w sensie czasu potrzebnego do określenia źródła przerwania, określenia priorytetu, adresu procedury itp. - robi się z tego prawdziwy OS)
0vf0 jest to przerwanie od licznika Timer0 po jego przepełnieniu- można napisać Timer0.
Już po problemie
a jak ustawić ten timer bo tu mowa chyba o timer0
Spróbuj jej na początku dać disable timer0 , a na końcu enable timer0.
Czym to kompilowałeś ?
Mirek o ile się nie mylę użył timer0.
Odkopię temat bo mam problem też z Attiny13. Problem jest następujący: po skonfigurowaniu timera0 jaki licznik zaczyna on zliczać kolejne takty procesora z określonym preskalerem ale w momencie użycia procedur waitms lub if timer0 zatrzymuje się. Dzieje się tak podczas sprawdzania na sprzęcie jak i na symulatorze. Program powinien działać poprawnie,...
To jeszcze schemat poproszę :D
Która atmega? W atmega8 możesz użyć: Timer0 - odmierzanie czasu Timer1 - zliczanie impulsów Timer2 - PWM
a to O nie ma być przypadkiem 0 (zerem) ?
Wszystko już zrozumiałem :) Dziękuję wszystkim za pomoc i uważam temat za zamknięty. Pozdrawiam
Niestety ledwo w bascomie się orientuje a w C to niestety... A jak to w bascom'ie miałoby to wyglądać. Rozumiem, że ma to być oparte o Timer0?
http://mikrokontrolery.blogspot.com/2011... Jest to ten artykuł. Cały kod? On ma ponad 700 linii. Czy oszczędzić czasu i wyciąć konkretne fragmenty i je wrzucić te które mogą zawinić. Typu inicjalizacja timerów itp. Dodano po 3 Ok problem rozwiązany [syntax=cpp]ISR(TIMER0_OVF_vect) { sei(); static uint8_t stan_przyciskow_najstarszy,...
A może byś kod pokazał? Przeciez napsal ze ma bledny kod .... Load Timer0 = 144 co winno byc: Load Timer0 , 144 albo jezeli preferuje zapis ze znakiem rownosci to: Timer0 = 112 ' gdzie dzialanie (256-144=112) wykona Bascom. e marcus
Przede wszystkim zmień Load Timer 0 ; 125 na Load Timer0 , 125 a zaraz po Loop powinno być End a nie End if.
... ale niestety mądrala nie przytoczył jak powinno się to zapisywać... ) Oj, uważaj bo ktoś może poczuć się urażony i raportować post :) Na temat F_CPU w sieci można znaleźć wiele: F_CPU – gdzie definiować? Chciałbym dowiedzieć się co znaczą te TCCR2, OCR2, TIMSK, jak liczyć te przerwania i dlaczego timer po skopiowaniu tego kodu nie liczy faktycznie...
Zegarek oprócz funkcji wyświetlania czasu ma pokazywać temperaturę i mieć możliwość sterowania z pilota (RC5). Normalnie (by default) Bascom używa Timer0 dla RC5. Jeżeli Timer0 masz zajęty do inego celu, więc potrzebujesz skonfigurować Timer2 dla RC5. e marcus
Kod się nie wykonuje.
Zaglądając do dokumentacji mikrokontrolera i wybierając jedną z dwóch możliwości: 1. preskaler timera - jedno z ustawień preskalera powoduje zatrzymanie timera czyli "No clock source (Timer/Counter stopped)." 2. zerując bit TOIE0 (jeśli użyjesz timer0), czyli Timer/Counter0 Overflow Interrupt Enable
Oczywiście Timer0 zlicza. Przerwania włączone.
Zobacz tu: http://mikrokontrolery.blogspot.com/2011... jeszcze świeże :) Może coś ci to pomoże. Użyj wektora TIMER0_OVF_vect.
Wykorzystaj licznik 8-mio bitowy i w przerwaniu zwiększaj o 1 zmienną i jednocześnie sprawdzaj czy ta zmienna osiągnęła jakąś wyliczoną wartość - powiedzmy 1000. Jeśli nie to wychodzisz z przerwania a jeśli tak to wykonujesz kod który ma być wykonany w przerwaniu. W ten sposób zwiększysz programowo rozdzielczość licznika. [syntax=c]ISR(TIMER0_OVF_vect)...
Witam Ten program został napisany na MCU - AT89C2051 ! A nie na AVR Atmega8, dlatego Bascom avr ma problem. Aby go skompilować Musisz to zrobić w Bascom 8051. Ps. przymierzam się do zrobienia tego detektora od roku, ale jakoś czasu nie mam...
Nie widzę u Ciebie nigdzie polecenia START Timer0, spróbuj to dodać zaraz po Enable Timer0 :D
Witam. Tak na szybko analizując kod: Dla Timer0 włączasz dwa przerwania od porównania: http://obrazki.elektroda.pl/6165324400_1...
Doczytalem na internecie ze ta biblioteka nie działa na Atmega8 bo korzysta ż Timer0 który fizycznie nie istnieje w tej Atmedze. Wiec zostaje mi napisanie wszystkiego od nowa lub kupno innej atmegi :P
Ja to lubię tak: Zmienić ATmega8 na 88- ta sama cena. Potem w rejestrze ADCSRB ustwić ADTS0...2 tak jak potrzeba- np. przerwanie od Timer0 Compare Match A. Timer0 ustawić tak aby i tak go wykorzystać jako timer systemowy- oba przerwania wykorzystać albo tylko żadanie obsługi przerwania. A reszta w głównej pętli. Ale to jest co ja lubię- wykorzystać...
Przebiegi wygladaja na wyjściu falownika tak: http://img51.imageshack.us/img51/1482/un... dokładnie widać gdzie jest początek tablicy. Te przebiegi to już po przerobieniu delay'a na wybieranie kolejnych elementów tablicy za pomocą Timer0.
zmniejsz tą wartość Load Timer0 = 250
Błędy masz jak na dłoni, ATmega8 nie ma portu A, Timer0 ATmegi 8 nie ma w podanych rejestrach wskazanych bitów. Przestudiuj datasheety ATmegi 8 i 32, to wszystko stanie ci się jasne.
SIGNAL(SIG_OVERFLOW0) - w ten sposób definiowały obsługę przerwania jeszcze nasze babcie i jeszcze za ich czasów wprowadzono nowy sposób - ISR(TIMER0_OVF_vect) 3-sekundowy delay w przerwaniu? "Super" pomysł.
A kto powiedział że musisz go wyłączać? Istnieje lepszy sposób: robisz sobie flagę którą resetujesz w pzrerwaniu od timera. Potem wystarczy dodać coś takiego: Set Flaga : While Flaga = 1 : Wend Takie coś wstawiasz tam gdzie wcześniej musialeś wyłączać przerwania. Działa to tak że uc czeka aż wykona się przerwanie i dzięki temu wiemy że miało...
Witam. Na forum jestem nowy, ale Atmege8 gryzę już od roku:). Zakładam że czytałeś datasheet'a od Atmega8 i niestety nie udało Ci się zrozumieć.Jeżeli tak to Ci pomogę. Po pierwsze w Atmega8 masz trzy timery/countery: -Timer0 8bit -Timer1 16bit -Timer2 8bit Timer1 i Timer2 możesz wykorzystać jako PWM,gdyż mają wbudowaną taką funkcje. Wiadomo że 16bitowy...
Programuję w ASM ale tylko Atmega8/16 więc wklejam ci taki przykład: [syntax=asm] .CSEG .org 0x0000 //poczatek deklaracji skokow dla przerwan rjmp _poczatek reti reti reti reti reti reti reti reti rjmp _150_timer0 //przerwanie overflow timer0 reti reti reti reti reti reti reti reti reti _poczatek: in r16, TIMSK//timer0 overflow interrupt enable ori...
Witam. A skąd w Atmega8 wziąłeś rejestry TCCR0B , TCCR0B. Timer0 i _delay_ms() razem działają. Masz co nie tak w swoim kodzie. Pisał już (at)excray dodam tylko pełny. Możesz powyrzucać wszystko co jest nie potrzebne i zostawić sam błąd.
Tylko jak teraz dopisać tą konfiguracje led? Tak jak chcaiłem z rgb zrobić
Co do T0 - jeśli potrzebujesz określoną liczbę impulsów, to prościej zmienić tryb pracy T0 i zmienić wartość top do której zlicza licznik. To też szczegół, ale jeśli coś się da zrobić hardwarowo... W ATmega8 nie ma takiej możliwości, Timer0 nie ma trybu CTC. Można użyć Timer2, jeśli nie jest zajęty... :P
Bity w MCUCR określają na co będzie reagować przerwanie zewnętrzne... Zmiana stanu, opadające lub narastające zbocze więc jest to jak najbardziej potrzebne... SIGNAL (INT0_vect) - obsługa zewnętrznego przerwania INT0... SIGNAL (TIMER0_OVF_vect) - obsługa przerwania od przepełnienia timer0... Co do portu... Jak na mój gust powinno być PORTC = !PORTC;...
Poczytaj sobie ten watek : http://www.elektroda.pl/rtvforum/timer0-...
Nie sprawdzałem wcześniej bo uwierzyłem ci na słowo, że sprawdziłeś rejestry ATMega8. W rejestrze TIMSK przerwanie overflow dla timera0 to TOIE0 ale jest to bit 0 a nie 1. W związku z tym inicjacja powinna wyglądać tak: TIMSK=0x01 lub jak wspomniałem wcześniej zdefiniować bit TOIE0: #define TOIE0 0 wtedy zadziała TIMSK=(1<<TOIE0) Bardzo polecam...
Witam Temat dekodowania RC5 był już poruszany http://www.elektroda.pl/rtvforum/atmega-... , bardzo fajnie opisane są kody w różnych standardach (m.in. RC5) na stronce http://www.xs4all.nl/~sbp/knowledge/ir/r... i jeszcze na http://www.ustr.net/infrared/index.shtml Sam sobie też...
Skopiowałem, skompilowałem, wgrałem. Reasumpcja przedwczesna. Co w zasadzie ma wyzwolić to opóźnienie? Co za pomysł konfigurować zezwolenie na obsługę przerwania od przepełnienia Timer0 w pętli głównej?
] Gdybym chciał jednak mierzyć załóżmy do 1kHz to wymaga aby zliczać przepełnienia? Dlatego napisałem..."Nie znaczy to jednak..." w złym obliczeniu 1 sek wartość wynosiła 61630, przy prawidłowym obliczeniu wynosi 34 286 uwzględniając czas 1sek, częstotliwość taktowania 8MHz i prescaler 256. Przecież czas (1 sec.) odmierzasz timerem0, który jest 8-bitowy...
Zasymulowałem działanie tego programu w AVR Studio i mam małą zagrychę. Nie wiem czy to wina AVR Studio (raczej nie), ale przerwanie nie działa tak jak powinno :D zmieniam stan (załóżmy diody) na pinie 7. - Gdy stan ma sie zmienic z "1" na "0" to po wywołaniu przerwania tak się dzieje, ale gdy ma się zmienic z "0" na "1" to przy kolejnym przerwaniu...
Ja osobiście nie mam problemów z przenaszalnością kodu w firmowym asemblerze Atmela, nawet pomiędzy różnymi wersjami rdzenia, gdyż są w nim wbudowane definicje pozwalającej na asemblację warunkową. Przykład - instrukcja lpm , zamiast której używam następujące makro: .macro LpmPlus #if ((__CORE_VERSION__==V2E)|...
Witam! Na podstawie informacji zawartych w książce "Programowanie mikrokontrolerów w języku Bascom" napisałem program: Problem: Problem polega na tym, że program nie działa poprawnie. Po pierwsze procesor zamiast 1 sekundy odmierza ok. 8s. Jest to dla mnie nie zrozumiałe, ponieważ kodu zawierającego instrukcje tyczące się timer0 nie zmieniałem. To samo...
atmega8 timer0 przerwać atmega8 timer0 przerwanie atmega8 timer0 impulsy
prowadnica piła stołowy amazon assistant uzwojenie robocze
Podkaszarka odpala, ale nie wchodzi na wyższe obroty Zigbee 3.0 CO₂, Humidity & Temperature Monitors: Titan TPZRCO2HT-Z3, Heiman, Tuya, ALab Models