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
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 :-)
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
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...
Vergiß den Wizard, laß doch einfach den Compiler rechnen: http://www.mikrocontroller.net/forum/read-4-57760.html#new Peter
@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!
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!
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.