PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [gelöst] USART ATMega16 != ATMega644 ?



MeckPommER
20.01.2011, 14:28
Hallo liebe Roboter-Gemeinde - ich stehe auf dem Schlauch bei einer Sache, bei der ich eigentlich noch nie Probleme hatte, den seriellen Schnittstellen.

In einer Schaltung sitzt ein Atmega16, der von einem PC seriell Befehle bekommt, diese dann per SPI an diverse andere Controller weiterleitet und brav Rückmeldungen an den PC verschickt. Funktioniert auch alles bestens.

Da ich mehr RAM im Controller brauche, kurzerhand den 16 durch einen ATMega644 ersetzt, def-File angepasst, Fuses angepasst, und ... Pustekuchen :-/ Es scheinen Zeichen in mindestens eine Richtung gelegentlich verloren zu gehen. Je nach übermitteltem Bytewert scheint das mal mehr oder mal weniger wahrscheinlich zu sein. 90% kommen zwar richtig an, aber aus verständlichen Gründen dürften es gerne mehr sein ;-)

Klingt alles sehr nach falscher Baudrate, deshalb habe ich die entsprechenden Register geprüft - alles fein. Fuses sind auch ok ... nur gehen hier und da Daten flöten.

Zweites Phänomen:

Die Untercontroller sind parallel zum Programmieradapter an MOSI/MISO angeschlossen und werden per ChipSelect vom Controller selektiert. Den Atmega16 stört es nicht, wenn die anderen Controller ausgeschaltet und angeschlossen sind. Der ATMega644 hingegen wird nicht erkannt, wenn die anderen Controller mit angeschlossen sind.

Falls jemand eine Idee hat ... ich bin ganz Ohr :-)

Gruß MeckPommER

Thomas$
20.01.2011, 14:31
fuse bits für den quarz gesetztt?
und auch den teiler 1/8 rausgenomen
und im programm die richtige quarzfrequens angegeben?

MeckPommER
20.01.2011, 14:38
ja.
jo.
auch das.

MeckPommER
20.01.2011, 16:52
Mit 2 Stopbits funktioniert die Kommunikation zwischen PC und µC, aber das ist für mich ein Workaround und keine wirkliche Lösung des Problems.

Nachtrag: die Verbindung läuft mit 115200 baud und der Atmega läuft mit einem 18,432 MHz Quarz. (Das dies mit dem Atmega16 ging und mit dem Atmega644 nicht ... hat mich zusätzlich erstaunt)

TobiKa
20.01.2011, 17:12
Funktioniert es besser, wenn du die Baudrate runter setzt?

MeckPommER
21.01.2011, 07:59
So, wie mein Urgroßvater immer sagte: "Ist der Bug nicht digital, versuch es analog nochmal" ;-)
Ein 3.3KOhm Widerstand vom seriellen Eingang des µC auf Masse brachte den gewünschten Erfolg. Hier scheinen sich intern die Controller zu unterscheiden.

Gruß MeckPommER