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
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.?
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.
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.
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
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.
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. :-)
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
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.
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.