Quarz am MEGA16

Gast #788820
Lesenswert?
• ▲
▼
Hallo,

Ich hab ne Schaltung aufgebaut für nen Mega16L8, Funktioniert eigentlich 
auch bis auf den Takt... zur testen hab ich ne LED am PB und versuch Sie 
so zum blinken zu bringen :
1
#include <avr/io.h>
2

3
int main()
4
{
5
    DDRB = 0b00010000;
6
    PORTB = 0b00010000;
7
    int i=0;
8
    
9
    while(1)
10
    {
11
      PORTB = 0;
12
      for (i=0;i<=10000;i++);
13
      PORTB = 0b00010000;
14
      for (i=0;i<=10000;i++);
15
    }
16

17
  return 0;
18
}

Die LED ist aber immer nur an... die for-schleife zu verlängern bringt 
auch nichts...

Hab ein 8MHz Quarz dran und mit 22pF an masse...
fusebits sind auf
"Ext.Crystal/Resonator Hight Freq.; Start-up time 1k ck + 0ms"
#788839
Lesenswert?
• ▲
▼
Grob gesagt: das 'volatile' sagt dem Compiler, dass die Variable u.U. 
ausserhalb seiner direkten Kontrolle (z.B. durch eine ISR, oder weil es 
ein Portregister ist, ...) verändert werden KÖNNTE, und zwingt ihn dazu 
jeden Zugruiff darauf auch wirklich durchzuführen.

Ohne das 'volatile' merkt der Optimierer, dass Deine Zählschleife 
eigentlich nichts bewirkt (ein Zeitgefühl haben CPUs (noch? ;-) nicht) 
und optimiert die kurzerhand zu "i=10000". Damit blinkt's dann doch ein 
klein wenig zu schnell für unsere (um diese Zeit) müden Äuglein...


@Falk:
Delay-Funktionen oder gar Timer kommen doch erst in den nächsten 
Lektionen ;-))))
Gast #788845
Lesenswert?
• ▲
▼
Ja,

also ich hab AVR Studio erst wieder neu installiert vorher hatte ich die 
Code optimierung ausgeschaltet... hab ich jetzt auch wieder gemacht, 
niemand pfuscht in meinem Code rum :)

endlich kann ich weiterlöten, dachte schon ich hab was falsch gemacht :)

Vielen Dank nochmal, finds echt klasse dass ich hier immer in so kurzer 
Zeit so viele Antworten hab :)

Gute Nacht
Gast #788888
Lesenswert?
• ▲
▼
Ehrlich gesagt wundert es mich, dass es geht. Bei 16MHz  10000  2 
komme ich auf 800Hz. Ich hab jetzt nicht die Zyklen für einen 
Schleifendurchlauf gezählt. Aber wenn ich nur 10 annehme, bleiben immer 
noch 80Hz. Mein Auge würde das nicht mehr auflösen und ich würde eher 
von einer PWM mit 50% Tastverhältnis sprechen.
Oder mache ich da einen Gedankenfehler???
Gast #789693
Lesenswert?
• ▲
▼
hatte ja geschrieben dass eine erhöhen der Zählschleife nichts nützt... 
und auch mit 10 000 seh ich ein deutliches Blinken... zwar schnell aber 
es ist bestimmt noch kein flimmern...

Der Fehler lag eindeutig an der Quelltextoptimierung vom AVR-Studio...

gruß
Gast #789722
Lesenswert?
• ▲
▼
Wenn Du ein deutliches Blinken siehst, würde ich mal nachsehen, ob auch 
wirklich der externe Quarz verwendet wird. Mir scheint es eher, dass der 
Controller auf dem internen 1MHz clock läuf - ist aber nur eine Idee.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren