Sporadische Aussetzer Serielle Kummunikation AVR

Gast #1448788
Lesenswert?

Hallo,
Ich habe eine serielle Datenübertragung zwischen einem 89C51cc03(Master) 
und 8 ATMega 8(Slaves) als serielle Schnittstelle(2400Baud). Rxd und Txd 
physikalisch über 82C250(Can Treiber).
Der 89C51cc03 ist im Can Netzwerk und fragt die Slaves auf Kommando ab.
Antwortet ein Slave nicht wird nach 0.6 und 1.2Sec das Kommando 
wiederholt.
Etwa einmal pro Tag oder seltener antwortet ein Mega 8 nicht mehr.
(Protokoll mit PC mitgeschrieben). Nach neuem Kommando (an 89C51CC03 die 
Atmega abzufragen) funktioniert alles wieder.
89c51cc03 ist in C Programmiert; Der Mega8 in Bascom (Interrupts in 
Assembler).
Quarz 89C51CC03 16Mhz
      AtMega8 8 Mhz
Hat irgendjemand eine Idee woran das liegen könnte?

Als Anhang ist ein Auszug des ATMega Source.

Über einen guten Tip wäre Ich glücklich.
Angehängte Dateien:
#1448832
Lesenswert?

Verendest Du den internen Taktgeber des ATMEGA ?

Ich hatte schon mal das Problem, dass der auf der Grenze lag, dann kam 
es auch zu sporadischen Aussetzern, weil die Baurate eben nicht 2400 
Baud war sondern eher 2300 Baud. In der Regel hat es dann geklappt, aber 
manchmal eben nicht.

Gruss
Axel
Gast #1448848
Lesenswert?

Die Probleme vom Axel kann ich bestätigen.
Ich hatte das gleiche Problem bei zwei Atmega 48 die ca. über
2 Meter per RS232 verbunden waren und im gleichen Raum. (auch gleiche
Temperatur) Mit dem Internen 8 MHz Oszillator war die Sache nicht so
toll stabil. Abhilfe: Entweder externer Quarz oder eine Art automatische
Baudrate-Erkennung.
Letzteres ist recht einfach:
Ein Zeichen z.B. 20H (das Blank) oder 30H (die ASCII-Null "0")
senden, der Empfänger mißt das ein oder 2 Bit breite H-Signal aus
und stellt den Teilerfaktor vom Uart entsprechend ein.
Am Kalibrierfaktor für den  Ozzillator braucht man NICHT "drehen"-

Mit obiger Lösung hatte ich das Problem in den Griff bekommen.
Es reicht vollkommen, wenn nur eine "Seite" nachgestellt wird.

Gruß

James
Gast #1448868
Lesenswert?

>eigentlich sollte bekannt sein, dass wenn man eine zuverlässig
>funktionierende UART will, dass man einen quarz benutzen MUSS...

Das halte ich für ein Gerücht. Sonst gäbe es nicht dauernd Leute, die 
den internen RC-Oszillator für zeitkritsche Aufgaben verwenden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren