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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.