Avr studio, atmega32 - neodhalitelný problém ?
Bear John Grills
bear.j.grills@gmail.com
Neděle Duben 12 19:41:12 CEST 2009
Ano mám..
a pokud tento kus kódu dám do hlavní smyčky, funguje jak má.. je to asi
chyba kompilátoru, nebo nevím.
Zdeněk lada napsal(a):
> Dobrý den,
>
> Máte PORTA definován jako výstupní pomocí DDRA? Jen takový nápad.
>
> Zdeněk
>
> 2009/4/12 Bear John Grills <bear.j.grills@gmail.com
> <mailto:bear.j.grills@gmail.com>>
>
> Zdravim,
> cele odpoledne, vlastne, cely dnesni den se tady trapim s nesvary
> meho
> programu ktery pisu pro atmega32 v avr studiu v c.
> Na portu A mam 3x spolecne katody segmentovek(3) ktere jsou spinane
> tranzistorem. Takze od pa0 az po pa2 ridim log. jednickou, jaka z nich
> se ma rozsivit.
> Pravidelne obnovovani resim timer/counterem.
> JENZE.
> V simulatoru(debuggeru) vse ok. Nejdrive se vynuluji ty 3 bity a
> nasledne se pomoci bit. posunu aplikuje na jeden z nich log. 1, ktera
> tam beha z prava do leva.
> Jenze idylku vam zkazi az to, kdyz vysledek nakopnete do
> mikroprocesoru.
> Poslouzi ukazka toho kodu. Takto naprosto neefektivne, prasacky
> napsany
> kod je vysledek vylucovaci metody hledani problemu.
>
> volatile int display_i = 1; // cislo ukazujici na vybranou segmentovku
> (pokusne cislo jedna jako vychozi) (pozn. i kdyz tam neni volatile
> porad
> to dela to same)
> ......
> ISR(TIMER0_OVF_vect) // TC0 overflow
> {
>
>
> PORTA &=~(0x7);
> asm("nop");
>
> if(display_i==0) {
> PORTA = 0x1;
> display_i = 1;
> }
> else if(display_i==1) {
> PORTA = 0x2;
> display_i = 2;
> }
> else if(display_i==2) {
> PORTA = 0x4;
> display_i = 0;
> }
>
> TCNT0=0x00;
> }
>
>
> Jak jsem rekl, v simulatoru OK. Ale pokud je to v prociku, nepracuje
> to.. zůstane "blikavě(střídavě, tak jak mají svítit i ostatní)" svítit
> pouze ta segmentovka prostřední, čili číslo jedna. (mám je
> "číslované" z
> prava od 0). A zjistil jsem, co je ten problém..
> Ten výraz PORTA &=~(0x7);.
> Pokud tam není, segmentovky se střídají a svítí všechny jak mají.
> Jak může mít ten výraz vliv na to, že se to celé "sekne" na te
> prostřední segmentovce? To mi nejde na rozum!
>
> Prostě pokud tam je PORTA &=~(0x7);, tak to skace do tech vetvi
> jak ma,
> ale pokud to neni vetev, do ktere se da skocit pokud
> display_i==naprosto
> původní hodnota(v našem případě ta jednička), neaplikuje to to PORTA =
> 0x1;(např.)
>
> Čím to může být?
> Jsem z toho vazne jelen..
>
> Díky
> Bear
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz <http://www.HW.cz>
> Hw-list@list.hw.cz <mailto:Hw-list@list.hw.cz>
> http://list.hw.cz/mailman/listinfo/hw-list
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
Další informace o konferenci Hw-list