Ich verlinke das hier und versuche das zu lesen und zu verstehen https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR doch erst mal kapiere ich gar nichts, weil immer alles so kompliziert ist. Warum wird hier von "Overflow" gesprochen wenn der Zähler wieder auf 0 zurückgesetzt wird ??? Ich zitiere: "Zählerstand mit dieser Bitbreite nicht mehr darstellbar ist und der Zähler wieder auf 0 zurückgesetzt wird" Dann spricht man doch einfach von Zeitzyklus. Da wird nichts überflutet oder überlaufen, sondern zurückgesetzt oder zählen da tatsächlich unsichtbare Bits mit ??? Weitere Frage: Warum behandelt die Timer noch mit diesen komischen Flagsbuchstaben wie OCR1A, TCCR1A, CS11? Aus der PC-Programmierung kenne ich das irgendwie anders. Kommt das noch aus der alten Assemblersprache? Abgesehen davon dass ich den Sinn von Vorteilern noch nicht begriffen habe, sind die Vorteiler festdefiniert und warum gibt es keine 512, sondern nur 256 und der nächste 1024 ?
Akkusammler schrieb: > Warum wird hier von "Overflow" gesprochen wenn der Zähler wieder auf 0 > zurückgesetzt wird ??? > Ich zitiere: > "Zählerstand mit dieser Bitbreite nicht mehr darstellbar ist und der > Zähler wieder auf 0 zurückgesetzt wird" Das ist einfach unglücklich formuliert. Der Zähler wird nicht explizit auf 0 zurückgesetzt, sondern läuft einfach weiter. Nach Zählerstand 11111111b kommt 100000000b und weil ein 8-Bit Zähler nicht über 9 Bit verfügt, landet er folglich bei 00000000b, i.e. zählt von dezimal 255 weiter nach 0.
Hi, Diese „Flagsbuchstaben“ sind Bezeichnungen in Bestimmter Bits in dem Timerregister. OCR1A kannst du auch auf dem Bild im Datenblatt der Pins finden, damit weißt du an welchem Pin die PWM dann anliegt. Auch bei der Beschreibung der Bits im Timerregister findest dürfte Bezeichnungen wieder. Zudem sind die Register und Bits in der Headerdatei auch so definiert. Wenn du nun das OCR1A Bit im entsprechend Register setzten willst musst du nur (1<< OCA1R) zuweisen. All diese Bezeichnungen sind aus dem Datenblatt des entsprechenden uC. Mit dem Vorteiler kannst die Frequenz mit der der Timer läuft anpassen. Wenn der uC mit 20 MHz läuft würde der Überlauf bei 8 Bit alle 12,8 uS kommen bzw. die PWM mit 78,125 kHz laufen. Mit dem Vorteiler kannst du die Frequenz verändern. Die Vorteiler sind ein Teil der Hardware und do vom Entwickler festgelegt worden. Gruß JackFrost
:
Bearbeitet durch User
Du musst dir immer die 8 Bit vor Augen halten und wie das rechnerisch funktioniert. Wenn du das aber nicht verstehen kannst, probiere die Beispiele aus, ändere den Vorteiler und guck was passiert. Schau dir andere Programme an, wie man auf lange Zeiten kommt und wenn es auf deinem Controller so läuft, verstehst du den Hintergrund von selbst. Wenn nicht, laufen wenigstens deine Timer.?
Ok danke und: http://www.ifuturetech.org/ifuture/uploads/2013/07/ATmega328P-PU-PIN-Diagram-connection-configration.jpg auf diesem Bild sehe ich OC0A OC0B OC2B und so weiter, das sind also die PWM Pins. Ist das von Arduino oder von Atmel festgelegt worden? (also hardwaregebunden?) oder kann man das so programmieren, dass auf einmal ein Digital-Pin wo kein PWM drauf steht jetzt PWM hat ?
Schau mal ins datenblatt des verbauten controllers. Da werden all deine fragen sehr ausführlich erklärt. Die alternativen funktionen der pins sind tatsächlich in hardware fest gegossen.
> Warum wird hier von "Overflow" gesprochen wenn der Zähler wieder auf 0 > zurückgesetzt wird ??? Nimm mal an du koenntest nur mit den Fingern zaehlen, was passiert dann wenn du von 10 nach 11 kommst? Fingermangel! Overflow ist einfach nur ein englisches Wort dafuer. Du wuerdest gerne weiterzaehlen, aber es mangelt an Hardware. > "Zählerstand mit dieser Bitbreite nicht mehr darstellbar ist und der > Zähler wieder auf 0 zurückgesetzt wird" Das ist falsch. Das ist das Problem wenn einaeugige das sehen unterrichten. :-) Es wird nicht zurueckgesetzt sondern der Anfangszustand tritt automatisch ein. Fuer tiefergehendes Detailwissen muesstest du jetzt entweder verstehen was FlipFlip und Register sind, oder mit Streichhoelzern das Binaersystem darstellen. > Weitere Frage: Warum behandelt die Timer noch mit diesen komischen > Flagsbuchstaben wie OCR1A, TCCR1A, CS11? Ich hab schon eine Dekade nichts mehr mit AVR gemacht, aber soweit ich mich entsinne sind das einfach Registerbezeichnungen die der Hersteller willkuerlich festgelegt hat. > Kommt das noch aus der alten Assemblersprache? Assembler ist nicht alt. Allerdings ist die Nutzung heute in den allermeisten Faellen nicht angebracht. Allerdings sind Grundkenntnisse darin fuer Embeddedprogrammierer im hohen Masse sinnvoll weil sie nur so verstehen was in einem Controller wirklich abgeht und was der Compiler manchmal aus ihren weltfremden Gedanken so macht. Ein weiterer Vorteil, in den Assemblerbuechern wurden den Leuten frueher in den ersten 50Seiten erklaert was binaerzahlen sind und wie man damit rechnet. Das ist zwingend notwendiges Grundwissen an dem es einen reinen Hochsprachenprogrammierer heute haeufig mangelt. > Abgesehen davon dass ich den Sinn von Vorteilern noch nicht begriffen > habe, sind die Vorteiler festdefiniert und warum gibt es keine 512, > sondern nur 256 und der nächste 1024 ? Ein Vorteiler ist im Prinzip ein Kumpel mit einer weiteren Hand der dir gegen das Schienbein tritt sobald er mehr wir x gezaehlt hat und danach zaehlst du dann wie oft du getreten wirst. Die Zahl x ist einstellbar und der Hersteller hat festgelegt (willkuerlich!) welche Zahlen du nur nutzen kannst. Einschraenkungen haben ihre Ursachen meist darin das man Transistoren = Chipflaeche = Geld sparen wollte. Olaf
Akkusammler schrieb: > Warum wird hier von "Overflow" gesprochen wenn der Zähler wieder auf 0 > zurückgesetzt wird ??? Stell dir das Zählregister als Kilometerzähler vor. Wenn dessen Stellen alle auf 9 stehen, fängt er wieder bei 0 an. Und ja, man kann dabei von einem Überlauf sprechen. Akkusammler schrieb: > Weitere Frage: Warum behandelt die Timer noch mit diesen komischen > Flagsbuchstaben wie OCR1A, TCCR1A, CS11? Aus der PC-Programmierung kenne > ich das irgendwie anders. Weil das merktechnisch sinnvoll ist. Und weil man nicht auf jeden Rücksicht nehmen kann, der es irgendwie anders kennt. Akkusammler schrieb: > Abgesehen davon dass ich den Sinn von Vorteilern noch nicht begriffen > habe, Ich wiederum begreife nicht, daß jemand den Sinn von Vorteilern nicht begreift. Denn der erschließt sich eigentlich recht einfach. > sind die Vorteiler festdefiniert und warum gibt es keine 512 > sondern nur 256 und der nächste 1024 ? Das hat sicher entwicklungs- und fertigungstechnische Gründe und ist kein böser Wille des Herstellers.
Akkusammler schrieb: > Warum wird hier von "Overflow" gesprochen wenn der Zähler wieder auf 0 > zurückgesetzt wird ??? Stelle dir einen Timer vor, der nur aus zwei Bit besteht. Er starte bei 0b00 und soll nun hoch zählen. 0b00 +0b01 ===== 0b01. Ein 0b01 +0b01 führt dazu, dass an der 1. Stelle eine 0 erscheint und es zur zweiten Stelle einen Übertrag gibt: 0b00 +0b10 :übertrag ===== 0b10 Und nun schaun wir mal bei 0b11 +0b01 An der ersten Stelle haben wir wieder ein 1 + 1, das ergibt wieder 0 und eine 1 landet im Übertrag: 0b10 +0b10 :Übertrag An der zweiten Stelle haben wir dann auch wieder ein 1 + 1, das gibt einen weiteren Übertrag: 0b10 +0b100 : 2. Übertrag Unser Timer kennt aber gar keine drei Stellen, er "verliert" also den 2. Übertrag, er hat ja keine 3. Stelle und kann daher den Übertrag nicht speichern, und man bekommt 0b00, er ist also schlicht übergelaufen. Akkusammler schrieb: > Weitere Frage: Warum behandelt die Timer noch mit diesen komischen > Flagsbuchstaben wie OCR1A, TCCR1A, CS11? Komisch sind die Buchstaben nicht sondern eigentlich recht logisch, so heißt das recht kryptisch anmutende OCR1A z.B. Output Compare Register Timer 1 Value A oder ein TCCR1A bedeutet Timer/Counter Control Register Timer 1 Part A. Die Abkürzungen haben also alle ihren Sinn. Akkusammler schrieb: > Abgesehen davon dass ich den Sinn von Vorteilern noch nicht begriffen > habe, sind die Vorteiler festdefiniert und warum gibt es keine 512, > sondern nur 256 und der nächste 1024 ? Der Sinn der Vorteiler ist, dass man nicht zwingend mit Überläufen arbeiten muss. Stelle dir mal vor du willst jede Millisekunde etwas mit deinem Timer triggern und dein Mikrocontroller läuft mit z.B. 4 MHz. Es wäre hier einfach nicht klug wenn der 8-Bit-Timer auch mit 4 MHz liefe denn dann wäre die Millisekunde einige Überläufe weit weg => du müsstest die Überläufe erstmal zählen. Stellst du den Vorteiler aber z.B. auf 64 ein musst du nur warten bis der Timer bis zu 62 gezählt hat.
"Überlauf / Overflow" Wenn mein Kilometerzähler beim Käfer von 99.999km auf 0 springt, dann ist das genau das gleiche. Ich finde das Wort "Überlauf" oder Overlow im Englischen schon passend.
Akkusammler schrieb: > Warum wird hier von "Overflow" gesprochen wenn der Zähler wieder auf 0 > zurückgesetzt wird ??? Ein Rücksetzen erzeugt keinen Overflow, sondern nur das Zählen über den Endwert (0xFF bzw. 0xFFFF) hinaus. Das Overflow-Bit gestattet es, in Software weiter zu zählen, z.B. um einen 32Bit-Zähler zu erhalten.
Ich glaube inzwischen hat nun jeder einmal erklärt was ein Overflow ist...
M. K. schrieb: > Stelle dir einen Timer vor, der nur aus zwei Bit besteht. Boah! Wie gemein! Dafür habe ich mir dann Tage um die Ohren gehauen. Noch bevor ich mit Microcontrollern anfing, müsste man in unseren Steuergeräten bei den Hochregalstaplern einiges binär einstellen. War total beschissen in unseren Unterlagen erklärt, zumindest solange man das System nicht verstanden hat. Habe mir, natürlich wie immer, ein Buch gekauft, um das zu verstehen. So einfach kann es sein. Wirklich toll erklärt! Auch Olaf mit seinen Fingerübungen. Echt spitze Jungs. Eure beiden Erklärungen sollten in die Tutorials einfließen.
Akkusammler schrieb: > Ist das von Arduino oder von Atmel festgelegt worden? Die Frage lässt sich leicht beantworten. Überlege wer vorher da war und guck ins Datenblatt von deinem µC - ein bisschen mehr Eigeninitiative ...
Mad schrieb: > Ich glaube inzwischen hat nun jeder einmal erklärt was ein Overflow > ist... Nö, es fehlt immer noch die gute alte bildliche Darstellung: https://de.wikipedia.org/wiki/Z%C3%A4hlwerk#/media/File:Stueckzaehler-Einer-Zehner-Zahnrad.jpg Viele µC-begriffe stammen halt noch aus der elektromechanischen Ära. Ältere Semester, die im besten Lausbubenalter noch Opa's Uhr und auch sonst alles zerlegt haben, was sie in die Finger bekammen, haben da natürlich einen unschätzbaren Vorteil gegenüber den Grünschnäbeln, die außer Vorlesungscripten nichts von der realen Welt kennen. https://de.wikipedia.org/wiki/Z%C3%A4hlwerk
my2ct schrieb: >> Ist das von Arduino oder von Atmel festgelegt worden? Atmel. Erst in letzter Zeit gibt es die kleinen AVR Controller auch mit programmierbarer Ausgangsmatrix, bei der ein Pin für eine gewisse Funktion ausgesucht werden kann. Bei allen älteren ist das in Hardware gegossen. Ist aber für einen Anfänger gar nicht schlecht, weil damit keine weiteren Unklarheiten entstehen. Immerhin muss man so eine Ausgangsmatrix ja auch erstmal verstehen, was ein Stolperstein sein kann.
:
Bearbeitet durch User
Akkusammler schrieb: > Weitere Frage: Warum behandelt die Timer noch mit diesen komischen > Flagsbuchstaben wie OCR1A, TCCR1A, CS11 Diese komischen Buchstaben sind Abkürzungen und etwas einfacher zu benutzen, als die ausgeschriebenen Bezeichnungen. oder würdest Du lieber 'OutputCompareRegisterTimer1A' schreiben als 'OCR1A' oder 'TimerCounterControlRegister1A' anstatt 'TCCR1A' oder 'ClockSelectBits" 'CS11' Auch die Assemblerbefehle sind Abkürzungen, da Ausschreiben zu umständlich ist. LDI - Load Immediate ADIW - Add Immediate to Word BRBC - Branch if Bit in SREG is Cleared ... ed. super, habe gerade gesehen, dass M. K. (sylaina) das schon geschrieben hatte. Na egal, doppelt hält besser
:
Bearbeitet durch User
Herr M. schrieb: > oder würdest Du lieber > 'OutputCompareRegisterTimer1A' schreiben als 'OCR1A' > oder > 'TimerCounterControlRegister1A' anstatt 'TCCR1A' > oder > 'ClockSelectBits" 'CS11' Also zumindest ich, als Desktopsoftware Entwickler, ja. Heute mit einer IDE mit Autovervollständigung und einfachen Copy-Kürzeln (doppelklick auf Objekt zum markieren -> Ctrl+C) ist das einfach leserlicher. In einem etwas größeren Projekt z.B. in Java sind Funktionsnamen dieser Größenordnung in gut gemanagten Projekten ganz üblich und als Namen für Konstanten oft auch. Gut, zugegeben, da es sich heirbei um Konstanten handelt die man immer wieder antrifft solange man mit der selben uC Familie arbeitet (und Entsprechend auch ein neuer Mitarbeiter der den Chip kennt), gewöhnt man sich wahrscheinlich dran, das Kürzel sofort ohne Nachzudenken, zu interpretieren.
:
Bearbeitet durch User
Herr M. schrieb: > Akkusammler schrieb: >> Weitere Frage: Warum behandelt die Timer noch mit diesen komischen >> Flagsbuchstaben wie OCR1A, TCCR1A, CS11 > > Diese komischen Buchstaben sind Abkürzungen und etwas einfacher zu > benutzen, als die ausgeschriebenen Bezeichnungen. > > oder würdest Du lieber > 'OutputCompareRegisterTimer1A' schreiben als 'OCR1A' > oder > 'TimerCounterControlRegister1A' anstatt 'TCCR1A' > oder > 'ClockSelectBits" 'CS11' > [...] Ich bin zwar nicht gefragt worden, aber offen gesagt, würde ich das gerne. Ja. JA! :-) Aber das ist ja, dank #define oder .EQU oder was immer der jeweilige Assembler bietet, auch kein Problem. Vor einiger Zeit, - OK, vor längerer Zeit -, habe ich mir noch über Variablen- und Funktionsnamen den Kopf zerbrochen und es kam dann sowas wie oben heraus. Dann wurde mir das zu dumm und ich habe einfach geschrieben, was das Ding jeweils war. (Leider war das früher nicht konsequent möglich, da manche Assembler und Compiler noch Beschränkungen in der Länge von Identifiern hatten). Aber dann! Eines Tages! Da las ich auf einmal, es seien "sprechende" Namen zu bevorzugen. Super. Immer holt einen die Welt ein. Naja. Manchmal. :-)
Hallo, kaufe Dir einen 4024 und 4040 und ein Paar LEDs und einen 555 und schaue, was die so machen. MfG
Akkusammler schrieb: > Warum wird hier von "Overflow" gesprochen wenn der Zähler wieder auf 0 > zurückgesetzt wird ??? Weil man das schon immer so nannte - auch bei mechanischen Zählern. Jedenfalls in meiner Generation.
Hallo "kaufe Dir einen 4024 und 4040 und ein Paar LEDs und einen 555 und schaue, was die so machen." Oder wenn die Hardware nicht so deine Sache ist schau dir ruhig einige Videos zu Flip Flops, Zählern, Halbaddierern, Volladdierern, Schieberegistern usw. an. Auch gibt es eine schöne Video Dokumentation mit Erklärungen (wie und warum) von jemanden der ein 8Bit (oder war es sogar nur 4Bit?) Rechner nur aus Logik IC aufgebaut hat - man sieht (auch wegen der vielen LEDs) dort ganz genau wie ein Rechner (µC) vom Grund auf funktioniert und bekommt ganz schnell ein Gefühl dafür (nicht nur abstraktes Wissen ohne echtes "Bauchgefühl) warum z.B. ein Zähler überläuft, was Register "wirklich" sind warum es verschiedene Speicher gibt usw. Nebenbei erkennt man auch welch enormes Wissen, Anzahl an "Quasi Bauelementen" und Know How selbst z.B. in einen kleinen ATiny13 für unter ein Euro "sitzt". Die GB an Speicher, Mehrkernprozessoren usw. sind nicht vom Himmel gefallen... Jemand
Jemand schrieb: > Die GB an Speicher, Mehrkernprozessoren usw. sind nicht vom Himmel > gefallen.. Nein, die sind aus der Hölle empor gestiegen... :D
Alex G. schrieb: > Also zumindest ich, als Desktopsoftware Entwickler, ja. > Heute mit einer IDE mit Autovervollständigung und einfachen Copy-Kürzeln > (doppelklick auf Objekt zum markieren -> Ctrl+C) ist das einfach > leserlicher. Wenn du Leserlichkeit an der Anzahl der Buchstaben fest machst, hast du natürlich Recht. Du musst den ganzen Roman allerdings auch immer lesen. Das macht den Quellcode nicht übersichtlicher, zumal solche Low-Level-Dinge sowieso meist gut in einer Bibliothek verborgen sind und ohne Kenntnis der Hardware nicht sonderlich viel zum Verständnis beitragen - egal wie ausführlich der Text ist. Redundanz ist nicht immer von Vorteil, wenn man sowieso wissen muss, was man da tut.
Cyblord -. schrieb: > Gärtnern ist auch ein schönes Hobby. Wie vielen Leuten hast du das schon empfohlen? ;-) NichtWichtig schrieb: > es muß Freitag sein...
npn schrieb: > Wie vielen Leuten hast du das schon empfohlen? ;-) Natürlich nur den paar wenigen bei denen in Bezug auf Elektronik und Informatik wirklich alle Messen gelesen sind. Einige davon entwicklen wahrscheinlich gerade die neuste Fly-by-Wire Software für Airbus. Der Rest wahrscheinlich Medizinelektronik für deinen nächsten Krankenhausaufenthalt. Viel Spaß mit der Zukunft sag ich da nur.
npn schrieb: > Cyblord -. schrieb: >> Gärtnern ist auch ein schönes Hobby. > Wie vielen Leuten hast du das schon empfohlen? ;-) Er hat recht. Vor ca 30 Jahren hatte ich mich in der Informatik AG der Schule zu Tode gelangweilt, weil ich immer alles schneller wusste, als der Lehrer. Der hat mich irgendwann entnervt raus geworfen, so dass ich zwangsweise in die Garten-AG eingewiesen wurde. Dort hatte ich zu meiner eigenen Überraschung tatsächlich richtig Spaß.
Stefanus F. schrieb: > Er hat recht. Vor ca 30 Jahren hatte ich mich in der Informatik AG der > Schule zu Tode gelangweilt, weil ich immer alles schneller wusste, als > der Lehrer. Tja ist ein Fluch so extrem gut zu sein. Kenn ich. Sucht man sich nicht aus. Wünscht man niemandem. Aber der "Akkusammler" macht jetzt nicht gerade den Eindruck als würde er sich beim programmieren von Controllern vor lauter Kompetenz langweilen.
Naja, damals war man schon ein Halbgott wenn man die Konfigurationsparameter von CD-ROM Treibern auswendig kannte. Heute interessiert das keine Sau mehr, denn man hat Google.
Cyblord -. schrieb: > Tja ist ein Fluch so extrem gut zu sein. Kenn ich. Sucht man sich nicht > aus. Wünscht man niemandem. :-))) Du hast nur einen einzigen Fehler: Du bist viel zu bescheiden. :-)
Cyblord -. schrieb: > Der Rest wahrscheinlich Medizinelektronik für > deinen nächsten Krankenhausaufenthalt. Viel Spaß mit der Zukunft sag ich > da nur. Einer der unfähigsten Entwickler, die ich jemals kennengelernt habe, kündigte bei seinem Arbeitgeber. Mir geronn das Blut in den Adern, als er verriet, woran er künftig arbeitete: Firmware für Beatmungs- und Narkosegeräte. Nun ja, ich hoffe sehr, dass die QS bei seinem neuen Arbeitgeber gute Arbeit leistet.
Akkusammler schrieb: > doch erst mal kapiere ich gar nichts, weil immer alles so kompliziert > ist. Lustig. Aber verständlich. Ich lese mich da auch gerade ein. Und ich finde es auch nicht unbedingt auf den ersten Blick verständlich. Aber das ist halt so, bei hochkomplexen Dingen wie Timer-Interrupts.
Andreas S. schrieb: > Einer der unfähigsten Entwickler, die ich jemals kennengelernt habe, > kündigte bei seinem Arbeitgeber. Mir geronn das Blut in den Adern, als > er verriet, woran er künftig arbeitete: Firmware für Beatmungs- und > Narkosegeräte. Das kann nur einer von M$ gewesen sein. Mich hat mal ein Kollege gefragt, ob ich nicht für M$ arbeiten will. Meine Antwort: Wenn ich mich mit Krankheiten befassen will, wäre ich Arzt geworden. Weißt du noch, als die Leute auf abgestürzten M$-CE Bankterminals Minesweeper spielen konnten :-] PS: Ich bete jeden Tag, dass ich nie ein Beatmungs- oder Narkosegerät brauche.
Andreas S. schrieb: > Cyblord -. schrieb: >> Der Rest wahrscheinlich Medizinelektronik für >> deinen nächsten Krankenhausaufenthalt. Viel Spaß mit der Zukunft sag ich >> da nur. > > Einer der unfähigsten Entwickler, die ich jemals kennengelernt habe, > kündigte bei seinem Arbeitgeber. Mir geronn das Blut in den Adern, als > er verriet, woran er künftig arbeitete: Firmware für Beatmungs- und > Narkosegeräte. Nun ja, ich hoffe sehr, dass die QS bei seinem neuen > Arbeitgeber gute Arbeit leistet. Naja, sie hätten sich etwas mehr Mühe geben können: https://blog.fefe.de/?ts=a553d448
Stefanus F. schrieb: > Dort hatte ich zu meiner eigenen Überraschung tatsächlich richtig Spaß. Köstlich. Stefan, du hast bei mir immer eine offene Tür und einen Kaffee oder Tee (je nachdem was dir lieber ist) zu erwarten.
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.