Forum: Mikrocontroller und Digitale Elektronik Quarz am MEGA16


von Martin (Gast)


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"

von Stefan W. (wswbln)


Lesenswert?

...Anfängerfehler Nr. 4 (oder ähnlich weit vorne)

Probier's mal mit: volatile int i;

(Mach' Dir nichts draus - den Fehler haben fast alle mal gemacht :-))

von Martin (Gast)


Lesenswert?

oha,

davon hab ich noch nie gehört, hab bisher alle Zählvariablen nur mir int 
deklariert, was ist denn der unterschied?

und vielen Dank schon blinkts...

Gruß Martin

von Falk B. (falk)


Lesenswert?

@ Stefan Wimmer (wswbln)

>...Anfängerfehler Nr. 4 (oder ähnlich weit vorne)
>Probier's mal mit: volatile int i;

Oder noch besser. Vergiss die Schleifen, nimm dir richtigen Funktionen.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Warteschleifen_.28delay.h.29

MFG
Falk

von Martin (Gast)


Lesenswert?

habs kapiert :)

Wenn ich die Codekomprimierung des Compilers abschalte gehts auch :)
mensch war das doof :)

Gruß

von Stefan W. (wswbln)


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 ;-))))

von Martin (Gast)


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

von Matthias Kölling (Gast)


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???

von Matthias Kölling (Gast)


Lesenswert?

Sorry, hab die 8 MHz überlesen, macht dann 40Hz also Flimmern. Eine 
Stubenfliege könnte das Blinken noch auflösen.

von Martin (Gast)


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ß

von Falk B. (falk)


Lesenswert?

@ Martin (Gast)

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

Der Fehler sass vor der Tastatur . . .

duckundwech
Falk

von Martin (Gast)


Lesenswert?

grrrr... naja aber so könnte es auch gewesen sein...

von Matthias Kölling (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.