Guten Abend, ich habe heute 20 Attiny2313 geflasht und über USB/TTL konfiguriert. Bei 16 von 20 hat es problemlos geklappt, bei den anderen 4 Stück kamen aber über Putty/Hercules seltsam wirre Zeichen raus. Die Firm- und Hardware ist überall gleich, auch die Fuses sind definitiv gleich gesetzt (doppelt und dreifach geprüft). Das Programm funktioniert auch soweit. Ein Schaltungsdefekt kann ich (dank Sockel) auch ausschließen, da die "kaputten" µC auch auf der Platine mit funktionierendem µC nicht funktioniert und die "funktionierenden" funktionieren auch auf den Platinen der nichtfunktionierenden µCs. Hat das damit zu tun, das der interne Oszillator verwendet wird? Oder habe ich eine andere Möglichkeit übersehen? Ich wäre dankbar für Ideen. Gruß Schreiber PS: Die Mikrocontroller sind auch alle aus der gleichen Charge.
schreiber schrieb: > seltsam wirre Zeichen raus Das ist fast immer ein Indiz für verschiedene Baudraten auf beiden Seiten. Und ja, das kann am internen Oszillator liegen. Wenn Du den nicht selbst kalibrierst, kann der bis zu 10% von der Nominalfrequenz abweichen.
Ok... kalibriert habe ich die nicht, dann werde ich das morgen mal machen, Danke. S. Landolt schrieb: > Taktfrequenz des ATtiny2313? Baudrate? 4Mhz 9600 Baud
Eine Hardware die UART verwendet ohne einen Quarz oder Quarzoszillator, sprich sich auf den internen RC-Oszillator verlässt, ist, ohne weitere Software für einen laufende Kalibrierung, eine Fehlentwicklung. Dafür spricht in Deinem Fall, dass Du das mit der ungenügenden Konstanz und fehlenden Kalibrierung des RC-Oszillators offensichtlich vorher nicht wusstest. Einzige Rettung ist die softwaremäßige Kalibrierung (wie schon erwähnt). Das Protokoll und die Anwendung muss dann gewisse Phasen erlauben, in denen die Kommunikation nur der Kalibrierung dient - oder einen Software-UART-Code verwenden. Das ist nicht immer möglich, wenn wenig CPU-Zeit bleibt. Vielleicht aber bei Dir.
schreiber schrieb: > Hat das damit zu tun, das der interne Oszillator verwendet wird? Da du ja sagst, dass du die nicht kalibriert hast ist das mit sehr hoher Wahrscheinlichkeit dein Problem.
schreiber schrieb: > Ok... kalibriert habe ich die nicht, dann werde ich das morgen mal > machen, Danke. > > S. Landolt schrieb: >> Taktfrequenz des ATtiny2313? Baudrate? > > 4Mhz 9600 Baud Eine einmalige Kalibrierung wird Dir nicht helfen. Mit der Änderung der Temperatur läuft Dir der RC-Oszillator wieder weg. Die Kalibrierung muss vielmehr laufend erfolgen, oder für jede CPU einzeln der Zusammenhang zwischen Frequenz und Temperatur ermittelt werden. Letzteres hat auch noch das Problem, dass das genaue Verhalten von der Schaltung, dem Aufbau, der Kühlung etc. und deren Veränderungen im Betrieb abhängt. Die auf Dauer zuverlässigste Methode ist, die Anpassung des Taktes an die Baudrate, was sich aber mit dem Hardware-UART beisst, denn Du hast dann keinen Zugriff auf die Pins. (Mit Vorbehalt). Also der oben erwähnte SW-UART. Alternative wäre die Einspeisung einer Referenzfrequenz, aber dann kannst Du auch gleich einen Quarz nehmen.
Staubfänger schrieb: > Einzige Rettung ist die softwaremäßige Kalibrierung (wie schon erwähnt). > Das Protokoll und die Anwendung muss dann gewisse Phasen erlauben, in > denen die Kommunikation nur der Kalibrierung dient - oder einen > Software-UART-Code verwenden. Das ist nicht immer möglich, wenn wenig > CPU-Zeit bleibt. Vielleicht aber bei Dir M. K. schrieb: > Da du ja sagst, dass du die nicht kalibriert hast ist das mit sehr hoher > Wahrscheinlichkeit dein Problem. Vielen vielen Dank. :) Staubfänger schrieb: > Eine einmalige Kalibrierung wird Dir nicht helfen. Mit der Änderung der > Temperatur läuft Dir der RC-Oszillator wieder weg. Naja, eigentlich soll das Teil nur einmal am Anfang konfiguriert werden. (Also es wird dem Teil über den Uart eine I2C Adresse gegeben) Danach wird der Uart nur dann wieder verwendet wenn die Adresse geändert werden soll. Platz für einen Quarz wäre zwar noch vorhanden, wollte ich aber aus Kostengründen sparen.
Staubfänger schrieb: > schreiber schrieb: >> Ok... kalibriert habe ich die nicht, dann werde ich das morgen mal >> machen, Danke. >> >> S. Landolt schrieb: >>> Taktfrequenz des ATtiny2313? Baudrate? >> >> 4Mhz 9600 Baud > > Eine einmalige Kalibrierung wird Dir nicht helfen. Mit der Änderung der > Temperatur läuft Dir der RC-Oszillator wieder weg. Oder sagen wir so: Das wird nur unter ansonsten kontrollierten Betriebsbedingungen helfen. Das betrifft, wie erwähnt hauptsächlich die Temperatur und zu einem gewissen Grad die Versorgungsspannung.
> Eine einmalige Kalibrierung wird Dir nicht helfen. > Mit der Änderung der Temperatur läuft Dir der > RC-Oszillator wieder weg. Das kommt auf den Temperaturbereich an; zwischen 10 und 30 °C lese ich aus "Figure 133. Calibrated 4 MHz RC Oscillator Frequency vs. Temperature" eine Abweichung von rund 0.6 % ab, das wäre okay.
Staubfänger schrieb: > Das betrifft, wie erwähnt hauptsächlich die > Temperatur und zu einem gewissen Grad die Versorgungsspannung. S. Landolt schrieb: > Das kommt auf den Temperaturbereich an; zwischen 10 und 30 °C lese ich Temperatur liegt bei ca. 20 - 35 °C Versorgungsspannung 5V
schreiber schrieb: > Naja, eigentlich soll das Teil nur einmal am Anfang konfiguriert werden. > (Also es wird dem Teil über den Uart eine I2C Adresse gegeben) Danach > wird der Uart nur dann wieder verwendet wenn die Adresse geändert werden > soll. Das ist ganz schlimm. Stell dir mal vor später soll eine neue Adresse vergeben werden und der interne Oszi ist weggelaufen sodass die UART-Kommunikation nicht mehr geht. Alles andere funktioniert aber noch. Kein Mensch kommt auf die Idee, dass es doch an der µC-Schaltung liegt und man wird überall den Fehler suchen nur nicht im ATtiny...
schreiber schrieb: > [...] > Staubfänger schrieb: >> Eine einmalige Kalibrierung wird Dir nicht helfen. Mit der Änderung der >> Temperatur läuft Dir der RC-Oszillator wieder weg. > > Naja, eigentlich soll das Teil nur einmal am Anfang konfiguriert werden. > (Also es wird dem Teil über den Uart eine I2C Adresse gegeben) Danach > wird der Uart nur dann wieder verwendet wenn die Adresse geändert werden > soll. > > Platz für einen Quarz wäre zwar noch vorhanden, wollte ich aber aus > Kostengründen sparen. Ja. Das ist der häufigste Grund. :-) Aber das ist schon fast ein Klassiker wie die LEDs ohne Vorwiderstand. OK. Bei I2C-Slaves sollte das nicht relevant sein. Aber wenn das so ist, dann kannst Du die Taktanpassung mit einer besonderen Schaltung am PC machen. Ein AVR der die Baudrate an den zu konfigurierenden AVR anpasst.
Ich sehe das ähnlich wie M.K. Wenn man noch ein Zusatzschaltung braucht ist das eine Komplikation. Also wäre ein interne Anpassung besser. Aber das geht auch nicht immer. Kosten sind ein Argument. Aber wie das so ist: Das sparen an einer Stelle kostet an einer anderen Stelle. Know-How, evtl. zusätzliche HW., evtl. zusätzliche Arbeitszeit. Solltest Du Dir genau ausrechnen, ob das weglassen des Quarzes lohnt.
M. K. schrieb: > Das ist ganz schlimm... Stabfänger schrieb: > Ich sehe das ähnlich wie M.K. Ok ok... ihr habt mich ja schon überzeugt. Ich pack den Quarz drauf. ^.^ Ich wollte ja nur erst mal schauen, ob es ohne Quarz geht (Weil 200 Platinen). Auf dem Platinendesign ist ja der Quarz schon drauf. Staubfänger schrieb: > Ja. Das ist der häufigste Grund. :-) > Aber das ist schon fast ein Klassiker wie die LEDs ohne Vorwiderstand. Die habe ich Gott sei Dank nicht weggelassen :P
Mal noch was Anderes: Anstatt die Konfiguration über UART zu machen, könntest Du auch das EEPROM-File (vorausgesetzt es geht um Daten im EEPROM) mittels Script jeweils neu erzeugen und in einem Zug, beim Brennen der Firmware mitbrennen. Das kann dann auch der Lehrling (der Arme :-) ) Das wäre nur ein Tastendruck anstelle von: Flashen, ISP-Stecker ab, UART anstecken, Reset, Werte setzen, UART abziehen. Nur so eine Idee.
Staubfänger schrieb: > Mal noch was Anderes: Anstatt die Konfiguration über UART zu > machen, > könntest Du auch das EEPROM-File (vorausgesetzt es geht um Daten im > EEPROM) mittels Script jeweils neu erzeugen und in einem Zug, beim > Brennen der Firmware mitbrennen. Das kann dann auch der Lehrling (der > Arme :-) ) > > Das wäre nur ein Tastendruck anstelle von: Flashen, ISP-Stecker ab, UART > anstecken, Reset, Werte setzen, UART abziehen. > > Nur so eine Idee. Genau das gleiche habe ich mir heute auch schon überlegt. :) Aber dann ist ja wieder das Problem das es nicht einfach im Nachhinein umkonfiguriert werden kann.
schreiber schrieb: > Staubfänger schrieb: >> [...] >> Nur so eine Idee. > > Genau das gleiche habe ich mir heute auch schon überlegt. :) > Aber dann ist ja wieder das Problem das es nicht einfach im Nachhinein > umkonfiguriert werden kann. Wieso? Du musst ja den Code für UART und Konfig nicht weglassen. Du hast ihn ja ohnehin schon drin, nehme ich. Auch wenn Du das EEPROM direkt schreibst, kannst Du später immer noch anders konfigurieren.
schreiber schrieb: > Aber dann ist ja wieder das Problem das es nicht einfach im Nachhinein > umkonfiguriert werden kann. Hä? Das ist doch der Witz beim EEPROM: Man kann es jederzeit, garantiert 100.000 je Zelle, ändern. Ich nutze immer das EEPROM zu ablegen von Konfigurationen, die sich später auch mal ändern können. Das ist doch DER Grund warum es überhaupt erfunden wurde.
Ach so. Jetzt fällt mir auf, was Du meinst. Das mit dem direkten EEPROM schreiben ist NICHT als Alternative zum Quarz gemeint gewesen. Deswegen der Anfang meines Beitrags: "Mal noch was Anderes".
Ja schon, aber dann habe ich ja das Problem nicht aus der Welt geschaffen. :) (Oder reden wir aneinander vorbei)
schreiber schrieb: > Ja schon, aber dann habe ich ja das Problem nicht aus der Welt > geschaffen. :) > (Oder reden wir aneinander vorbei) Möglich. Ich bin davon ausgegangen, dass das Taktproblem erledigt ist. Du nimmst einen Quarz. (Dein Beitrag von 20 Uhr 10). Voilá, Dein Problem ist gelöst. Dann meinereiner mit: "Mal was Anderes ..." Noch ein Problem gelöst. Am Anfang eine Konfiguration per UART von Hand gespart. Alles OK, oder? Ich verstehe gerade nicht, wo es da hakt?
schreiber schrieb: > Zu spät gelesen. ^.^ > > Ja, so wäre das was. :) OK. Dann sind wir wohl wieder alle synchronisiert. :-)
Staubfänger schrieb: > Eine einmalige Kalibrierung wird Dir nicht helfen. Mit der Änderung der > Temperatur läuft Dir der RC-Oszillator wieder weg. ATMEL sagt, dass der interne RC-Oszillator max. +-10% Fehler hat. Damit der Empfang (so wie der Tiny2313 abtastet) einigermassen klappt, darf der Fehler aber nicht größer als 4.5% sein. Und das ist auch meistens der Fall. Bei dir weichen aber 20% Prozent der Charge ab. Das scheint sehr unüblich zu sein, hängt aber damit zusammen, dass du die Tinys mit 4MHz laufen lässt. Die Tinys sind schon in Ordnung, nur lädt dein Tiny beim RESET die Werte für 8MHz und nicht die Werte für 4MHz. ATMEL:
1 | There is a separate calibration byte for the internal oscillator in 4.0 MHz mode of operation but |
2 | this data is not loaded automatically. The hardware always loads the 8.0 MHz calibration data |
3 | during reset. To use separate calibration data for the oscillator in 4.0 MHz mode the OSCCAL |
4 | register must be updated by firmware. The calibration data for 4.0 MHz operation is located in |
5 | the high byte at address 0x01 of the signature area. |
Also, entweder die Werte für 4MHz laden oder auf 8MHz umschalten und es wird schon ohne Quarz klappen.
:
Bearbeitet durch User
Marc V. schrieb: > Also, entweder die Werte für 4MHz laden oder auf 8MHz umschalten und > es wird schon klappen. Wow... wo hast du das denn gefunden? Kannst du bitte den link posten? Vielen Dank, werde ich gleich mal morgen ausprobieren.
schreiber schrieb: > Wow... wo hast du das denn gefunden? Kannst du bitte den link posten? Wie immer... Im DaBla. Rev. 8246B–AVR–09/11 Seite 181 20.3.1 Calibration Byte P.S. Poste mal wie es verlaufen ist, OK ?
:
Bearbeitet durch User
Marc V. schrieb: > ATMEL sagt, dass der interne RC-Oszillator max. +-10% Fehler hat. Das gilt aber mit schon geladenem Calibration-Byte und nur bei 3V und 25°C:
1 | During reset, hardware loads the calibration byte into the OSCCAL |
2 | Register and thereby automatically calibrates the RC Oscillator. |
3 | At 3V and 25°C, this calibration gives a frequency within ±10% |
4 | of the nominal frequency. |
Ansonsten kann der Fehler auch noch größer sein. Und die ~4.5% sind auch der absolute Maximalwert, empfohlen sind nicht mehr als ±2%. Die schafft man mit dem internen Oszillation nur bei optimaler Kalibrierung und das auch nur gerade so und bei halbwegs konstanter Temperatur (und Spannung). In den meisten Fällen mag das funktionieren, aber man muß halt damit rechnen, daß es immer mal wieder auch nicht geht.
Tja. Ich muss, nachdem ich nochmal das Datenblatt angeschaut habe, sagen, dass unter den hier beschriebenen Bedingungen eine einmalige Kalibrierung wahrscheinlich ausreichend sein wird. Den Originalwert wird man nicht nehmen können, denn er gibt nur eine Toleranz von +-10% aber wenn man es wenigstens auf 1% oder weniger genau hinkriegt, dann sollte es dauerhaft gehen. (20-35°C, 5V +- ein paar 100mV) Die Temperatur gibt dann nochmal so über den Daumen aus dem Diagramm abgelesen, ungefähr 1-2%. Dann hätte man noch ca. 1-1,5% Sicherheit. Mir persönlich wäre das zu grenzwertig. Die PCs haben ja auch nochmal eine Abweichung. Das kann sich dann doch mal ungünstig addieren. Ein Quarz gäbe auf Anhieb ca. 0,003%. Aber die Kosten sind bei 200 Stück auch ein relevanter Faktor. Hmm. Hoffentlich klappt es.
Marc V. schrieb: > Wie immer... Im DaBla. > > Rev. 8246B–AVR–09/11 > Seite 181 > 20.3.1 Calibration Byte Das ist aber für den ATtiny2313A, für den ATtiny2313 wäre es "2543L–AVR–08/10". Und letzterer hat nur ein einziges Calibration-Byte (für 8MHz). Also nix mit "There is a separate calibration byte for the internal oscillator in 4.0 MHz mode", es sei denn der TE hat sich im ersten Post vertippt und hat tatsächlich doch die Variante mit dem 'A' am Ende.
Staubfänger schrieb: > Aber die Kosten sind bei 200 Stück > auch ein relevanter Faktor. Bei ner Kleinserie? Klar, man freut sich über jeden Cent aber in dem Fall? 4 MHz-Quarz bekommste ja schon für 20 Cent einzeln hinterhergeworfen...wenns hier um tausende Platinen ging, OK. Aber hier? Ich würd da kein Risiko eingehen.
M. K. schrieb: > 4 MHz-Quarz bekommste ja schon für 20 Cent Würde ich aber meiden, wenn ich RS232 brauche. Dafür gibt es baudratentaugliche Quarze. ...
guest schrieb: > Das ist aber für den ATtiny2313A, für den ATtiny2313 wäre es > "2543L–AVR–08/10". Und letzterer hat nur ein einziges Calibration-Byte > (für 8MHz). Also nix mit "There is a separate calibration byte for the > internal oscillator in 4.0 MHz mode", es sei denn der TE hat sich im > ersten Post vertippt und hat tatsächlich doch die Variante mit dem 'A' > am Ende. Glaube ich doch. Eine charge mit Fehler > 5% bei 20% ? Ich habe mehr als 500 Tiny2313 verbaut, bei keinem war der Fehler gross genug, um ein funktioneren der USART zu verhindern. 2313A und 4313A sind in der Hinsicht noch besser. Und Temperaturabweichungen sind nur im Grenzbereich interessant, also bei Fehler > 4%. Wir haben hier noch einen alten DIY Parallel Programmer mit M168 und Quarz mit besser 5ppm. Ein kleines Assemblerprogramm wird aufgeladen und damit getestet. Funktioniert auf jedem AVR. Nach 30 Sekunden hat man die Abweichung. Bei mehr als 75% der getesteten AVRs war der Fehler unter 3.5%. Wenn der AVR mit PC verbunden wurde, haben wir es so gelassen, aber AVR<=>AVR natürlich nicht ohne Quarz. Hannes L. schrieb: >> 4 MHz-Quarz bekommste ja schon für 20 Cent > > Würde ich aber meiden, wenn ich RS232 brauche. Dafür gibt es > baudratentaugliche Quarze. Ja, 4MHz sind ungeeignet, aber für 9600B und 19200B sind die OK.
M. K. schrieb: > Staubfänger schrieb: >> Aber die Kosten sind bei 200 Stück >> auch ein relevanter Faktor. > > Bei ner Kleinserie? Klar, man freut sich über jeden Cent aber in dem > Fall? 4 MHz-Quarz bekommste ja schon für 20 Cent einzeln > hinterhergeworfen...wenns hier um tausende Platinen ging, OK. Aber hier? > Ich würd da kein Risiko eingehen. Ich selbst auch nicht, M.K. Ist mir zu grenzig. Habe ich ja geschrieben und auch warum. :-) Aber zum einen habe ich Verständnis, zumindest für die Tendenz über Einsparungen nur mal nachzudenken, und das wollte ich dem TO vermitteln. Zum anderen mag das so ein Fall sein, wo Cheffe mal eben eine Entscheidung getroffen hat. Dann ist der TO einfach ein armes Schwein. (Das ist nur humorig gemeint, wenn auch mehrdeutig). Naja. Jedenfalls wollte ich nicht sagen, dass ich trotz Bedenken dazu raten würde, den Quarz wegzulassen.
Hannes L. schrieb: > M. K. schrieb: >> 4 MHz-Quarz bekommste ja schon für 20 Cent > > Würde ich aber meiden, wenn ich RS232 brauche. Dafür gibt es > baudratentaugliche Quarze. > > ... Ja Hannes. Dankeschön Hannes. Hust. Oh, das war nur der Staub.
Hannes L. schrieb: > M. K. schrieb: >> 4 MHz-Quarz bekommste ja schon für 20 Cent > > Würde ich aber meiden, wenn ich RS232 brauche. Dafür gibt es > baudratentaugliche Quarze. > > ... Bei 9600 Bd völlig egal. Marc V. schrieb: > Ja, 4MHz sind ungeeignet, aber für 9600B und 19200B sind die OK. Wieso sollen die ungeeignet sein? Fehler liegt bei beiden Fälle bei 0,2%, das ist völlig innerhalb aller Limits. Da braucht man nicht mal drüber nachdenken ob man schwitzen muss. Klar, man kann auch nen 3,6er Baudratenquarz kaufen wenn man scharf auf die 0% ist...kosten aber etwas mehr wenn ich mich recht entsinne. Hier kann man dann IMO doch was sparen ohne wirklich einen Verlust zu haben.
M. K. schrieb: > Marc V. schrieb: >> Ja, 4MHz sind ungeeignet, aber für 9600B und 19200B sind die OK. > > Wieso sollen die ungeeignet sein? Fehler liegt bei beiden Fälle bei > 0,2%, das ist völlig innerhalb aller Limits. Da braucht man nicht mal > drüber nachdenken ob man schwitzen muss. Klar, man kann auch nen 3,6er Sagte ich was anderes ?
So... Wenn ich die Werte für 4Mhz in OSCCAL lade, dann funktioniert alles wunderbar. 20 von 20 Tinys konnten erfolgreich konfiguriert werden und werkeln jetzt gemütlich vor sich hin. :) Vielen Dank für die Unterstützung
Marc V. schrieb: > Sagte ich was anderes ? Ja, du sagtest sie seien ungeeignet, gingen aber für 9600. Ich finde aber nicht, dass man so pauschal sagen kann, dass sie ungeeignet sind. Sie sind nur nicht für jede beliebige Baudrate geeignet.
M. K. schrieb: > Ja, du sagtest sie seien ungeeignet, gingen aber für 9600. Ich finde > aber nicht, dass man so pauschal sagen kann, dass sie ungeeignet sind. > Sie sind nur nicht für jede beliebige Baudrate geeignet. Nein, ich sagte, dass die für 9600 und 19200 OK sind. Für 28800 und darüber taugen die nichts. Und das ist für mich ungeeignet, OK ?
Marc V. schrieb: > Und das ist für mich ungeeignet, OK ? Das "Problem" ist wohl, dass wir beide eine unterschiedliche Vorstellung des Wortes "ungeeignet" haben aber ja, das ist schon 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.