Hallo, Ich wollte einen 1ms High, 1ms Low clock mit meinem Arduino Mega realisieren. Allerdings messe ich in der Simulation 16ms. Ich habe mehrere Male den Code und die Register überprüft, dennoch will es nicht klappen... Ich hoffe ihr entdeckt den Fehler und könnt mir damit weiterhelfen. Lg Note : für den Arduino Uno Controller klappt der Code in der Simulation problemlos. -----------------CODE------------------------ #ifndef F_CPU #define F_CPU 16e6 #endif #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdbool.h> #include <math.h> #include <stdbool.h> void timer1_init() { // set up timer with prescaler = 64 and CTC mode TCCR1B |= (1 << WGM12)|(1 << CS11)|(1 << CS10); // initialize counter TCNT1 = 0; // initialize compare value //=> 1ms OCR1A = 250; // enable compare interrupt TIMSK1 |= (1 << OCIE1A); // enable global interrupts sei(); } ISR (TIMER1_COMPA_vect) { // toggle led here PORTD ^= (1 << 0); } int main(void) { //led-pin init DDRD |= (1 << 0); // initialize timer timer1_init(); while(1) { } } ----------CODE ENDE--------
:
Bearbeitet durch User
Wie stehen denn die Fuses? Sieht fast so aus, als wenn der Mega2560 nur mit 1MHz läuft.
Florian D. schrieb: > Allerdings messe ich in der Simulation 16ms. In der Realität kommen aber auf einem Arduino Mega auch wirklich 1ms heraus. ..... laut meiner "Realitätsprüfung".
Florian D. schrieb: > Allerdings messe ich in der Simulation 16ms. Was ist denn das für eine Simulation?
Hi
Ist zwar nicht dein Fehler
> OCR1A = 250;
aber der korrekte Wert ist 249.
Mit welchem Takt läuft deine Simulation?
MfG Spess
die Simulation läuft so schnell, dass wenn ich main() einen Ausgang Toggle, ich ein Signal mit 12µs High und 12µs Low bekomme. Die Simulation führe ich in Proteus durch. Habe bislang auf dem Arduino Uno programmiert und da war der schnellste verwendete Takt bei 250µs. Vielen Dank für die schnellen Antworten!
Florian D. schrieb: > wie würde ich das lösen ? spess53 schrieb: > Ist zwar nicht dein Fehler >> OCR1A = 250; > aber der korrekte Wert ist 249. > > Mit welchem Takt läuft deine Simulation? Den richtigen Takt einstellen.
Florian D. schrieb: > wie würde ich das lösen Gibt es ein Proteus-Forum? Oder nutzen ggf. andere Arduino-Nutzer (-> Forum) Proteus?
es geht mir weniger um die Simulation per se, da ich für mein Projekt im Endeffekt Taktzeiten von 250µs brauche und Proteus bei allen Zeitintervallen unter 1ms eh ungenau wird. Es ging mir eher darum festzustellen, wie man den Timer und Prescaler richtig einstellt um das anschließend auf die Taktzeit von 250µs anpassen zu können. Wenn ihr mir also versichern könnt, dass der Fehler als solcher rein in der Simulation auftritt und das ganze wenn ich es demnächst an ein echtes Oszilloskop anhänge, funktioniert bin ich 100% glücklich. :D
Florian D. schrieb: > Wenn ihr mir also versichern könnt, dass der Fehler als solcher rein in > der Simulation auftritt und das ganze wenn ich es demnächst an ein > echtes Oszilloskop anhänge, funktioniert bin ich 100% glücklich. :D Ich versichere es dir, aber wie spess53 schon schrieb: > aber der korrekte Wert ist 249.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.