"hello world" avr - pytanie

Dec 14, 2006 6 Replies

Witam!



Pytanie z kategorii mruganie dioda na atmedze.



Dioda podpieta do portu PC5, wykorzystuje sobie Timer1. Tak wyglada kod:


============================== .org 0x0000 rjmp main main:



sbi DDRB, DDB1 sbi DDRC, DDC5



ldi R16, (0<<COM1A1)|(1<<COM1A0) out TCCR1A, R16



ldi R16, (1<<CS02)|(1<<CS00) out TCCR1B, R16



loop:



sbic PORTB,1 sbi PORTC, PORTC5 sbis PORTB,1 cbi PORTC, PORTC5 rjmp loop ==============================



Diodka sie nie zapala. Jednakze port PB1 zmienia stany a PC5 nie chce. W symulatorze AVRStudio dziala. Nie mam za bardzo juz pomyslu. Jesli ktos mialby jakis pomysl to bylby wdzieczny za wskazowke.



pozdrawiam


U¿ytkownik "Szymon Kubicki" snipped-for-privacy@no.spam.terror.org.pl> napisa³ w wiadomo¶ci news: snipped-for-privacy@terror.icm.edu.pl... ....

Zapewne przeszkadza JTAG. Wylacz jego obsluge naprzyklad za pomoca fusebitu JTAGEN. pozdrawiam

Robert Z. zeznal:

Nie napisalem ze to atmega8 w zwiazku z tym nie mam takiego bitu.

pozdrawiam

Hmmm... dość dziwny kod. Uruchamiasz TIMER1 w trybie CTC Toggle i badasz stan wyjścia "togglownicy" aby zapalać diodę. Nie prościej Podłączyć tego LED-a prosto pod nogę PB1 ??? Jeśli już się upierasz przy takim rozwiązaniu to powinieneś testować stan wejścia PINB1, bo TIMER1 w trybie CTC czy PWM nie zmienia wartości bitów w PORTB tylko wymusza stany logiczne na wyjściu PB1 (lub PB2) więc w Twoim przykładzie powinno być raczej:

loop:

sbic PINB,1 sbi PORTC, PORTC5 sbis PINB,1 cbi PORTC, PORTC5 rjmp loop

W AVRStudio nie wierz tak bezkrytycznie, bo już niejednokrotnie dało mi popalić i od conajmniej dwóch lat trzymam się od niego z daleka. Często miałem odwrotne sytuacje niż Twoja. W AvrStudio program nie chciał działać, a po wgraniu do procka śmigał aż miło.

Jeszcze jedna sprawa mnie dziwi w tym przykładowym programie. Nie inicjalizujesz wartości rejestru OCR1A.

Pozdrawiam Grzegorz

Grzegorz Kurczyk zeznal:

Diode juz mialem podlutowana do tego wyjscia. Ja wiem ze to nie problem przelutowac ale tez teoretycznie nie problem obejsc to programem. A jak inaczej to zrobic wykorzystujac timer? Mozna dorzucic jeszcze obsluge przerwania po przepelnieniu licznika ale tak jest chyba prosciej?

Dziala :) Aczkolwiek wczesniejsza wersja wykorzystywala skoki do etykiet i tez sprawdzalem PINx i nie dzialalo. Ale teraz dziala, dzieki :)

No bo to w sumie nie tryb CTC tylko normal (WGM1.3-0 = 00). Licznik zlicza do pelnej swojej pojemnosci a ze przy okazji dziala ustawienie generowania sygnalu na OC1A/PB1 no to tak zrobilem. Na poczatku robilem tak jak mowisz ale ostatecznie wyszlo tak.

pozdrawiam

Użytkownik Szymon Kubicki napisał:

Przerwania aż się proszą :-) Ewentualnie testować stan licznika w rejestrze TIFR

Aaa... fakrycznie. Późna pora już była i coś mi się pozajączkowało :-)

Pozdrawiam Grzegorz

Grzegorz Kurczyk zeznal:

Tak myslalem. Ale tej diodce to juz dam spokoj :) To jest ogolnie moj debiut na avr. Uklad dziala, programator tez, teraz bedzie sie mozna skupic na zadaniu.

Dzieki za pomoc i pozdrawiam

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required