Hallo Leute, ich habe folgendes Problem. Ich habe ein Demoboard und PC zur Verfügung. Hat jemand Erfahrung wie diese Geräte über RS232 verbinde, damit Daten zwischen beiden veschicken könnte? Ich habe schon ein Programm für meinen PIC geschrieben. PIC und PC verbinde über ein NullModem kabel. Für Kommunikation benutze Hyperterminal. Wenn die Daten vom PIC sende, werden sie von Hyperterminal empfangen, aber wenn ich ein Zeichen sende, wird von PIC gar nichts empfangen. Danke, wenn jemand antwortet
Du musst im Sourcecode auf Zeile 54 statt:
1 | if (c==0) { |
schreiben:
1 | if (c!=0) { |
Dann sollte es gehen. Sagt jedenfalls meine Kristallkugel.
Severino R. wrote: > Du musst im Sourcecode auf Zeile 54 statt: >
1 | > if (c==0) { |
2 | >
|
> schreiben: >
1 | > if (c!=0) { |
2 | >
|
> > Dann sollte es gehen. Sagt jedenfalls meine Kristallkugel. ich habe folgender Sourcecode: char z; if(!DataRdyUSART()) { z=ReadUSART(); Delay_ms(100); putcUSART(z); } Ich möchte ein Zeichen epmfangen und dieses Zeichen zurück schicken. Leider klappt's nicht..
Hallo zusammen, Arbeitet jemand mit C18-Compiler von Microchip? Ich versuche schon seit 3 Tagen PC über USART mit PIC zu verbinden... In Dateianhang ist mein Sourcecode. Wenn irgendwelches Zeichen sende oder empfange, dann sehe ich ganz anderes Symbol auf dem Bildschirm und LCD. Weisst jemand vielleicht, wo ich Fehler habe. Danke
ich muss ehrlich gestehen, dass ich bis jetzt nur immer USB gebraucht habe und nie RS232, aber von Michrochip gibts ganz bestimmt C18-sourcecode-beispiele (musst mal im installationsordner gucken). ansonsten kann ich dir auf die schnelle sagen, dass die schlaufe schneller durchlaufen wird, als dass du zeichen empfpfängst, die du 'z' übergeben kannst; geschweige denn zurücksenden ;) ...musst du da nicht irgend ein while(noch_nicht_übertragung_beendet) oder so ähnlich abfragen?
Dieses Beispiel habe ich doch aus dem C18 Getting start genommen. RS232 benutze, weil das alles unter DOS ablaufen soll.
Andreas, ich arbeite zwar nicht mit C18 sondern mit C30, aber probier doch mal den UART Empfangsinterrupt freizugeben, schreib eine ISR und setze im MPLAB eine breakpoint in die ISR um dann mit Watch das UART Empfangsregister zu lesen ob Du das gesendete Byte empfängst. Falls nein: HW oder Konfig Problem Falls ja: kleinen Ringbuffer in die ISR für empfangene Bytes, dann statt direkt aus dem UART aus dem Ringbuffer lesen. So mach's ich. Gruß Gerd.
Hallo Andreas, was hast du denn an dem Teil für einen Quarz dran? Ich vermute, dass die Baudrateneinstellung nicht stimmt.
Hallo Gerd, danke für deine Antwort. Ich habe an meinem PIC noch ein 4MHz Qurz. Baudrate habe ich so ausgerechnet: x=(16MHz/1200/64)-1
if(!DataRdyUSART()) { Heisst das nicht soviel wie: wenn NICHT DataRdyUSART() Dann wuerde der Inhalt der Klammer nur abgearbeitet, wenn KEINE Daten bereit stehen. Matth
Ich habe mit if(!DataRdyUSART()) auch ausprobiert. Obwohl ich kein Zeichen sende wird der Inhalt trozdem abgearbeitet..
Hallo Andreas, dein Rx-Pin muss ein Eingang sein. Wenn ichs nicht übersehen habe, wird dies nirgendwo gemacht. Muss dorthin wo die TRIS-bits stehen.
Hallo Micha, Du meinst, dass ich TX als Ausgang, RX als Eingang? ich habe so auch ausprobiert TRISC0b10000000; Es bringt nichts..
Andreas I. wrote: > Ich weiss nicht wie ich die Fehlerflags anschauen könnte.. Da mußt Du schon das Datenblatt zum PIC lesen. Kapitel UART, UART register (Hast ja nicht verraten welchen PIC du hast)
Setz mal bei deinem OpenUSART statt USART_BRGH_HIGH ein USART_BRGH_LOW. Sonst dürfte die Rechnung nicht funktionieren. Habe allerdings nicht in dem zu deinem PIC passenden DS nachgesehen, sondern in einem anderen.
Ich habe schon Datenblätter angeschaut. Ich kann nicht Debbuger benutzen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.