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
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.
// 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.
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,
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
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