Forum: Mikrocontroller und Digitale Elektronik PIC verschluckt Zeichen


von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen...

ich arbeite zur zeit mit dem PIC16F877, für diesen habe wurde das 
beigelegt Programm geschrieben.
Das Programm entfängt Zeichen von der seriellen Schnittstelle
und sendet diese auch gleich wieder zurück. Weiter schreibt er die 
Zeichen auch noch auf einen Ausgang.

Mein Probem ist nun wenn ich einen "Lehrzeichen" und dann ein "w" 
senden, kommt nur das "Lehrzeichen" und dann ein 00H zurück.
Wenn aber nun "ww" gesendet wird bekomme ich nur "w" zurück.
Der Efekt ist auch noch bei ein paar anderen Zeichen vorhanden.
Allerdings werden die Daten richtig auf dem Ausgang geschrieben.

Meiner Meinung nach kann es an dem Programm nicht liegen(habe eine ganze 
Menge Simulationen laufen lassen.
Der verwendete MAX232 ist scheint auch i.O. zusein, habe ihn mal die 
gesendeten Daten gleich wider zurück schicken lasse.

Hat einer von Euch mal derartiege Probeme gehabt?

MfG Tom

von Steffen (Gast)


Lesenswert?

Hallo Tom,

Erster Fehler in der ISR, Du lädst das Statusreg. mit movf zurück, was 
das Z-Flag verändert. Das sollte aber nicht das Problem sein. (oder 
vielleicht doch)

PIE1,RCIF wird durch lesen von RCREG zurückgesetzt, brauchst Du also 
nicht per Hand zu machen. Allerdings sollte man in der ISR abfragen ob 
der Interupt überhaupt freigegeben ist und das Flag abfragen. Gut bei 
dir ist nur ein Interupt freigegeben da sollte eigentlich nichts weiter 
passieren.

Vor dem Beschreiben von TXREG sollte man überprüfen, ob PIR1,TXIF 
gesetzt ist, sonst könnte ein Wert verloren gehen aber das dürfte auch 
nicht das Problem sein, da die Daten ja so gesendet werden wie sie 
reinkommen und die Zeit zwischen zwei Bytes ja mindestens 500µs (=500 
Befehlszyklen @4MHz) beträgt.

Könnte es evtl. sein, das b eim Sender ein Paritätsbit mit gesendet 
wird? Das könnte den Effekt erklären.

MfG
Steffen

von Tom (Gast)


Lesenswert?

Hallo Steffen;

mit der ISP du hast du natürlich recht. Aber meiner Meinung nach 
überprüft man das TXSTA,TRMT -bit auf Pufferüberlauf.

Wie auch immer selbst mit dem Änderungen ist der Fehler immernoch da.

von Olli (Gast)


Lesenswert?

Hallo Tom,

Du mußt warten bis das Transmit Shift Register (TXSTA,TRMT) auch 
wirklich leer ist, bevor Du das nächste Zeichen ins TXREG lädst, sonst 
werden da wirklich Zeichen verschluckt.

MFG Olli

von Tom (Gast)


Lesenswert?

Habe den Fehler gefunden! Das Probem liegt am PORTB,3. Scheinbar ist 
dieser Anschluss defekt.
Wenn die Daten nicht auf den PORTB geschrieben werden läuft das Programm 
perfekt.

von Steffen (Gast)


Lesenswert?

Daran sollte es eigentlich nicht liegen. Was mir aber noch aufgefallen 
ist, Du initialisierst PortC nicht.
MfG Steffen

von Tom (Gast)


Lesenswert?

Hallo Steffen,

sobalt das bit3 vom Portb setze bricht die Spannung auf der Platiene 
zusammen, dabei ist an ihm gerade mal eine 2mA Led angeschlossen.
Zum PortC kann ich dich beruiegen. Das Programm das ich euch zu 
verfügung gestellt habe, ist nur ein Ausschnitt eines
ca. 600 Zeilen-Programmes, und in diesem ist der PortC initialisierst. 
Aber Danke für den Hinweis

von Steffen (Gast)


Lesenswert?

Na dann ist ja alles klar.

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.