Forum: Mikrocontroller und Digitale Elektronik Probleme mit 20Mhz Resonator am ATmega328


von Michael L. (nightflyer88)


Angehängte Dateien:

Lesenswert?

Hallo

Habe Probleme mit einem 20Mhz Resonator (CSTCE20M0V53-R0) an einem 
ATmega328. Irgendwie schwingt der nicht richtig. Ich benutze HW UART mit 
38400baud und die Daten kommen nicht sauber raus, nur die ersten paar 
bytes und dann nur noch Schrott. Verwende ich den internen RC mit 8Mhz, 
ist alles IO, daten kommen sauber.

Ich bin mir überhaupt nicht sicher ob ich die Fuses richtig eingestellt 
habe, anbei mal ein Foto.

von Stefan S. (sschultewolter)


Lesenswert?

Und wo ist der Code? Hast du U2X gesetzt? Wenn nein, sollte das Fehler 1 
sein, da hier ein Fehler von > 1% auftritt

von Michael L. (nightflyer88)


Angehängte Dateien:

Lesenswert?

Ich programmiere in Bascom...
Im Code ist momentan 8Mhz Taktfrequenz für den internen RC eingestellt.


Stefan S. schrieb:
> Hast du U2X gesetzt?

In welchem Register ist das ?

von Noch einer (Gast)


Lesenswert?

Und wie sieht die Platine aus? Bei 20MHz klappen Steckbrett und 5cm 
Kabel nicht mehr.

von Bastler (Gast)


Lesenswert?

Mal abgesehen von Deinem Problem, auch in BASCOM sollte man so was 
vermeiden:

Goto Beginn

und das

Waitus 500

in der Empfangsroutine ist auch eher dubios.

von Thomas E. (thomase)


Lesenswert?

Michael L. schrieb:
> Ich programmiere in Bascom...
Das ist egal.

> Im Code ist momentan 8Mhz Taktfrequenz für den internen RC eingestellt.
Und bei der Frequenz ist auch das U2X-Bit egal.

> In welchem Register ist das ?

UCSR0A

Und guck dir im Datenblatt das Kapitel "Examples of Baud Rate Setting" 
an.

mfg.

von Michael L. (nightflyer88)


Lesenswert?

Bastler schrieb:
> Mal abgesehen von Deinem Problem, auch in BASCOM sollte man so was
> vermeiden:

Der ATmega fungiert letztendlich als UART Puffer zwischen einem 
Funkmodul und einem Bluetooth Modul. Der AVR empfängt Daten vom 
Funkmodul, wartet bis die RTS Leitung am Bluetooth-Modul Low ist, und 
sendet die Daten weiter.

Bastler schrieb:
> Goto Beginn
>
> und das
>
> Waitus 500

braucht es alles...

von Thomas E. (thomase)


Lesenswert?

Michael L. schrieb:
> Der ATmega fungiert letztendlich als UART Puffer zwischen einem
> Funkmodul und einem Bluetooth Modul. Der AVR empfängt Daten vom
> Funkmodul, wartet bis die RTS Leitung am Bluetooth-Modul Low ist, und
> sendet die Daten weiter.

Warum nimmst du dann keinen Baudratenquarz, sondern ersten einen 
Resonator und zweitens einen, der nicht passt?

mfg.

von Bastler (Gast)


Lesenswert?

Michael L. schrieb:
>> Goto Beginn
> braucht es alles...

LOL

von Michael L. (nightflyer88)


Lesenswert?

Thomas E. schrieb:
> Warum nimmst du dann keinen Baudratenquarz, sondern ersten einen
> Resonator und zweitens einen, der nicht passt?

Den hatte ich gerade noch.. Hast natürlich recht, aber mit 20Mhz sollte 
es doch nur ein Fehler von 0.2% ergeben ?

In Bascom wird mit Config Com1 = 38400 , Synchrone = 0 das U2X bit 
gesetzt.

von Thomas E. (thomase)


Lesenswert?

Michael L. schrieb:
> aber mit 20Mhz sollte
> es doch nur ein Fehler von 0.2% ergeben ?
Dazu kommt noch die Toleranz des Resonators.

Mit einem 18,432MHz Quarz wäre die Abweichung 0. Egal bei welcher 
Baudrate. Die 38K4 machst du doch auch nur, weil es nicht schneller 
geht.

Was manchmal hilft, ist mit 2 Stopbits zu senden. Ist aber auch keine 
Garantie.

mfg.

von M. K. (sylaina)


Lesenswert?

Thomas E. schrieb:
> Dazu kommt noch die Toleranz des Resonators.

Also wenn die eine Relevanz hat ist entweder der Code Mist oder der 
Resonator für die Tonne.

von Thomas E. (thomase)


Lesenswert?

Michael K. schrieb:
> Also wenn die eine Relevanz hat ist entweder der Code Mist oder der
> Resonator für die Tonne.

Der Code nicht unbedingt. Mit 8Mhz geht es ja.

Ausserdem sind noch 2 andere Kandidaten beteiligt, die ihrerseits auch 
wieder ihre Toleranzen mit einbringen. Da man auf die keinen Einfluss 
hat, sollte man wenigstens den einen auf 0 bringen. Zumindest schadet es 
nicht.

mfg.

von nico_2010 (Gast)


Lesenswert?

Hello,
With 20MHz ceramic resonator try to use 2400 baud to see if data 
communication is OK. If it is, check with 19200 baud (error+0.2%). 
Anyway, you will not get 38400 baud with this resonator frequency due to 
great error (-1.4%).

von Michael L. (nightflyer88)


Lesenswert?

Also ich lass im Moment den 20Mhz Resonator weg, und nehme den internen 
8Mhz. Bis jetzt funktionierts ohne Fehler und die Geschwindigkeit reicht 
völlig aus.

Sollten in Zukunft weitere Funktionen dazu kommen, und der AVR evtl zu 
lahm werden, nehme ich dann einen richtigen Quarz.

von Michael L. (nightflyer88)


Lesenswert?

Noch was anderes:
Gibt es eine Möglichkeit in Bascom den HW UART Puffer höher als 255byte 
einzustellen ?

von c-hater (Gast)


Lesenswert?

nico_2010 schrieb:

> With 20MHz ceramic resonator try to use 2400 baud to see if data
> communication is OK. If it is, check with 19200 baud (error+0.2%).
> Anyway, you will not get 38400 baud with this resonator frequency due to
> great error (-1.4%).

That's nonsense.

Refer ATMega 328 data sheet page 193. Using U2X0=1 and UBRR0L=64 you'll 
get an systematic error of 0.2% only. This accuracy is much more than 
sufficient to establish a working connection.

von Marc H. (marchorby)


Lesenswert?

Das ist ja das Schöne an BASCOM! Auch wenn es murks ist was man 
programmiert, es funktioniert am ende und das ist entscheidend xD

von M. K. (sylaina)


Lesenswert?

Michael L. schrieb:
> Gibt es eine Möglichkeit in Bascom den HW UART Puffer höher als 255byte
> einzustellen ?

Du brauchst als Puffer mehr als 255 Bytes??? Uff…also ich glaub mein 
größter UART-Puffer, den ich je benutzt habe, war 20 Zeichen lang…

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
Noch kein Account? Hier anmelden.