Forum: Mikrocontroller und Digitale Elektronik [Problem] AT89S8253 serielle Schnittstelle


von Karlheinz (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

im Anhang ist die Software für die serielle Schnittstelle eines 
AT89S8253 (ATMEL). Die Empfangsroutine hat einen Fehler.

Der Reihe nach:

1. Ein Modem erhält den die 3 Zeichen 41 54  0D  (A, T, <CR>)
Es wird immer dann ein Zeichen gesendet, wenn das Echo des 
vorhergehenden eingegangen ist. Das die Zeichen korrekt am Modem 
ankommen habe ich mit einem Sniffer überprüft.

2. Die Antwort vom Modem ist  0D A1 6A 35 0A fehlerhaft.
Die richtige Antwort ist 0D 0A 4F 4B 0D 0A (<CR>, <LF>, O, K, <CR>, 
<LF>)
Die Zeichen kommen am des Controllers auch so an, Dies habe ich wiederum 
mit dem Sniffer geprüft.

3. Was ist an der Empfangsroutine fehlerhaft?

Viele Grüße

Karlheinz

von Matthias K. (matthiask)


Lesenswert?

Wo ist die main Fkt.?

Ganz verstanden habe ich allerdings nicht, was Du da beschreibst?

von Karlheinz (Gast)


Angehängte Dateien:

Lesenswert?

> Wo ist die main Fkt.?
> Ganz verstanden habe ich allerdings nicht, was Du da beschreibst?

Hier ein 'komplettes' Programm. Mit Keil (aktuelle Software) erstellt 
und compiliert.

Es werden 2 serielle Schnittstellen verwendet:

1. der Hardware UART des Controllers 19200 Bit/s
2. ein Softwareschnittstelle zur Controller 9600 Bit/s

Das Problem ist ganz einfach, zu einem GSM-Modem wird ein AT-Befehl 
gesendet.Der AT-Befehl kommt 'ordentlich' (mit einem Sniffer überprüft) 
am Modem an. Die Antwort - ein einfaches OK -  vom Modem ist am Pin des 
Controller auch in Ordnung (wieder mit einem Sniffer geprüft).

Was fehlerhaft ist, ist das was im interen Buffer steht!

Im Puffer steht: 0D A1 6A 35 0A.
Vom Modem kommt und liegt auch am Pin an: 0D 0A 4F 4B 0D 0A

Den Bufferinhalt gebe ich die Softwareschnittstelle aus und schaue sie 
mir mit einem Terminalprogramm an. Ich nehme an das SBUF zum falschen 
Zeitpunkt gelesen wird.

von Karlheinz (Gast)


Lesenswert?

Eine Lösung habe ich gefunden. Wenn das GSM-Modem mit 2 Stopbits sendet 
funktioniert es, mit einem Stopbit nicht. Es sieht so, dass der 
AT89S8253 (Quarz? etc.) ein Problem mit dem Timing hat.

von Ralf (Gast)


Lesenswert?

Aus deiner Beschreibung werde ich nicht ganz schlau. Nochmal bitte:
Der Hardware-UART ist mit dem Modem verbunden, und der Software-UART 
dient nur zur Ausgabe für Debugging o.ä.?

> Wenn das GSM-Modem mit 2 Stopbits sendet funktioniert es, mit einem
> Stopbit nicht.Es sieht so, dass der AT89S8253 (Quarz? etc.) ein Problem
> mit dem Timing hat.
Ich glaube eher deine Software hat ein Problem. Überleg mal, dein Modem 
pustet mit 19200 Bd, dein Software-UART "nur" mit 9600 Bd. Allein das 
ist schon etwas kontraproduktiv, weil mehrere Bytes vom Modem schneller 
einträufeln können als du ausgeben kannst.

Aber lassen wir das mal aussen vor, und schauen wir uns deine 
Software-UART-Sendefunktion an. Du hast da ne Warte-Schleife für 100µs 
drin. Sind es jetzt wirklich mehr oder weniger genau 100µs oder 104,2µs 
für 9600 Bd? Wenn es eher 100µs sind, dann bist du über den 3% 
Fehlertoleranz einer UART-Schnittstelle.
Jetzt kommt aber noch hinzu, dass deine Bitknubbelei für den Soft-UART, 
also das Ermitteln welcher Pegel gesendet werden soll auch noch Zeit 
verbrät. Vielleicht gleicht das den "Zeitverlust" wieder aus.
Was noch zu beachten ist, während dein Soft-UART sendet, kann ja ein 
weiterer Interrupt des Hardware-UART kommen, und der bringt dein Timing 
für den Soft-UART durcheinander.
Kannst du einfach mal einen Text senden und schauen ob der richtig 
ankommt?
Für den Soft-UART solltest du probeweise mal während dem Senden den 
Interrupt des Hardware-UART sperren.

> Was fehlerhaft ist, ist das was im interen Buffer steht!
Glaube ich nicht, deine Baudrateneinstellung für 19200 sieht soweit 
richtig aus. Hast du die Möglichkeit, eine LED o.ä. einzuschalten wenn 
der Buffer den richtigen Inhalt hat?
Damit könntest du relativ schnell drauf kommen, welcher der UARTs ein 
Problem hat.

Ralf

von Karlheinz (Gast)


Lesenswert?

>> Wenn das GSM-Modem mit 2 Stopbits sendet funktioniert es, mit einem
>> Stopbit nicht.Es sieht so, dass der AT89S8253 (Quarz? etc.) ein Problem
>> mit dem Timing hat.
> Ich glaube eher deine Software hat ein Problem. Überleg mal, dein Modem
> pustet mit 19200 Bd, dein Software-UART "nur" mit 9600 Bd. Allein das
> ist schon etwas kontraproduktiv, weil mehrere Bytes vom Modem schneller
> einträufeln können als du ausgeben kannst.

Es ist so, wei ich es beschrieben habe. Der Software-UART dient nur der 
Kontrolle. Die Bytes können mit 19200 Bit/s ankommen und trotzdem mit 
9600 Bit/s über den Softwareuart weitergeleitet werden, da der Buffer, 
der im Interrupt gefüllt wird, groß genug ist.

Und nicht vergessen, mit 2 Stopbits im GSM-Modem geht es, mit einem 
nicht.

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.