Forum: Mikrocontroller und Digitale Elektronik Daten Empfangen via RS232


von Lukas H. (cupra100)


Lesenswert?

Hallo Zusammen!

Habe ein Problem beim Empfangen der Daten! Empfänger PIC 16f88
Sender PIC 16f887. Programmiert wird mit MPLAB in Assembler

Programm sieht wie folgt aus fürs Empfangen:

receive_data                  nop
        btfss   PIR1,RCIF
        goto   $-1
        movf  RCREG,w
                                return

So zu meinem Problem: Ich sende die Daten (z.B.: d'200') vom PIC16f887 
zum PIC 16f88. Der 16f88 erkennt dass er Daten bekommt und springt vom 
Befehl btfss PIR1,RCIF zum Befehl movf RCREG,w. Nur im RCREG steht dann 
nicht dezimal 200 sondern 0 drinnen. Warum steht jetzt aber nicht 200 
drinnen wenn er denn Befehl btfss übersprungen hat!
PS:Die Daten d'200' vom PIC16f887 gelangen mit Sicherheit auf die TX 
Leitung werden also gesendet.

Hat jemand eine Idee?

LG

von Lukas H. (cupra100)


Lesenswert?

Was ich noch hinzufügen muss!

Die Daten werden gesendet wenn ein Taster gedrückt wird!
Jedoch werden die Daten nicht immer geschickt wenn der Taster gedrückt 
wird.
Mal geht es, mal geht es nicht!

von Timo P (Gast)


Lesenswert?

Wenn du ein Oszi hast, kannst du verfolgen, ob die Signale sicher 
gesendet werden. Fehlerquellen sehe ich:

- falsche Baudrate eingestellt(also verschiedene)
- keinen sauberen Takt.(interner RC-Osz. statt Baudratenquarz)

wird receive Data zur richtigen Zeit ausgeführt? Ich würde den seriellen 
Empfang als Interrupt laufen lassen. Ist sicher in ASM auch möglich. 
Somit ist sichergestellt, dass du auf jedes Zeichen reagieren kannst. 
Evtl. hast du einen kompl. 8-Bit-Port frei? Dann könntest du die Daten 
parallel auf den Ausgangsport schicken zur Kontrolle. Wenn ich mich 
recht entsinne gibt es eine gute Seite für PICs, sprut.de heißt sie....

von Lukas H. (cupra100)


Lesenswert?

Ja Oszi hab ich gerade nciht bei der Hand!
Aber Baudrate ist mit Sicherheit die Richtige eingestellt. Das habe ich 
schon einmal mit dem Oszi überprüft.
Beim Takt wird der interne RC osz verwendet, aber das ist ja egal da 
Baudraten aufeinander abgeglichen worden sind mit dem OSCTUNE.
Ja das mit dem Interrupt hab ich mir auch schon einmal überlegt!

Jedoch besteht noch immer die Frage warum der Empfänger manchmal Daten 
bekommt und manchmal nicht und wenn er sie bekommt dann sind es die 
falschen Daten.

von Timo P (Gast)


Lesenswert?

er bekommt nicht immer daten, weil du nicht ständig hörst.

Wenn du selbst Ohrenstöpsel nutzt, und diese immer kurz rausholst, aber 
sofort wieder reinsteckst, hörst du nicht, was andere Leute flüstern. Du 
hörst nur Wortfetzen! du musst die Ohrenstöpsel rauslassen und ständig 
hören! Dann bekommst du alles mit! Also Interrupt zum Empfang! Dann in 
einen Buffer schreiben.

von Lukas H. (cupra100)


Lesenswert?

Naja..ich versteh was du meinst.
Aber ich höre immer! Also ich habs im Debug Modus rennen und befinde 
mich dann dauernd zwischen btfss PIR1, RCIF und goto $-1 .. und dann 
drück ich den Taster. Und manchmal überspringt er das goto $-1 also wenn 
er die Daten bekommt und manchmal 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.