Forum: Mikrocontroller und Digitale Elektronik Problem mit 18F4550 EUSART


von Sven R. (sveniii)


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.

von Sven R. (sveniii)


Lesenswert?

hat keiner eine Idee?

kann es sein, das die UART die Bytes nicht erkennt und dann nach ~ 100 
Versuchen aufgibt und keine neuen INT mehr auslöst?,

Es kommt aber alles vorschriftsmäßig rein

;Start;9Daten,Stop

???

Grüße Sven

von Dirk F (Gast)


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

von Sven R. (sveniii)


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..:-(

von Sven R. (sveniii)


Lesenswert?

es funktioniert;
da Problem ist die Betriebsspannung , die muss aufs mV genau stimmen, 
damit die Frequenzen synchron laufen...
Oder man muss die Quarze ausmessen?
Auto-Baud detekt geht leider nicht da der Bus kein 55h sendet...

grüße Sven

von Sven R. (sveniii)


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

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.