Forum: Mikrocontroller und Digitale Elektronik Timer (1 Sekunde) in CodeVision


von Michael B. (Gast)


Lesenswert?

Hallo!

Ich möchte mir gerne bzw. ich habe mir eine Uhr in CodeVision
programmiert. Nun habe ich leider das Problem mit den
Timer-Einstellungen. Kann mir vielleicht jemand weiterhelfen, mit
welchen
Einstellungen man möglichst eine Sekunde generieren kann?

Vielen Dank schon mal!

Michael

von crazy horse (Gast)


Lesenswert?

Was hast denn schon gemacht?

von Michael B. (Gast)


Lesenswert?

Ich habe eine ms generiert. Habe im Wizard eine Freuquenz von 57,5 kHz
eingegeben und einen Hex-Wert (C7) ausgerechnet. Wenn ich das ganze
aber in meinem Programm mit 1000 multipliziere, habe ich einen ganz
schön großen Fehler. Jetzt würde ich eben gern 1 Sekunde generieren,
weiß aber nicht so ganz, wie ich das hinbekommen soll :-)

von crazy horse (Gast)


Lesenswert?

Stell doch bitte mal das Programm ein.

von Jens D. (jens) Benutzerseite


Lesenswert?

am genauesten bekommst du das mit einem externem uhrenquarz hin, den
timer laesst du dann auf diesem quarz triggern..

Hier der code in c

//Interupt Timer 2 overflow
SIGNAL (SIG_OVERFLOW2) {
  sekunden++;
}


  //Timer2 Initalisieren Interupt jede Sekunde Externer Uhrenquarz
  ASSR = (1<<AS0);          //Externer Takteingang
  TCCR0 = (1<<CS02) | (1<<CS00);
  TCNT0 = 0x00;
  OCR2 = 0x00;            //Compare Register
  TIFR = (1<<OCF2) | (1<<TOV2);
  TIMSK = (1<<TOIE2);
  sei();

ist für einen mega16 bei anderen kann es sein, dass der timer
ungestellt werden muss bei verwendung eines externen quarzes

Gruss Jens

von Michael B. (Gast)


Angehängte Dateien:

Lesenswert?

Hier das Programm, aber ist nur das Grundgerüst, hab die die
Uhreistellungen weggelassen... Aber auf alle Fälle Hab ich nach einer
Stunde schon einige Sekunden Abweichung...

von Michael B. (Gast)


Lesenswert?

Hab vergessen, dass ich das STK500 mit einem 8515 verwende...

von Peter Dannegger (Gast)


Lesenswert?

Vergiß den Wizard, laß doch einfach den Compiler rechnen:

http://www.mikrocontroller.net/forum/read-4-57760.html#new


Peter

von Michael B. (Gast)


Lesenswert?

Super! Ich danke Euch! Tolles Forum!

von Rolf Meinert (Gast)


Lesenswert?

@Peter:

Ich habe das gleiche Problem wie Michael. Habe mir Dein Programm
angesehen, nur funktioniert es mit dem CVAVR leider nicht.
Aber vielleicht kannst Du mir ja bei der Berechnung helfen, da Du dich
mit den Timern wohl besser auskennst. Ich sage Dir mal, wie ich die
Zeiten bzw. Einstellungen berechne, vielleicht kannst Du mir dann
helfen, eine Sekunde daraus zu bilden:

Es stehen folgende Frequenzen zur Verfügung: 3,68 MHz, 460 kHz, 57,5
kHz, 14,375 kHz, 3,59 kHz

Ich wähle 3,59 kHz. 1 Takt = 1 / 3,59 kHz = 278,26 Mikrosekunden

256 Takte: 278,26 mikrosek. * 256 = 71,23 ms

Ich möchte aber z.B. 50 ms bilden:

256 Takte ---> 71,23 ms
3,59 Takte ---> 1 ms
179,69 Takte ---> 50 ms

256 - 179,69 = 76,3 Takte ---> in Hex: 4C

Das wären die Einstellungen für den CVAVR. Jetzt hab ich einen
Basistakt von 50 ms. Wenn ich das jetzt in meinem Programm mit 20
multipliziere, um auf meine Sekunde zu kommen, hab ich ja praktisch 20
mal eine Abweichung in meiner Sekunde.
Schon mal Danke für Deine (evtl. Eure) Hilfe!

Gruß vom Rolf!

von Programmer (Gast)


Lesenswert?

Ich denke, daß Du da einen 16-Bit Timer brauchst, weil die die 256 Takte
nicht ausreichen, wie Du den in CodeVision programmierst, kann Dir aber
vielleicht jemand anderes sagen...

Grüßle aus dem Schwabenländle!

von Peter Dannegger (Gast)


Lesenswert?

@Rolf

"Habe mir Dein Programm angesehen, nur funktioniert es mit dem CVAVR
leider nicht."


Kannst Du da mal konkreter werden (Zeile, Fehlermeldung) ?


Was willst Du denn mit den vielen Takten, brauchst Du die wirklich alle
?


Peter

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.