PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PICDEM-Board, RS232 Stirbt nach übertragung



Phyres
16.10.2011, 15:47
Hallo alle zusammen!

Ich soll für ein Schulprojekt die Verbindung zwischen dem PICDEM-Board(18F87j11) und einem PC via RS232 Realisieren.
Genauer gesagt soll es möglich sein einen Kurzen Text vom PC zum PIC zu senden und diesen auf dem Display anzuzeigen.
Das ganze ist soweit fertig das es möglich ist den Text via Terminal zu senden sodass der PIC ihm empfängt und auch korrekt auf dem Display anzeigt. Nur sobald der Gesendete Text mehr als 3 Zeichen beträgt werden die ersten 4 angezeigt und dann tut sich nichts mehr bis zum
Reset.

Meine RS232 Routine:



schleife
btfss PIR1, RCIF ;Was am Eingang?
goto schleife ;Nein?.... Warten!
movf RCREG ;Ja?....Ab mit den Daten ins Work
movwf writepuffer ;Vom Work zum Display
call Schreiben ;Aufs Display schreiben
goto schleife ;Auf ein neues



Ich glaube mich zu erinnern irgendwo mal gehört zu haben das es irgendwas mit dem Empfangpuffer und dessen Überlauf zu tun hat.
Wenn dem so ist, wie kann ich dann drumherum arbeiten?

-schumi-
16.10.2011, 16:21
Hallo Phyres, und herzlich willkommen im RN :-)

Deine LCD-Routine hat mit Sicherheit auch einige Warteschleifen, oder? (LCDs sind ja bekanntlich nicht die schnellsten...)

Während der µC also noch aufs LCD wartet, läuft der Buffer über...

Lösungsmöglichkeiten:

Eine gaaaanz niedrige Baudrate
Eine Delay beim Senden (nach jedem Buchstaben)
[Eleganteste Lösung] Wenn du z.B. sagen kannst, dass der gesendete Text max. 20 Zeichen hat: Leg ein Array an mit 20 Zeichen an und speicher da den Text rein. Wenn dann das Zeichen für ein Zeilenende kommt rufst du das Unterprogramm fürs LCD auf und schreibst das Array raus
Viele Grüße
-schumi-

Phyres
16.10.2011, 16:42
Danke für die Schnelle Antwort
Ich werde die Möglichkeit mit dem Array versuchen.

mfg Phyres

theborg
19.10.2011, 04:13
Warum nutzt du kein Interrupt ? proling bei UART ist ne beschissene Geschichte vorladendem kannst dann die Daten zum Display senden und der ISR löst erst wieder aus wen neue Daten da sind d.h. du hast etwas Zeit und du kannst den ISR sperren solange das Display noch werkelt.

Phyres
20.10.2011, 12:38
Danke für den Hinweis. Ich bin davon ausgegangen das ich über Interrupts zum ursprünglichen Problem zurückkomme und mir das Board wieder Abschmiert weil zu viele Daten zu schnell gesendet werden.

Durch die arraymethode funktioniert die Übertragung soweit, nur habe ich jetzt das Problem das mir auf dem Display statt dem Zeichen komplett Schwarz angezeigt wird. An der Routine kann es nicht liegen denn die hab ich nicht verändert. Kann da was mit der Kommunikation nicht stimmen? Beim dem Letzten versuchen hat das Board nach jeden gesendeten Zeichen mit dem identen Zeichen geantwortet aber jetzt antwortet es nur mit [00]. Ich hab schon ältere Versionen Probiert und überall der selbe Fehler.