Hallo Gemeinde Ich suche einen vernünftigen und nachvollziebaren Weg zur Berechnung der Freueunz/zeit beim Timer. Gegeben: 16 MHz / 8 MHz Quarz CTC Gesucht: Zeit/Impuls 1ms 10ms 25ms Notwendig: Prescaler Preloader Im Netz habe ich schon verschiedene Methoden zur Berechnung gefunden. Leider sind die wenigsten einfach nach zu vollziehen. Fosc Prescaler = ------------------------------ 4 x Timer x (256 - Preload) Habe z.B. diese umgestellte Formel gefunden. Leider verstehe ich nicht wo die 256 herkommen und wieso 4 x Timer. Woher kommt Preload? Einige Klarheit hat FAQ Timer gebracht, leider nicht alles. Könnte es mir jemand erklären? achim
Hi >Habe z.B. diese umgestellte Formel gefunden. Leider verstehe ich nicht >wo die 256 herkommen und wieso 4 x Timer. Für welchen Controller soll die gut sein? Für AVRs ist ein Preload unsinnig und die möglichen Prescaler sind auch nicht für jeden Timer gleich. MfG Spess
Ich verwende einen AT1284p uns schreibe mit C. In einigen Projekten verwende ich z.B. die Entprellung von PD. Dabei arbeite ich mit 1ms und 10ms. Leider kann ich mir nicht so richtig erklären, wie es berechnet wird achim
Lies mal FAQ: Timer Wahrscheinlich denkst du nur einfach viel zu kompliziert. Denn im Grunde kriegt das jeder Grundschüler hin, der bereits mit Minuten und Sekunden den richtigen Ansatz hat.
Achim Seeger schrieb: > > Fosc > Prescaler = ------------------------------ > 4 x Timer x (256 - Preload) > > Habe z.B. diese umgestellte Formel gefunden. Die ist auch Quatsch. Denn den Prescaler kannst du auf einem AVR nicht einfach ausrechnen. DIe Prescaler sind dir aufs Auge gedrückt. Du kannst dir einen aus den verfügbaren aussuchen, mehr aber auch nicht. > Leider verstehe ich nicht > wo die 256 herkommen Wenn in der Informatik irgendwo 256 auftaucht, dann kannst du deinen Allerwertesten darauf verwetten, dass das in irgendeiner Form was mit 8 Bit bzw. der Tatscache zu tun hat, dass 2 hoch 8 die 256 ergibt. > und wieso 4 x Timer. Lass mich raten. Das ist für einen anderen Prozessor und nicht für einen AVR > Woher kommt Preload? Preload willst du nicht. Dazu gibt es ja den CTC Modus. > Einige Klarheit hat FAQ Timer gebracht, leider nicht alles. Was ist denn unklar?
Gut, versuchen wir mal einfach zu denken. Der Prescaler ist vorgegeben. Muss mir nur den richtigen aussuchen. Nehmen wir mal an, ich will bei einem Quarz von 8 MHz und 16 MHz einen Impuls von 1ms haben. Es stehem mir Prescaler mit 2,4,8,16,32,64,128 und 256 zur Verfügung. Ich kann meine Q-frequenz damit teilen in Abhängigkeit von 8 oder 16. Da muss ich dann solange probieren bis ich in meinen Bereich komme. Geht das nicht einfacher? Werde mir den FAQ Timer noch mal vornehmen. Wahrscheinlich sehe ich alles zu kompliziert, bin aber neugierig achim
Achim Seeger schrieb: > Gut, versuchen wir mal einfach zu denken. > Der Prescaler ist vorgegeben. Muss mir nur den richtigen aussuchen. > Nehmen wir mal an, ich will bei einem Quarz von 8 MHz und 16 MHz einen > Impuls von 1ms haben. > Es stehem mir Prescaler mit 2,4,8,16,32,64,128 und 256 zur Verfügung. > Ich kann meine Q-frequenz damit teilen in Abhängigkeit von 8 oder 16. Da > muss ich dann solange probieren bis ich in meinen Bereich komme. Geht > das nicht einfacher? ja. Du hast ganze 8 mögliche Teiler zur Verfügung. 1 wird es nicht sein. Denn ein 8 Bit Timer kann nur bis 255 zählen. Treibst du den mit 8Mhz an, dann brauch ich gar nicht rechnen um zu wissen, dass der wesentlich schneller bei 256 angelangt ist, als in 1ms. Aber ich kann ja zurückrechnen. Um wieviel muss ich die 8Mhz (8 Millionen Pulse pro Sekunde) 'untersetzen', damit 256 Pulse 1 Millisekunde dauern? Oder anders ausgedrückt: Wenn ich dem Timer zugestehe, in 1 Millisekunde bis 255 zählen zu dürfen, wie weit kommt er dann in 1 Sekunde? Easy. 256 mal 1000 (weil ja 1 Sekunde 1000 Millisekunden hat). Das sind 256000. So schnell darf der Timer also zählen, damit sich meine Zeitvorgabe erfüllt. Tatsächlich zählt er aber 8000000 Pulse pro Sekunde. Um wieviel muss ich ihn daher untersetzen. Um einen Faktor 8000000 / 256000. Die 0-en Kürzen und es bleibt 8000 / 256. Ausgerechnet ist das 31.25 Das wäre also mein idealer Teilerfaktor (Prescaler). Wenn es den gäbe, dann würde dieser Timer in genau 1 Millisekunde bis 255 zählen. Nur blöderweise gibt es den nicht. Ein kleinerer Teilerfaktor ist sinnlos, dann dann zählt der Timer ja schneller. Also nehm ich den nächst größeren. Das ist 32. Super. Jetzt rechnen wir in die umgekehrte Richtung. Bei einem Prescaler von 1 würde der Timer 8000000 Pulse pro Sekunde zählen. Mit einem Prescaler von 32 schafft er nur noch 8000000/32 = 250000 Schön. Wenn der Timer also in 1 sekunde bis 250000 zählen würde, wie weit kommt der dann in 1/1000 davon, in 1 Millisekunde? Na bis 250000/1000 = 250. D.h. Ich muss den Timer so einstellen, dass er jeweils nur bis 250 zählt. Dann hab ich bei 8Mhz Taktfrequenz und einem Vorteiler von 32 es so eingerichtet, dass dieses 250 Pulse abzählen genau 1 Millisekunde dauert. Was ist da jetzt schwer drann? Das ist nicht mehr als rechnen auf Grundschulnniveau und (wie immer) ein bisschen Dreisatz.
Hi >Es stehem mir Prescaler mit 2,4,8,16,32,64,128 und 256 Aber nicht bei AVRs. Da gibt es 1, 8, 64, 256 und 1024 oder 1, 8, 32, 64, 128, 256 und 1024. MfG Spess
Achim Seeger schrieb: > Es stehem mir Prescaler mit 2,4,8,16,32,64,128 und 256 zur Verfügung. Aber nicht auf deinem 1284. Oder etwa doch? Ich ahne gerade Böses. Von dem Prescaler lässt du schön die Finger. Den hast du noch nie gesehen, den gibt es gar nicht. mfg.
Thomas Eckmann schrieb: > Achim Seeger schrieb: >> Es stehem mir Prescaler mit 2,4,8,16,32,64,128 und 256 zur Verfügung. > > Aber nicht auf deinem 1284. > Oder etwa doch? Ich ahne gerade Böses. ? (Timer 2 mit asynchronem Takt? Hab nicht im DB nachgesehen)
So schwer ist das nicht: du hast deine Taktquelle, die wird durch den Prescaler geteilt, dann hast du deine Zählerfrequenz. Diese wird dann noch durch die Zählergröße (8-bit-Zähler 2^8= 256, 16-bit eben 2^16) geteilt und dann hast du deine überlauffrequenz, mit der z.B. eine ISR aufgerufen wird. Im CTC-Mode nimmst du nicht die Zählergröße sondern den Wert, den du ins OCRx-Register schreibst (maximal Zählergröße). Gerade deswegen eignet sich der CTC-Mode für solche Timing-Geschichten. Demnach ist die Formel F_osc / (prescaler * OCRx) = F_isr dann nur nach OCRx umstellen, denn F_isr ist gegeben. Ich leg mir da eine Excel-Tabelle an, sodaß OCRx für jeden Prescaler berechnet wird. dann einfach schauen, bei welchen Prescalerwerten OCRx in deine Zählergröße passt. Das sind die möglichen Prescaler, die du nutzen kannst. Bei mehreren kannst du noch überlegen, welcher geschickter ist, manchmal spielt die Genauigkeit eine Rolle.
Thomas Eckmann schrieb: > Karl Heinz schrieb: >> (Timer 2 mit asynchronem Takt? Hab nicht im DB nachgesehen) > Nee. > CLKPR Ah. Alles klar. Und ja. Finger weg. Das ist (in diesem Fall) der falsche Weg.
:
Bearbeitet durch User
Mullwark schrieb: > F_osc / (prescaler * OCRx) = F_isr nitpicking. (OCRx + 1) Denn auch der Überlauf vom OCR Wert auf 0 ist ein Zählschritt.
:
Bearbeitet durch User
Guten morgen, alle Fit? Da habe ich gestern wohl die falsche Tabelle gesehen. Sorry Der richtige Prescaler ist 8,32,64,128,256 und 1024 Diese unterscheiden sich die den einzelnen Timern: Timer 0 / 8 Bit CS02 CS01 CS00 0 0 0 kein Clock 0 0 1 no prescaling 0 1 0 8 0 1 1 64 1 0 0 256 1 0 0 1024 Timer 1/3 / 16 Bit CSn2 CSn1 CSn0 0 0 0 kein Clock 0 0 1 no prescaling 0 1 0 8 0 1 1 64 1 0 0 256 1 0 1 1024 Timer 2 / 16 Bit CS22 CS21 CS20 0 0 0 kein Clock 0 0 1 no prescaling 0 1 0 8 0 1 1 32 1 0 0 64 1 1 0 256 1 1 1 1024 Habe mal die Daten für die Timer zusammengesucht. Unterschieden sich alle ein bischen. achim
Hi >Timer 2 / 16 Bit >CS22 CS21 CS20 > 0 0 0 kein Clock > 0 0 1 no prescaling > 0 1 0 8 > 0 1 1 32 > 1 0 0 64 > 1 1 0 256 > 1 1 1 1024 Hier fehlt noch 1 0 1 128 >Unterschieden sich alle ein bischen. Bei drei Bit für CS gibt es acht Möglichkeiten. Timer2 hat, da kein externer Takt möglich ist, halt zwei Prescalerstufen mehr. Bei ATTinys mit PLL gibt es auch Timer mit 15 verschiedenen (+ Stop) Prescalerstufen. MfG Spess
Achim Seeger schrieb: > Ich suche einen vernünftigen und nachvollziebaren Weg zur Berechnung der > Freueunz/zeit beim Timer. > > Gegeben: > 16 MHz / 8 MHz Quarz > CTC > > Gesucht: > Zeit/Impuls 1ms 10ms 25ms Eine ganz einfache Lösung ist, einen 16-Bit Zähler mit /8 Vorteiler zu verwenden. Bei 8 MHz wird der Zähler mit 1µs getaktet und muß bis 1000, 10000 oder 25000 zählen, um genau die gewünschten Zeiten zu erhalten. Bei 16 MHz verdoppeln sich die Werte für den Zähler. Man kann auch einen Basistakt mit 1 kHz erzeugen und bei längeren Zeiten per Software jede gewünschte (auch ganz lange) Zeit durch Abzählen einer Variable im 1 ms Raster erhalten. Um den Zähler für andere Anwendungen nicht zu blockieren, läßt man ihn frei durchlaufen und verwendet ein Output-compare-Register, um zum gewünschten Zeitpunkt einen Interrupt zu erhalten. Im Interrupts selbst wird dann OCRx um die neue Periode erhöht. Überläufe sind dabei egal. ein kurzes Beispiel: #define MS_TEILER 1000 // bei 8 MHz mit /8 Vorteiler ISR(TIMER1_COMPA_vect) // wird mit 1000 Hz aufgerufen { OCR1A += MS_TEILER; .... }
Hallo Spess Du hast recht. Habe die 128 nicht eingetragen. Wenn ich alle 3 Tabellen nebeneinander lege, sehe ich den Unterschied recht deutlich Es geht dabei nicht um mich, sondern wie man Anfängern es plausibel erklären kann. Es gibt viele Beschreibungen im Netz. Bei einigen muss man schon einen Dr Titel haben, um es zu verstehen. Es soll einfach und plausibel sein, je einfacher etwas erklärt wird um si weniger Rückfragen gibt es. Hallo mn Genau so mache ich es auch bei meinen Timern. KH hat mich schon in diese Richtung geleitet. Ist eine einfache Lösung und gut. Denn Rest muss ich da zu noch formulieren. achim
Hallo Karl Heinz habe deinen Text durchgelesen. Ist einfach erklärt und verständlich. Es geht mir dabei nur um das einfache daran. Kompliziert erklären es auch andere. Es soll kurz und bündig und verständlich sein. Werde es so nehmen und noch ein bischen anpassen. Dann kann ich mich an das nächste Problem dazu machen. Danke an alle achim
Hallo so weit ist mir alles (viel) klar geworden. Bin jetzt aber auf eine kleine Lücke gestossen. Unterschied 8 Bit Timer und 16 Bit Timer Wenn ich ein Impuls von 1ms erzeugen will ist der 8 Bit Timer für mich am besten. Will ich aber einen Impuls von 10ms erzeugen könnte ich ja den 8 Bit oder 16 Bit Timer nehmen. Wie kann ich am besten ausrechnen welchen Timer ich nehme oder halt nicht? Gehe dabei nach dem Text von KH. achim
Achim Seeger schrieb: > Will ich aber einen Impuls von 10ms erzeugen könnte ich ja den 8 Bit > oder 16 Bit Timer nehmen. Wie kann ich am besten ausrechnen welchen > Timer ich nehme oder halt nicht? Indem du Excel benutzst.
Achim Seeger schrieb: > Hallo > so weit ist mir alles (viel) klar geworden. > Bin jetzt aber auf eine kleine Lücke gestossen. > Unterschied 8 Bit Timer und 16 Bit Timer Unterschied vom Zählen mit 5 Fingern versus dem Zählen mit 10 Fingern. > Wenn ich ein Impuls von 1ms erzeugen will ist der 8 Bit Timer für mich > am besten. Kann man so nicht sagen. > Will ich aber einen Impuls von 10ms erzeugen könnte ich ja den 8 Bit > oder 16 Bit Timer nehmen. Wie kann ich am besten ausrechnen welchen > Timer ich nehme oder halt nicht? Falscher Ansatz. Du nimmst das was du hast und was gut passt ohne dass du dich verrenken musst. Wenn du den 16 Bit Timer nicht anderweitig inkompatibel benutzt UND es sich mit den Zahlen gut ausgeht, dann nimmst du den auch. Wenn du absehbar in deinem Programm noch eine Funktionalität brauchst, bei der du den 16 Bit Timer gut gebrauchen kannst UND du dich mit den gewünschten 10ms nicht allzusehr in der Timerverwendung binden willst, dann nimmst du eben den 8 Bit Timer, wenn es sich mit den Zahlen einigermassen gut ausgeht, ohne dass du im Programm Verrenkungen machen musst. Rechnen ist schon wichtig. Aber manchmal entscheidet dann auch eben das Bauchgefühl und das Wissen, dass bei viel AVR der Timer 0 als 8 Bit Timer ein paar Dinge eben nicht kann. Ob das so ist und welche Dinge das sind, steht im Datenblatt. Geht es mir nur um ca 10ms für zb eine Entprellung UND geht sich mein Zahlenwerk bei 11.0592Mhz Taktfrequenz so aus, dass ich damit locker auf 8.5ms komme, dann werd ich wahrscheinlich auf einem Mega 8 den 8 Bit Timer 0 nehmen und mir den 'kostbareren' Timer 1 mit seinen PWM Möglichkeiten für was anderes aufheben. Brauch ich absehbar nichts anderes, oder reicht mir die banale PWM Möglichkeit des Timer 0, ist es gehupft wie gehatscht welchen ich nehme. Und ja. Es kommt durchaus auch vor, dass man zuerst mit einem Timer anfängt und es sich dann im Lauf der weiteren Entwicklung rausstellt, dass man keine gute Entscheidung getroffen hat, weil man bestimmte Fähigkeiten genau dieses Timers jetzt gut brauchen könnte. Dann disponiert man eben um und baut das vorhandene auf einen anderen Timer um. Du machst da jetzt Raketentechnik draus. Letzten Endes geht es um die Fragestellung: Fahr ich mit dem Smart oder mit dem Peugeot?
:
Bearbeitet durch User
Hallo KH Das mir dem kostbaren Timer habe ich mir im Moment gespart. Für den Anfänger ist das eine andere Sache. Es geht dabei wieder um das Grundlegende. Wenn ich z.B. für die Entprellung einen 10ms oder 20ms Timer nehme möchte ich es anpassen. Es geht auch die Version, von einem 1ms Timer alles andere ausrechen (mache ich jetzt). Deinen Text (weiter oben) habe ich umgesetzt in einen Text mit Formeln. Noc ein bischen dazu schreiben, dann stelle ich es hier rein. Doch wie stelle ich fest welcher am besten geeignet ist oder welchen ich nicht verwenden kann. Ein teil kann ich dazu ausrechen mit den Prescalern und den Wert ausreche. Dann kommt die Stelle, wo es mit beiden geht und dann die Stelle nur mit 16 Bit. Daraus resultieren die 3 Bereiche. Welcher wann verwenden oder eine Gegenrechnung dazu. Das mit Exel ist nicht schlecht. Möchte es aber zu Anfang alles per Fuss machen um das Verständnis zu bringen. Es gibt auch alle Möglichen Programme dazu. Man gibt die Werte ein, der Rest wird berechnet und angezeigt. Nach welchem Ansatz erfolgt die Berechnung? Das mit dem PWM kommt später, alles nach einander. Erst eine Sache verstehen, dann das nächste. achim
Marc Vesely schrieb: > Achim Seeger schrieb: >> Will ich aber einen Impuls von 10ms erzeugen könnte ich ja den 8 Bit >> oder 16 Bit Timer nehmen. Wie kann ich am besten ausrechnen welchen >> Timer ich nehme oder halt nicht? > > Indem du Excel benutzst. Damit es nicht beim nutzlosen Kommentar bleibt...
Hallo Forum nach der zahkreichen Hilfe, besonders von KH, möchte ich euch die einfache Erklärung zum Timer nicht vorenthalten. Habe versucht alles so einfach wie möglich darzustellen. Vielleicht kann jemand drüber schauen und es noch mal kontrollieren. Bestimmt sind einige Fehler drin oder falsch dargestellt. Bitte mal kontrollieren. Sorry, habe es als Text angehängt, damit jeder seine Änderungen anschreiben kann achim
Achim Seeger schrieb: > Timer_Erklaerung_Netz.docx (504 KB, 7 Downloads) Warum nennst du eine Zip-Datei ".docx"?
Marc Vesely schrieb: > Werner schrieb: >> Warum nennst du eine Zip-Datei ".docx"? > > Weil es ein Word Document ist. Ich zitiere aus der nagelneuen c't 26/2014 S.10 aus dem Leserbrief "Nicht die x-Formate nehmen": "Wer eine Standardistallation einer neueren Version von MS Office durchführt, erhält als Voreinstellung docx, xlsx und pptx sowie Schriftarten wie Cambria, die nicht freigegeben wurden und daher in anderen Office-Paketen nicht zu Verfügung stehen." Ich denke, hier ist es aus Unwissenheit passiert, aber eine für Alle lesbare Form wäre besser gewesen. Persönlich lehne ich es ab, anderen Dateiformaten 'hinterher zu rennen'.
Ich öffne meine Word Datein immer mit word. Ist einfach einfacher. Für zip Datein habe ich anderes Programm. Mach es einfach richtig rum, dann hast du auch keine Probleme mit dem Nachbarn
halbgarer Vollpfosten schrieb: > Ich denke, hier ist es aus Unwissenheit passiert, aber eine für Alle > lesbare Form wäre besser gewesen. Persönlich lehne ich es ab, anderen > Dateiformaten 'hinterher zu rennen'. Mit Office 2003 eingeführt. Seit Office 2007 ist es Standard. Mehr als 11 Jahre sind genug, finde ich.
Achim Seeger schrieb: > Mach es einfach richtig rum, dann > hast du auch keine Probleme mit dem Nachbarn Du hast doch gefragt. Eine einfaches .doc nachzuschieben kommt Dir nicht in den Sinn?
Achim Seeger schrieb: > Ich öffne meine Word Datein immer mit word. Ich versuche es immer mit OpenOffice, mit dem Ergebnis, dass völlig unmotiviert mitten auf vielen Seiten ein Strich mit "Board 1 Teil 3" auftaucht, was vermutlich in den Seiten-Header gehört.
Kein Problem, kommt in der anderen Version. Für die Zukuft, sage es mir einfach mit ein paar einfachen Worten ...
Achim Seeger schrieb: > Kein Problem, kommt in der anderen Version. Für die Zukuft, sage > es mir > einfach mit ein paar einfachen Worten ... Nein, so auch nicht. mfg.
Irgendwie ist da der Wurm drin. Habe es noch mal als PDF eingestellt. Hoffe das es richtig kommt achim
Achim Seeger schrieb: > Irgendwie ist da der Wurm drin. Funktioniert nicht? Ich kann es öffnen. Deins aber auch. In deinem ist aber der Fehler auf Seite 1 wieder drin: >( 0 – 65536 Schritte sind 65537 ) ( 0 – 65535 Schritte sind 65536 ) ist richtig. mfg.
Danke. ist mir gar nicht aufgefallen, Habe es sofort korrigiert und noch einige andere Stellen im Text mit gleichen Fehler achim
Zur Berechnung des CTC-Timers (1)verwende ich folgende Berechnung (Bascom, _xtal ist die Quarzfrequenz): '####################################################################### '*********************************************************************** ' ***** Initialisierung des CTC-Timers ****** '*********************************************************************** ' Abstand der IRQ-Impulse ' ' Const _irq_abstand = s_mmm_µµµ_nnn Muster Const _irq_abstand = 0_020_000_000 ' in nsec, HIER ZEIT EINTRAGEN ' Stufenweise die Timerzeit verlängern ' Const _irq_stufe_1 = sss_mmm Muster Const _irq_stufe_1 = 001_000 ' in msec, HIER ZEIT EINTRAGEN Dim Ticker As Byte '----------------------------------------------------------------------* ' Gesamten Wert Berechnen Für Timer1 Const _irq_teiler_max = Int((_xtal * _irq_abstand /(1000000000)) + 0.5) ' Prescaler Einstellung für Timer1 bestimmen ' Const _irq_vorteiler -> Einstellmöglichkeiten: 1/8/64/256/1024 #if _irq_teiler_max > &H00FF_FFFF Const _irq_vorteiler = 1024 #elseif _irq_teiler_max > &H003F_FFFF Const _irq_vorteiler = 256 #elseif _irq_teiler_max > &H0007_FFFF Const _irq_vorteiler = 64 #elseif _irq_teiler_max > &H0000_FFFF Const _irq_vorteiler = 8 #else Const _irq_vorteiler = 1 #endif ' Aus Prescaler-Wert die Einstellung des Timer-Registers berechnen Const _irq_teiler = Int((_xtal * _irq_abstand / _ (1000000000 * _irq_vorteiler )) + 0.5) -1 ' Aus _irq_abstand Einstellung für die 1. Stufe berechnen Const _irq_wert_1 = Int((1000000 * _irq_stufe_1 / _irq_abstand ) + 0.5) ' Initialisiere timer1 Config Timer1 = Timer , Prescale = _irq_vorteiler , Clear Timer = 1 , _ Compare A = Disconnect Ocr1a = _irq_teiler On Oc1a Irq_ctc_timer ' Timer1 freigeben und starten Enable Oc1a Enable Interrupts ' Interrupts freigeben ' zur Überpüfung der Einstellwerte mit Simulator ' PRINT NUR IM SIMULATOR FREIGEBEN ' Print "Prescaler = " ; _irq_vorteiler ' Print "Timerregister (max 65535) = " ; _irq_teiler ' Print "_irq_wert_1 (max 255) = " ; _irq_wert_1 Gruß Alex
Achim Seeger schrieb: > Danke. ist mir gar nicht aufgefallen, Habe es sofort korrigiert und noch > einige andere Stellen im Text mit gleichen Fehler Alex D. schrieb: > Zur Berechnung des CTC-Timers (1)verwende ich folgende Berechnung Hier, habe die Excel-Datei etwas erweitert, um die Berechnung für Timer und Baud zu erleichtern.
Habe dein Programm getestet. War leider nicht so überzeugt. Hatte parallel dazu das AVR Timer ausprobiert. Es geht einfacher und zeigt mehr an. Besonders die möglichen Prescaler und Fehler. Werde auch das neu anschauen. achim
Achim Seeger schrieb: > Sorry, bei basic passe ich, Die Berechnung macht der Compiler, nicht das Basic-Prg. , das wird doch in C oder anderen Sprachen vermutlich ähnlich sein. Vorgegeben wird nur die Quarzfrequenz und die gewünschte Interruptzeit (Const _irq_abstand = in nsec) , fertig. Habe lange daran gebastelt, bis es so einfach einzustellen war. Nur die Übertragung der Werte in die Timeregister übernimmt Bascom. Gruß Alex
Marc Vesely schrieb: > Hier, habe die Excel-Datei etwas erweitert, um die Berechnung für Timer > und Baud zu erleichtern. Sicherlich genial aber nicht lesbar. Wohl so eine Art Standarte.
halbgarer Vollpfosten schrieb: > Sicherlich genial aber nicht lesbar. Sicherlich lesbar. > Wohl so eine Art Standarte. Soll heissen ?
Marc Vesely schrieb: >> Wohl so eine Art Standarte. > Soll heissen ? Das ist im Anhang sehr gut beschrieben.
1 | Ich muss den 8-Bit Timer so einstellen, dass er jeweils nur bis 156 zählt. |
2 | Dann hab ich bei 16 MHz Taktfrequenz und einem Vorteiler von 156 es so |
3 | eingerichtet, dass diese 256 Pulse abzählen genau 10 Millisekunden dauern. |
Nope. Du hast es eben nicht so eingerichtet, dass dieses Timersetup zu 'genau' 10ms führt. Das Ergebnis deiner OCR-Wert Berechnung war keine ganze Zahl, damit kriegst du auch die Zeit nicht exakt hin, wenn du nicht mehr tust, als diese ins OCR zu laden. Ich hab mir die Zahlen nicht weiter angesehen. Aber manchmal kann es sich lohnen, auch mal andere Vorteiler zu untersuchen, ob man damit einen besseren OCR Wert hinkriegt. Besser in dem Sinne, dass man näher an eine ganze Zahl rann kommt.
Hallo Karl Heinz Danke für deine Hilfe. Hatte die Stelle noch nicht so ernst genommen. In der Tabelle unten habe ich die Daten angegeben,dort steht bei 16 MHz Quarz, 10ms, 8 Bit Timer ein Prescaler mit 1024 ergibt Compare von 155. Ergibt einen Fehler von -16 us. Ist deutlich zu sehen das die es die einzige Möglichkeit ist. Sorry, bin ich garnicht von dir gewöhnt. Kaum Fehler gemacht, man ist das komisch. Ist hoffentlich so, wenn man vom besten lernt. Mir geht es nur darum, das es verständlich ist. achim
halbgarer Vollpfosten schrieb: > Das ist im Anhang sehr gut beschrieben. Troll dich mal irgendwo anders herum, OK ?
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.