Forum: Mikrocontroller und Digitale Elektronik Problem mit Taktfrequenz beim Mega 2560!


von Hendrik L. (lbd)


Lesenswert?

Hallo zusammen,

kämpfe mit einem mekrwürdigen Problem:

Habe zwei Boards von unterschiedlichen Herstellern, jedes mit einem Mega 
2560 bestückt. Beide haben ein Uhrenquarz, Beide extern mit 16 MHz 
getaktet.

Auf dem ersten Board läuft ein selbstentwickeltes Programm einwandfrei - 
unter anderem blinkt eine LED im (nahezu) Sekundentakt. Das Programm 
wurde mit STK500 (ohne Bootloader) geflashed.

Auf dem anderen Board blinkt diese LED bei gleichem Programm und 
gleichen Fuses wesentlich schneller - ~ Faktor 8 - 10. Auch sekündliche 
Meldungen über das UART kommen nun mit Zeitraffer-Geschwindigkeit.

Runtersetzen der Geschwindigkeit um Faktor 8 über CKSEL hat nichts 
gebracht - kein Effekt.

Merkwürdig war: Habe das zweite Programm zuerst mit Bootloader geflashed 
und dann versucht mit BootLoader das eigentliche Programm zu laden. Hat 
aber nicht geklappt.

Habe dann mit dem STK500 auch im zweiten Board das Programm über ISP 
geflashed ... dann kam es zu dem oben beschriebenen Phänomen.

Wie gesagt - Programm an sich läuft - aber eben zu schnell. UART funzt 
auch ... Meldungen werden übertragen , aber zu schnell.

Hat dazu jemand eine erste Idee ?


Danke im voraus!

von Oliver J. (skriptkiddy)


Lesenswert?

Hendrik L. schrieb:
> Faktor 8 - 10.

Hört sich nach der CKDIV8-Fuse an. Würde ich mal danach schauen, auch 
wenn du meinst das die fuses identisch sind. Nach deiner Hardware- und 
Fehlerbeschreibung, ist das für mich die einzige logische Erklärung.

Gruß Skriptkiddy

von spess53 (Gast)


Lesenswert?

Hi

>Hört sich nach der CKDIV8-Fuse an. Würde ich mal danach schauen, auch
>wenn du meinst das die fuses identisch sind. Nach deiner Hardware- und
>Fehlerbeschreibung, ist das für mich die einzige logische Erklärung.

Aber nur wenn bei identischen Programmen bei einem die serielle 
Übertragung nicht geht.

MfG Spess

von Oliver J. (skriptkiddy)


Lesenswert?

spess53 schrieb:
> Aber nur wenn bei identischen Programmen bei einem die serielle
> Übertragung nicht geht.

Stimmt. Hatte ich nicht bedacht.

Dann ist aber meiner Meinung nach an der Fehlerbeschreibung was faul.

Gleicher µC
+Gleiche Taktversorgungen
+Gleiche Fuses
---------------------------
=Gleicher Takt


Und aus gleichem Takt folgt bei gleichem Programm (selbes Hexfile 
vorrausgesetzt) schließlich das selber Verhalten.


Ich könnte mir aber vorstellen, das er das Programm eventuell nocheinmal 
kompiliert hat und dabei nen falschen Takt angegeben hat. Wenn dann 
Delays verwendet werden, könnte es trotz richtig initialisiertem UART zu 
falschen Timings im Programmablauf kommen.


Gruß Skriptkiddy

von spess53 (Gast)


Lesenswert?

Hi

>Dann ist aber meiner Meinung nach an der Fehlerbeschreibung was faul.

Oder beim 'langsamen' Programm nur das Blinken getestet.

Mfg Spess

von Oliver J. (skriptkiddy)


Lesenswert?

spess53 schrieb:
> Oder beim 'langsamen' Programm nur das Blinken getestet.

Durchaus denkbar.

Grüße Skriptkiddy

von Hendrik L. (lbd)


Lesenswert?

Nee- Programm ist sehrausführlich getestet.

Aber Eure Diskussion hat mich darauf gebracht, dass ja das Problem 
eigentlich nur mit dem Uhrenquarz zusammenhängen kann!

Wenn die UART-Kommunikation funktioniert ....!

Werde mich malum die "Sekunden-Interrupts" kümmern. Sicherheitshalber 
werde ich auch mal das Programm vom funktionierenden Board auslesen und 
in das andere Board flashen ... Nicht, dass ich den Source Code 
zwischenzeitlich irgendwo verschlimmbessert habe.

Werde berichten.

von Hendrik L. (lbd)


Lesenswert?

Hallo,

habe noch einmal die Programme ausgelesen (verifziert) - sind beide die 
exakt gleichen Versionen!

Mmmmh - da muss ich mal weiter forschen. Werde erst einmal mit dem Oskar 
die Uhrenquarz Frequenzen messen.

von Peter D. (peda)


Lesenswert?

Hendrik L. schrieb:
> Aber Eure Diskussion hat mich darauf gebracht, dass ja das Problem
> eigentlich nur mit dem Uhrenquarz zusammenhängen kann!

Du weißt aber schon, daß man einen Uhrenquarz nur dann braucht, wenn 
Batteriebetrieb nötig ist, d.h. Stromsparen.

Ansonsten ist es einfacher, den CPU-Quarz zu zählen.
Dann muß man sich auch nicht mehr mit dem Asynchronmodus des T2 
rumplagen. Da sind ja ziemliche Umstände nötig, ehe Register und Bits 
gültig sind.


Peter

von Thomas E. (thomase)


Lesenswert?

Das Problem kenne ich.
Allerdings mit anderen Controllern (48, 88, 168).
Bei denen lag es an der Versorgungsspannung. Die Atmegas, die ich kenne, 
lassen sich alle mit einer Spannung unterhalb, der für die jeweilige 
Taktfrequenz im Datenblatt angegebenen betreiben. Also im Grunde werden 
sie dann übertaktet. Bislang lief bei mir damit alles, bis auf eine 
Sache, rate mal welche: Uhrenquarz am Timer2 läuft ungefähr 8 mal so 
schnell wie erwartet.

von Hendrik L. (lbd)


Lesenswert?

Ich glaub's nicht:

Nachdem ich einen anderen UhrenQuarz aus einem defekten Board eingelötet 
habe ist alles o.k.!

So einfach können Lösungen manchmal sein.

Vielen Dank für Eure Hilfe.

Grüße

von Hendrik L. (lbd)


Lesenswert?

D

Peter Dannegger schrieb:
> Du weißt aber schon, daß man einen Uhrenquarz nur dann braucht, wenn
> Batteriebetrieb nötig ist, d.h. Stromsparen.

Allerdings- das wußte ich nicht. Ich dachte bislang immer, dass man 
Uhrenquarze braucht, weil die Prozessorquarze zu ungenau sind.

Habe ich wieder was gelernt - Danke!

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.