Hallo alle zusammen, da ich schon ziemlich am verzweifeln bin bitte ich euch um eure hilfe: ich will über die rs232 daten an labview senden --> funktioniert teilweise... ziel: einlesen der rs232 über interrupt -> rücksenden einer wertereihe mein problem: wenn ich nur konstanten sende funzt es perfekt void main(void) { initIO(); initINTERRUPT(); initSERIELL(); while (1){ if (receive==ON){ // nur senden nach empfang for (i=0;i<26;i++){ TXREG=125; //senden Delay100TCYx(DELAY1); //warten bis byte sicher übertragen } receive=OFF; //rs232 lesebit wieder aus } } return; } BILD: konstant aber wenn ich veränderbare werte schicke dann bricht er die übertragung nach 10 byte ab ???? while (1){ if (receive==ON){ // nur senden nach empfang for (i=0;i<26;i++){ TXREG=i; //senden Delay100TCYx(DELAY1); //warten bis byte sicher übertragen } receive=OFF; //rs232 lesebit wieder aus } } BILD: variable ich hab echt keine ahnung mehr was da falsch läuft... hab das programm schon auf das notwendigste reduziert. alle variablen als unsigned char deklariert habt ihr eine ahnung? danke klaus
Hi, ICh sehe gerade keinen Offensichtlichen Fehler... Da ich von gestern Nachmittag bis vor wenigen Minten aber bis auf wenige Pausen durchgehend selber an einem Firmware Projekt gesessen habe sagt wohl nicht mehr viel aus ;-) Aber das er genau bei 10 abbricht macht mich etwas Stutzig, zumindest klingeln da meine Alarmglocken... Es ist ja einer der "besonderen" Werte! Ich bin selber kein großer LabView Anwender, ausser mal ein bissl runmgeklickt habe ich damit noch nichts gemacht. aber könnte es sein das dein Problem nicht beim PIC sondern beim PC liegt? Klar, deine LAbview Applikation wertet die Daten in Rohform aus, aber könnte es sein das irgendwo in den Tieferen Schichten Der empfang doch zwischendurch als Ascii interpretiert wird? Dann würde der Wert 10 Dezimal = 0x0A als "LineFeed" ausgewertet was durchaus dann eine Unterbrechng bewirken könnte. Ist abern nur die Theorie von jemanden der heute auch den Wald nicht nicht mehr finden würde wenn er mitten drin steht... Du könntest ja einfach mal (REIN TESTWEISE) einen Offset einbauen, also Beispielsweise so: while (1){ if (receive==ON){ // nur senden nach empfang for (i=65;i<91;i++){ TXREG=i; //senden Delay100TCYx(DELAY1); //warten bis byte sicher übertragen } receive=OFF; //rs232 lesebit wieder aus } } Als Ascii Interpretiert würde er so nur das Alphabet senden. (Oder auch erst einmal anschauen was dein jetztziger Code macht wenn du statt Labview ein Terminalprogramm zum Empfang nutzt) Funktioniert es dann, dann liegt der Fehler auf PC seite. Gruß Carsten
hallo carsten, danke!!!! jep wenn ich von 20 - 65 ausgebe funzt es. jetzt weiß ich wo ich ansetzten muss - vielen dank klaus
anstelle des delay wuerde ich die hw auswerten, von der sput homepage: RS232out btfss PIR1,TXIF ; ist Sender leer ? goto RS232out ; nein, noch nicht leer movfw Zeichen ; nächstes Byte holen movwf TXREG ; und in den RS232-Sender schreiben also in etwa so, ist an deine mcu anzupassen while (1){ if (receive==ON){ // nur senden nach empfang for (i=0;i<26;i++){ while(!TXIF); TXREG=i; //senden } receive=OFF; //rs232 lesebit wieder aus } }
@chris: werd ich machen - hab ich nicht daran gedacht! zur info: im Labview kann (muss) man bei der initialisierung der seriellen schnittstelle das abschlussbyte deaktivieren grüße klaus
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.