Bezieht sich die delay - Funktion vielleicht auf eine bestimmte Quarzfrequenz?
Also ich habe mir mit den Funktionen aus delay.h eine simple waitms() Funtkion geschrieben. Damit wollte ich auf meinem RNControl die LEDs im Sekunden Takt an und wieder ausschalten. Und das eine halbe Minute.
mit waitms(1000) dauerte es aber fast doppelt solange als fast eine Minute. Gestoppt habe ich einfach mit nem Funkweker den ich daneben gestellt hab. Durch rumrechnen und probieren ging es dann endlich mit
waitms(647) das das ganze wirklich fast auf die Sekunde genau eine halbe Minute dauert. Anscheinend verbrauchen die for Schleifen fast die hälfte der Zeit. Meine Frage ist jetzt eigentlich ob ich in der Funktion
waitms() nicht einfach die Variable ms mit 0,647 multiplizieren kann.
Gruß Muraad
Bezieht sich die delay - Funktion vielleicht auf eine bestimmte Quarzfrequenz?
Ja tut mir leid hab ich vergessen zusagen. Ist für 16Mhz. Die Berechnung steht aber im Quelltext und müsste sich für 4Mhz und 8Mhz ziemlich leicht ändern lassen.
Muraad
In deiner Funktion Waitms läufst du 1000 mal durch eine For-Schleife, die delay_loop_2(4) ausführt. Der Fehler durch die zusätzliche Zeit, die die Schleife benötigt(könnte man ja testweise mal messen), ließe sich geringer halten, wenn du 100mal delay_loop_2(40) nähmest(ich glaube, du könntest sogar ganz ohne for delay_loop_2(4000) schreiben(die Variante, die bei GCC dabei ist, hat int als Parameter.).).
it works best if you plug it (aus leidvoller Erfahrung)
Du könntest einen Timer verwenden. Dann ist die Zeit "exakt".
Frag aber nicht wie, ich bin gerade auch am rätseln.
Erstmal danken Gottfreak. delay_loop_2(4000), eigentlich zu einfach, hät ich echt selber sehen können. (*,)
Ach und TillHoffmann, du musst den gewünschten Timer nur mit Prescaler und vielleicht richtigen Startwert auf die gebrauchte Frequenz bringen, so dass der Timer z.B. alle 1ms überläuft. Wenn du willt kann ich dir mal ein Windows Programm (rnavr.zip) mailen das ich hier irgendwo im Forum gefunden hab, aber nicht mehr weis wie der Link war. Das Programm berechnet dir bei gegebenen Parametern die Richtigen Werte (für Prescaler usw.)
z.B. bei XMhz, TimerX soll Xmal in der Sekunde überlaufen.
Gruß Muraad ]
Hallo muraad,
vielen Dank für das Angebot, aber bei mir funktionieren die Timer jetzt schon.
Aber ich hab eine Abweichung vom 10%. Katastrophe. Und ich wollte eine Uhr programmieren
Tja, dann hast du entweder den internen Oszillator verwendet oder Fehler beim Programmieren gemacht. Gib genauere Angaben zu deinem Programm und der verwendeten Hardware und dir wird geholfen.
Gruß, Alex
Oder dein Quarz hat einfach die Falsche Hertz Zahl. Dann ist es egal wie man den Timer einstellt und es kommt nie ne 100% sek,ms,us was auch immer Teilung raus.
Lesezeichen