Guten morgen.
Ich habe einen Atmega 8 den ich mit 16Mhz betreibe.
Das wäre aufhedenfall der Wunsch.
Mit Hilfe des Timers null löse ich alle 0.01ms einen Interrupt aus.
Code:
F_CPU = 16000000
timer = (256-F_CPU/8/100000)
TCCR0 |= (1<<CS01) | (!(1<<CS00)) | (!(1CS02));
TCNT0 = timer;
TIMSK |= (1<<TOIE0);
TIFR |= (1<<TOV0);
Setzte den Pin auf High
Anschliessen zähle ich pro Interrupt eine Variable hoch bis 150.
Setzte den Pin auf Low und lösche die Variable.
Das sollte mir ein Rechtecksignal von 1.5ms geben.
Leider stimmts nicht genau(Zeitlich), woran könnte das lieben.
Falsche Fusebit einstellungen?
Ich bin mir dort nicht ganz sicher wie man 16Mhz einstellt.
Danke fürs lesen und mögliche Tipps
EDIT:
Ich glaube mein ATMEGA läuft wirklich nicht auf 16Mhz.
Ich habe ihn jetzt so eingestellt.
16Mhz / 8(Prescaler) = 2Mhz
Ich möchte alle 0.01ms einen Interupt
1s/0.00001 = 100000
2000000 / 100000 = 20
256 (8Bit)-20 = 236 (Vorladen)
Wen ich nun den Pin für 150 Interupts auf High lege sollte das doch 1.5ms erben?
Ich kriege aber ein High von 2ms???
Oder mein Oszi stimmt überhaupt nicht mehr, was ich aber nicht glaube.
Lesezeichen