Hallo, ich möchte mit dem PIC16F627 8 LEDs über die RS232 Schnittstelle des PCs steuern. Die Verbindung mit der seriellen Schnittstelle erfolgt über einen MAX232. Der PIC ist mit 4Mhz getaktet. Den asm Code habe ich mal angehangen. Das Problem ist nun, dass das, was der PIC empfängt nichts mit dem zu tun hat, was ich ihm gesendet habe, d.h. die LEDs zeigen was völlig anderes an. Deshalb habe ich das Programm so geändert, dass der PIC das empfangene Byte gleich wieder an den PC zurückschickt. Dabei musste ich feststellen, dass das zurückgesendete Byte auch falsch ist. Aber das schlimmste ist, dass das zurückgesendete Byte auch nicht mit dem übereinstimmt, was die LEDs anzeigen. Ich habe auch schon verschiedene Geschwindigkeiten ausprobiert, das brachte aber keine Veränderung. Ich hoffe Ihr könnt mir dabei weiterhelfen. Danke, Rico.
Hallo Rico, 1. Der Programmspeicher beginnt bei 0x0005. Also zuerst: org 0x0001 ; nach reset goto Init ; bei Init starten ; org 0x0004 ; wenn verwendet ; goto interrupt ; / Init : 2. 'movfw' gibt es beim 16F62x nicht. Gerade als Anfänger sollte man sich an das Datenblatt halten. In diesem fall heisst es eigentlich movf RCREG, W ; RCREG nach W Aber dein Problem hört sich nach unterschiedlicher Bautrate (PIC <-> PC) an. Dazu würde ich empfehlen, beim Empfang auf Framing- und Overflow-Error zu prüfen. Ausserdem ist bei 4MHz und 9600Bd die Fehlerrate klainer (0,16%) gegenüber 2400Bd (1,67%). das sollte man auch immer beachten. Andreas
Hallo Andreas, danke erstmal für deine schnelle Antwort. Dass es beim PIC16F62x keinen 'movfw'-Befehl gibt habe ich nicht gewusst. Jedenfalls habe ich die asm Datei entsprechend korrigiert, aber leider ohne Erfolg, es hat sich nichts geändert. Ich weiß jetzt nicht, was du mit Framing- bzw Overflow Error meinst. Ich verwende zum Testen ein Programm aus dem Internet ('HTerm'), dort werden mir keine Fehler angezeigt. Wegen der Übertragungsgeschwindigkeit, da habe ich auch schon andere versucht (19200, 9600, 2400), es kam immer das gleiche raus. ich habe hier mal ein paar Werte vielleicht sagt euch das ja was: gesendet empfangen LED-Anzeige 00000000 00000000 11100000 00000010 00000011 11100001 00000100 00000100 11100010 00001000 00000000 11100000 00010000 00011000 11100100 11111111 11111111 11111111 Wie man sieht stimmen manche Werte überein und andere nicht. Das sind aber wahrscheinlich keine zufälligen Ergebnisse, denn ich habe die Werte jeweils mehrmals hintereinander geschickt und es kam immer das gleiche zurück. Ich habs auch schon an einem anderen Rechner versucht, auch hier warens die gleichen Werte. Danke, Rico.
Setz mal TX als Ausgang (in deiner INIT-Section): movlw B'11000010' movwf TRISB Ich meine Error-Handling beim PIC( due weisst sonst nicht, ob das Byte korrekt empfangen wurde. Z.B. so: Main btfss PIR1,RCIF ; sind Daten da ? goto Main ; nein, noch keine Daten da btfsc RCSTA,OERR ; Overrun Error ? bsf PORTB,4 ; ja, O-ERR LED AN btfsc RCSTA,FERR ; Framing Error bsf PORTB,5 ; ja, F-ERR LED AN movf RCREG, W ; RS232-Register auslesen bcf PIR1,RCIF call ShowByte ; empfangenes Byte auf den LEDs ausgeben goto Main
Hallo, die Einstellung für die Bautrate ist aus meiner Sicht i.O. bei 4Mhz scheit dies die max. mögliche Bautrate im asynchren Betrieb zu sein. Die Baudarte 9600 ist in meinem Datenblatt nicht definiert. Der entsprechende Auszug aus dem Datasheet ist angehängt. Die Konstante zur Einstellung der Baudrate ist jedoch vom Zahlensystem her nicht Qualifiziert. Der Assembler abreitet deshalb mit dem Standard-System. Das kann man irgendwo bei den Proejkt-Properties einstellen. Bitte prüfe deshalb ob dein Assembler auch tatsächlich dezimal meint. Am einfachsten, Du legst das Zahlensystem bei Konstanten immer explizit fest. In Deinem Fall wäre das dann: movlw d'25' cu
Hallo, Jetzt klappt es :-). Es lag tatsächlich an dem movlw d'25' Vielen Dank euch für die schnelle Hilfe, echt super! Rico.
> Die Baudarte 9600 ist in meinem Datenblatt nicht definiert. Der > entsprechende Auszug aus dem Datasheet ist angehängt. Na, dann blättere doch einfach eine Seite weiter: Table 12-5: BAUD RATES FOR ASYNCHRONOUS MODE (BRGH=1)
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.