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