Forum: Mikrocontroller und Digitale Elektronik PIC18F4550 daten über RS232 an LABView


von klaus_at (Gast)


Angehängte Dateien:

Lesenswert?

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

von Carsten (Gast)


Lesenswert?

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

von klaus_at (Gast)


Lesenswert?

hallo carsten,

danke!!!! jep wenn ich von 20 - 65 ausgebe funzt es.

jetzt weiß ich wo ich ansetzten muss - vielen dank

klaus

von chris (Gast)


Lesenswert?

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
    }
  }

von klaus_at (Gast)


Lesenswert?

@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
Noch kein Account? Hier anmelden.