ATTiny 2313 Baudrate

Gast #3932667
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
Gast
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
Gast
> 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.
Gast
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
Gast
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?
Gast
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.
Gast
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.
Gast
> 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.
Gast
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.
Gast
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
Gast
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
Gast
> 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?
Gast
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
Gast
> 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.
Gast
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.