Forum: Mikrocontroller und Digitale Elektronik Arduino Mega CTC - Timer mode


von Florian D. (Firma: HTL) (flowdrucka64)


Angehängte Dateien:

Lesenswert?

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
von gertl (Gast)


Lesenswert?

Wie stehen denn die Fuses? Sieht fast so aus, als wenn der Mega2560 nur 
mit 1MHz läuft.

von Frickelfritze (Gast)


Lesenswert?

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".

von Dieter F. (Gast)


Lesenswert?

Florian D. schrieb:
> Allerdings messe ich in der Simulation 16ms.

Was ist denn das für eine Simulation?

von spess53 (Gast)


Lesenswert?

Hi

Ist zwar nicht dein Fehler

>    OCR1A = 250;

aber der korrekte Wert ist 249.

Mit welchem Takt läuft deine Simulation?

MfG Spess

von Florian D. (Firma: HTL) (flowdrucka64)


Lesenswert?

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!

von Florian D. (Firma: HTL) (flowdrucka64)


Lesenswert?

wie würde ich das lösen ?

von gertl (Gast)


Lesenswert?

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.

von Dieter F. (Gast)


Lesenswert?

Florian D. schrieb:
> wie würde ich das lösen

Gibt es ein Proteus-Forum? Oder nutzen ggf. andere Arduino-Nutzer (-> 
Forum) Proteus?

von Florian D. (Firma: HTL) (flowdrucka64)


Lesenswert?

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

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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
Noch kein Account? Hier anmelden.