Forum: Mikrocontroller und Digitale Elektronik PIC18f4680 eusart


von David (Gast)


Lesenswert?

Hallo

Ich habe probleme mit der eusart Schnittstelle des Pics. Auf meinem 
Board habe ich den Pic mit 24Mhz quarz und ein LTC485 als RS485 wandler 
verbaut.
Zur Verbindung mit dem Computer habe ich ein USB->RS485 Wandler.
Die Verbindung vom Pic zum Computer funktioniert einwandfrei.

Nun habe ich das Problem, wenn ich aber vom PC senden möchte, messe ich 
das Signal am RX pin, doch der Pic löst keinen Interrupt aus und das 
RCIF flag wird auch nicht gesetzt.

In der WriteByte Funktion habe ich zuerst TXIF abgefragt, doch dieses 
bleibt immer auf 1 =(The EUSART transmit buffer, TXREG, is empty).
Desshalb habe ich da ein Delay.

In meinem Versuchen habe ich bereits sichergestellt, dass ich nicht 
gleichzeitig mit beiden Sende.

Hier noch die relevanten Funktionen.


void interruptinit(void){
  RCONbits.IPEN = 1;    //Low und High Priority Interrupt   INTCON = 0;
  INTCONbits.GIEH = 1;  //High Priority Interrupts Enable
  PIE1 = 0;
  PIE1bits.RCIE = 1;    //UART Recieve interrupt zulassen
  IPR1bits.RCIP = 1;    //UART Recieve interrupt  High Prio
}

unsigned char ReadByte(void){  // 1 Byte vom Eingang lesen
    return RCREG;
}

void WriteByte(char byte){   // 1 Byte an den Ausgang senden
    RT = 1;
    TXREG = byte;
    Delay100TCYx(70);  // Senden
    RT = 0;
}
void InitUSART(void){
    RT = 0;
    TXSTA   = 0b00100100;    // 8Bit,async
    SPBRG   = 155;      // Baudraten Generator 9600
    RCSTA   = 0b10010000;     // Seriell ein,8Bit, Asynchron
}

von David (Gast)


Lesenswert?

David schrieb:
> void interruptinit(void){
>
>   RCONbits.IPEN = 1;    //Low und High Priority Interrupt   INTCON = 0;
>
>   INTCONbits.GIEH = 1;  //High Priority Interrupts Enable
>
>   PIE1 = 0;
>
>   PIE1bits.RCIE = 1;    //UART Recieve interrupt zulassen
>
>   IPR1bits.RCIP = 1;    //UART Recieve interrupt  High Prio
>
> }

Kleine änderung

RCONbits.IPEN = 1;    //Low und High Priority Interrupt
INTCON = 0;
INTCONbits.GIEH = 1;  //High Priority Interrupts Enable

von David (Gast)


Lesenswert?

Am Aufruf der Interrupt Routine kann es nicht liegen, ich habe soeben 
versuchsweise mit dem Timer0 Interrupts ausgelöst.

von David (Gast)


Lesenswert?

Ich habe das problem gefunden!!!!
Es war ein Hardwarefehler

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.