Szymon Kubicki
Guest
Thu Dec 14, 2006 10:41 pm
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.
Guest
Thu Dec 14, 2006 10:41 pm
Użytkownik "Szymon Kubicki" <Szymon@no.spam.terror.org.pl> napisał w
wiadomości news:slrneo3gd0.css.Szymon@terror.icm.edu.pl...
.....
Quote:
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
Guest
Fri Dec 15, 2006 12:40 am
Robert Z. zeznal:
Quote:
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
Guest
Fri Dec 15, 2006 12:56 am
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
Guest
Fri Dec 15, 2006 7:40 am
Grzegorz Kurczyk zeznal:
Quote:
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?
Quote:
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 :)
Quote:
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
Guest
Fri Dec 15, 2006 8:29 am
Użytkownik Szymon Kubicki napisał:
Quote:
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
Quote:
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
Guest
Fri Dec 15, 2006 9:40 am
Grzegorz Kurczyk zeznal:
Quote:
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