"hello world" avr - pytanie
Szymon Kubicki - 14-12-2006 22:45
"hello world" avr - pytanie 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
--
Szymon
Robert Z. - 14-12-2006 22:45
Użytkownik "Szymon Kubicki" <Szymon@no.spam.terror.org.pl> napisał w
wiadomości news:slrneo3gd0.css.Szymon@terror.icm.edu.pl...
.....
>
> 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
>
> --
> Szymon
Zapewne przeszkadza JTAG. Wylacz jego obsluge naprzyklad za pomoca fusebitu
JTAGEN.
pozdrawiam
Szymon Kubicki - 15-12-2006 00:45
Robert Z. zeznal:
>
> Zapewne przeszkadza JTAG. Wylacz jego obsluge naprzyklad za pomoca fusebitu
> JTAGEN.
Nie napisalem ze to atmega8 w zwiazku z tym nie mam takiego bitu.
pozdrawiam
--
Szymon
Grzegorz Kurczyk - 15-12-2006 01:45
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
Szymon Kubicki - 15-12-2006 07:46
Grzegorz Kurczyk zeznal:
>
> 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:
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?
> loop:
>
> sbic PINB,1
> sbi PORTC, PORTC5
> sbis PINB,1
> cbi PORTC, PORTC5
> rjmp loop
Dziala :)
Aczkolwiek wczesniejsza wersja wykorzystywala skoki do etykiet i tez
sprawdzalem PINx i nie dzialalo. Ale teraz dziala, dzieki :)
> Jeszcze jedna sprawa mnie dziwi w tym przykładowym programie. Nie
> inicjalizujesz wartości rejestru OCR1A.
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
--
Szymon
Grzegorz Kurczyk - 15-12-2006 08:45
Użytkownik Szymon Kubicki napisał:
> 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?
Przerwania aż się proszą :-)
Ewentualnie testować stan licznika w rejestrze TIFR
> Dziala :)
> Aczkolwiek wczesniejsza wersja wykorzystywala skoki do etykiet i tez
> sprawdzalem PINx i nie dzialalo. Ale teraz dziala, dzieki :)
>
>
>>Jeszcze jedna sprawa mnie dziwi w tym przykładowym programie. Nie
>>inicjalizujesz wartości rejestru OCR1A.
>
>
> No bo to w sumie nie tryb CTC tylko normal (WGM1.3-0 = 00).
Aaa... fakrycznie. Późna pora już była i coś mi się pozajączkowało :-)
Pozdrawiam
Grzegorz
Szymon Kubicki - 15-12-2006 09:45
Grzegorz Kurczyk zeznal:
> Użytkownik Szymon Kubicki napisał:
>> 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?
>
> Przerwania aż się proszą :-)
> Ewentualnie testować stan licznika w rejestrze TIFR
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
--
Szymon
zanotowane.pldoc.pisz.plpdf.pisz.plkonstruktor.keep.pl