Problem mit 18F4550 EUSART

OP #2743989
Lesenswert?

hallo,

Ich versuchs jetzt schon 3 Tage und Ihr seid so ziemlich meine letzte 
Hoffnung ;).

Die Aufgabe: PIC "horcht" über max485 einen 500kbaud Profibus ab.

Das ganze funktionierte auch mit einem 16F874.(16Mhz)

jetzt habe ich aber einen 18F4550 , weil ich was schnelleres zum 
Antworten brauche (innerhalb 200us).

Den habe ich auch erstmal mit 16Mhz beschaltet, aber es tut sich nicht 
viel.
Ich habe einen Ausgang auf Trigger gesetzt, immer dann , wenn der RCIF 
kommt.
Beim Einschalten zeigt der LA ca. 100 Triggerimpulse, welche auch 
zeitlich richtig liegen (ca.2us nach dem Stop-Bit).
Dann fallen die Impulse aber langsam aus, und es tut sich nix mehr :-(.

meine Einstellungen

Osci: HS,no Postscaler,

Interrupts: GIE=1,PEIE=1,RCIE=1;

I/O: TRISC=0b10000000; ADCON1=0XFF

TX: TXSTA.TX9 = 1;
    TXSTA.TXEN = 0;
    TXSTA.SYNC = 0;
    TXSTA.BRGH = 1;

RX:
    RCSTA.SPEN = 1;
    RCSTA.RX9 = 1;
    RCSTA.ADDEN = 0;
    RCSTA.CREN = 1;

    SPBRG=1; //16/2x16= 0,5

Auslesen: void Interrupt ()
              {
              if (PIR1.RCIF==1){
              Byte=RCREG;
              Trigger=1;
              }
               return;
              }

unten im Programm läuft dann eine Endlosschleife.

Ich habs auch mit 48 MHZ und der PLL probiert, aber immer das Gleiche..

hat jemand eine Idee??
Danke.
Gast #2745013
Lesenswert?

Hi,
also ich setze ein Anybus IC zur Anbindung des PIC an den Profibus ein.
Wusste gar nicht, dass man das komplexe Prifibus-Protokoll per reiner 
Software auf dem PIC hinbekommt.
Möchtes Du einen echten DP Slave mit allem drum und dran machen ?
Mich würde der Schaltplan und das Programm mal intressieren.
Gruß Dirk
OP #2745025
Lesenswert?

hi,

zur Zeit empfange ich nur, und dabei wird der Ausgang vom 485 auf den 
RC7 vom PIC gelegt.
Die Software ist auch einfach,
die Daten reinkommen lassen (Interrupt),
und dann mittendrin über Startbyte den Typ und die die Länge auswerten,
Und in der Sync Pause die Byts von einem Array (max30byte) an die 
jeweiligen Profibus Bytes (SD2,LE,DAT) usw. zuweisen.
Naja, und dann eben auswerten und die Antwort innerhalb der Tsdr Zeit 
mit der Antwort beginnen,
Aber das sind bei 500k nur 200us, und deshalb brauche ich mindestens 
einen 48Mhz PIC,

was aber leider immer noch nicht mit den 18F4550 funktioniert..:-(
OP #2794406
Lesenswert?

hallo,

falls es noch jemanden interessiert...

mit dem 4550 habe ich es nicht stabil zum laufen gebracht,

erst, als ich auf einen 2550 gewechselt bin funktionierte es 
einwandfrei.
Der läuft jetzt mit 48Mhz (PLL)

über den 485 funktioniert das Empfangen und Senden auf dem Profibus 
einwandfrei.
Da ich die Daten parallel ausgebe brauche ich nur ca. 100us 
Reaktionszeit,
bei serieller Ausgabe wären es 300us und damit schon über dem 
theoretischen Limit (bei 500 kbaud)
Was mich seriell einbremst ist das ausselektieren der einzelnen Bits aus 
dem Word:

Stelle=1

for(a=1;a<17;a++){
Sendebit = (Wordwert & Stelle) / Stelle;
Stelle=Stelle*2;

}

da rechnet er trotz 48Mhz ewig und 3 Tage...

gibt es da einen schnelleren Algorithmus?

Grüße

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren