"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

Reply to
Szymon Kubicki
Loading thread data ...

Robert Z. zeznal:

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

pozdrawiam

Reply to
Szymon Kubicki

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

Reply to
Grzegorz Kurczyk

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

Reply to
Szymon Kubicki

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

Reply to
Grzegorz Kurczyk

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

Reply to
Szymon Kubicki

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.