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