Hallo, ich versuche bei dem ATtiny und dem internen Osscilator (8MHz) eine Baudrate von 4800 einzustellen. Aus dem datenblatt habe ich den Wert 103 (dez.) genommen und in das UBRRL geschrieben. Mit dem Ossziloscope messe ich dann eine Frequenz von 555Hz. Ich würde mich freuen wenn ihr mir helfen könntet. Dabke & Grüße
:
Verschoben durch User
Der µC läuft mit 1MHz -> Fuses prüfen. Und der interne RC ist für UART nur bedingt zu gebrauchen.
Hallo, vielen Dank für deine Antwort. Fuses hatte ich auf 8MHz eingestellt. Das der Interne RC etwas ungenauer sein soll habe ich auch gehört aber kann man den nicht kallibrieren? Weißt du wie das geht? Viele Grüße
> Fuses hatte ich auf 8MHz eingestellt.
Wenn dem so ist (welchen Wert hat die 'low fuse'?) initialisierst Du die
UART falsch -> vollständigen Code zeigen.
Hallo, C-Code der initialisierung der UART:
1 | void iniUART() |
2 | {// USART initialization |
3 | // Communication Parameters: 8 Data, 1 Stop, No Parity
|
4 | // USART Receiver: On
|
5 | // USART Transmitter: On
|
6 | // USART Mode: Asynchronous
|
7 | // USART Baud rate: 9600
|
8 | UCSRA=0x00; |
9 | UCSRB=0x18;//transmitter and receiver enable |
10 | UCSRC=0x06;//8 data bits and ... |
11 | UBRRH=0x00;//-| |
12 | UBRRL=0x10;//-- set baudrate 4800 bei internen 4MHz |
13 | }
|
Und die CKDIV8 Fuse beachtet? --> nein, habe ich leider nicht beachtet. Das LOW Fuse hat lauf AVRStudio den wert 0x44; Vielen Dank für eure Hilfe. Ich weiß das zu schätzen!!!!!! Viele Grüße
hans schrieb: > Und die CKDIV8 Fuse beachtet? --> nein, habe ich leider nicht beachtet. > > Das LOW Fuse hat lauf AVRStudio den wert 0x44; > > Vielen Dank für eure Hilfe. Ich weiß das zu schätzen!!!!!! Und jetzt? Brichtigt? Geht es jetzt?
Hallo, hast du recht das war echt blöd geantwortet. Nee, läuft noch nicht ich versuche gerade zu verstehen wie das mit dem Kalibrieren geht. Ich hoffe das das des Rätsels lösung ist. In wie weit das CKDIV8-Register einzustellen ist habe ich noch nicht ganz verstanden. Vielleicht hat noch jemand einen Tipp. Ich würde mich sehr freuen. Derzeit sehe ich 2 Möglichkeiten. - Umstieg auf externen Quarz - kalibrierung Vielen Dank noch mal für eure Hilfe!!!!!
hans schrieb: > - Umstieg auf externen Quarz Das löst dein Problem mit der /8 Fuse nicht. > In wie weit das CKDIV8-Register einzustellen ist habe ich noch nicht > ganz verstanden. Die hat 2 Zustände, einer ist richtig, einer ist falsch. ;-) In beiden funktioniert der AVR, nur eben mit um den Faktor 8 unterschiedlicher Frequenz. Damit wirst du dich nicht aussperren.
:
Bearbeitet durch User
hans schrieb: > aber kann > man den nicht kallibrieren? > > Weißt du wie das geht? Letztendlich musst Du nur den geeigneten Wert ins OSCCAL-Register schreiben. Nach dem Einschalten steht da schon ein Wert drin, das ist der werksseitig kalibrierte. Der wird jedes mal beim Einschalten wieder da reingeschrieben. Du musst also gleich nach dem Reset Deinen eigenen (selbst ermittelten) Wert in dieses Register schreiben, das ist alles. Augenblicklich wird sich die Oszillatorfrequenz entsprechend ändern. Natürlich ist das eigentliche Problem: Wie ermittelst Du diesen Wert, er wird bei jedem Exemplar unterschiedlich ausfallen. Wenn Deine Schaltung nur ein Einzelstück ist und keine Serienproduktion kannst Du den benötigten Wert einmal von Hand per Ausprobieren ermitteln, das wird dann perfekt funktionieren bis ans Ende der Zeit. Wenn es eine Serienproduktion wird dann rate ich DRINGEND dazu stattdessen einen Quarz zu nehmen, und zwar einen von den Baudratenquarzen mit den "krummen" Frequenzen die sich perfekt auf die glatte Baudrate runterteilen lassen (und dann nimm gleich den mit der höchsten Frequenz die der Tiny noch kann (18.432MHz?) dann bekommst Du auch gleich einen ordentlichen Kick in der Rechenleistung). Du WILLST Dir das Problem nicht antun mit dem notwendigen Kalibrieren jedes einzelnen Geräts und der möglichen Fehlerquelle einer fehlerhaften Kalibrierung, der Kunde wird Dir das um die Ohren hauen wenn solche Probleme auftreten und die werden auftreten sobald mehr als nur ne Hand voll Geräte gebaut werden.
Bernd K. schrieb: > Wenn es eine Serienproduktion wird dann rate ich DRINGEND dazu > stattdessen einen Quarz zu nehmen, und zwar einen von den Na klar. Klingt nach dem Projekt eines Entwicklers für Serienproduktion. Falls nicht, reicht vor allem bei den niedrigen Baudraten wie 4800 der interne Oszillator.
> Das LOW Fuse hat lauf AVRStudio den wert 0x44; Freut mich, dass Du inzwischen erkannt hast, Dass die Fuses wirklich falsch sind. > Falls nicht, reicht vor allem bei den niedrigen Baudraten wie 4800 der > interne Oszillator. Nicht ohne Kalibrieriung. Falls des TOs Messung richtig ist und er 555 Bd statt der eingestellten 600 Bd bekommt, dann liegt er um immerhin fast 8% daneben - das schluckt ein normales(tm) Gegenüber normalerweise(tm) nicht mehr.
@ janos (Gast) >Falls nicht, reicht vor allem bei den niedrigen Baudraten wie 4800 der >interne Oszillator. Und noch Einer, der die Prozentrechnung nicht verstanden hat. 5% Fehler sind immer 5% Fehler, egal ob bei 4800 oder 115200 Baud. Ich hab mit Kalibrierung auch schon 115200 Baud benutzt, alles kein Thema.
Falk Brunner schrieb: > @ janos (Gast) > 5% Fehler sind immer 5% Fehler, egal ob bei 4800 oder 115200 Baud. Wenn die Gegenstelle auch einer Toleranz unterliegt, wird der Grat, bei dem sich beide treffen, bei hohen Baudraten schmaler!?
Hallo, ich trau mich kaum zu fragen aber welches Register verbirgs sich hinter dem "Fuses LOW"? Ist das das CLKPR Register? Und wird dadurch die Frequent für den gesamten Kontroller herunter geteilt? Welches wäre denn der richtige Wert für dieses Register? Bitte steinigt mich nicht. (ist doch bald Weihnachten) ;-) Grüße an alle.
Hallo, ahh ich habe glaube ich die Stelle über die Fuse Bytes im Datenblatt gefunden, sorry. Melde mich gleich wieder, obs mir geholfen hat. ;-) Grüße
Hallo, Ok ich denke ich habe das mit den Fuse Bytes verstanden. Die Fuse Byte/Bits configurieren unter anderem welche Quelle für den SystemClock verwendet wird oder den Divisor8. Was mir aber derzeit noch nicht so ganz klar ist, ist das ich nun bei einem externen Quarz (7,3...MHz) in das UBRRL Register eine 5 eintragen musste um auf 9600 Baud zu kommen. Im datenblatt steht 47 oder 95. Also muss irgendwo noch ein teiler sein der die externe Frequenz runter teilt. Könnte das das CLKPR Register sein? Grüße Hans
> Was mir aber derzeit noch nicht so ganz klar ist, ist das ich nun bei > einem externen Quarz (7,3...MHz) in das UBRRL Register eine 5 eintragen > musste um auf 9600 Baud zu kommen. Im datenblatt steht 47 oder 95. Welchen Wert hat die low fuse jetzt? Hast Du die CKDIV8 auf 1(!) gesetzt?
Hi >Was mir aber derzeit noch nicht so ganz klar ist, ist das ich nun bei >einem externen Quarz (7,3...MHz) in das UBRRL Register eine 5 eintragen >musste um auf 9600 Baud zu kommen. Wie kommst du auf 5? MfG Spess
> Wie kommst du auf 5?
Er stellt (imaginär) 76800 Bd ein um auf 9600 Bd zu kommen -> Der
Systemtakt läuft immernoch um Faktor 8 zu langsam. Ich vermute der TO
ist gerade damit beschäftigt, die CKDIV8 zu löschen.
Hallo, laut AVRStudio steht im LOW Fuses Byte der Wert 0x7D; das bedeutet ja das der CKDIV8 Bit auf 0 gesetzt ist. Aber welcher Teiler ist dann gesetzt? Danke für die Hilfe!!!!! Viele Grüße
> das bedeutet ja das der CKDIV8 Bit auf 0 gesetzt ist.
Ja, und das ist falsch.
Hallo, "Ich vermute der TO ist gerade damit beschäftigt, die CKDIV8 zu löschen." Was bedeutet der TO? Grüße Hans
> Was bedeutet der TO?
"ThreadOpener" aka "Frederöffner", also Du. Hast Du CKDIV8 inzwischen
gelöscht?
hans schrieb: > laut AVRStudio steht im LOW Fuses Byte der Wert 0x7D; das bedeutet ja > das der CKDIV8 Bit auf 0 gesetzt ist. 0 bedeutet: gesetzt! Hier zwei wichtige nützliche Webseiten für Dich: http://www.engbedded.com/fusecalc/ http://wormfood.net/avrbaudcalc.php
Hallo zusammen, vielen Dank für eure Hilfe. Nun scheint alle so zu funktionieren wie es das Datenbaltt vorgibt. Top!!!!! Ich allen schöne Feiertage. Noch mal vielen Dank such für eure Geduld. ;-) Viele Grüße
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.