- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 34

Thema: PIC18F452: USART Kommunikation in C

  1. #11
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Anzeige

    Powerstation Test
    Hacken heißt, einfach rumprobieren, ob irgendeine Reaktion erfolgt.
    Wenn dort fix steht, 5 Bytes, dann soll es gelten.

    Die Return werte 0xE0, 0x80 etc. könnten hinweisen, daß das Comm-Format nicht stimmt, oder die Baudrate
    Du schickst 1 start / 8 Bits / No parity / 1 Stop NO Flowcontrol
    Da kann was klemmen

    UND noch eine ev. Gemeinheit: Vielleicht will der Kerl Flowcontrol mit RTS/DTR haben ? ( z.B Modems lieben das)

    EDIT
    Ein Versuch: mach zwischen dem senden zweier Zeichen eine kleine Pause, manchmal hilft das. (ein paar mS)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    09.02.2005
    Ort
    CH
    Beiträge
    14
    ok, ich hacke demfall schon die ganze zeit...

    Was ist das Comm-Format?

    Die Baudrate sollte stimmen, die Parameter des Empfängers sind:
    9600 Baud, 8 Datenbits, gerade Parität (even), 2 Stoppbits!!
    Da stimmt was nicht mit meinem Code überein...Aber wie ändere ich z.B., dass die parity even ist?
    (Weiss nicht wie, habe keine Erfahrung mit C auf Pic, nur auf PC-ebene. Oder dann Assembler, aber ich sollte es in C schreiben)

    Noch eine Info: Um die Verbindung herzustellen, muss ich folgendes tun, bevor ich Daten abfrage oder Einstllungen mache:

    RTS = Low setzen
    DTR = High setzen

    Nach ca. 30ms, wenn der Oszillator des Empfängers stabil ist, wird ein ETX geschickt. Mein Code macht das so.

    Die Verbindung steht, bis DTR = Low oder 0.5 sec. nichts geschickt wird.

    Thx. for your help, gruss Michi

  3. #13
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Oh je, Oh je, mir schwant Unheil.
    die Parity kannst du mit dem 9-Bit modus noch reinquetschen, mußt aber selber rechnen, fürcht ich. (das is aber ein Klacks)
    ABER
    2 Stop-Bits wird der Pic, fürcht ich, gar nicht draufhaben, da müßtest du ev. im Datasheet nachschauen.
    Was du wahrscheinlich machen mußt, ist "software UART". --> d.i. selbst gestrickt, zumindest beim Senden.
    Ohnmächtg geworden ?
    Du mußt im Bitraster von 9600 Baud deine Bits einzeln raus-schicken
    (Rechnerei)
    Ein Einser = Startbit
    deine 8 -Datenbits das paritybit bei jedem einser toggeln
    das Parity schicken
    und noch zwei 1-er = Stoppbits.

    *seufz oh graus*
    am besten Testen mit einem Terminal (Hyperterm oder so)

    Bevor du aber zu schreiben beginnst, tät ich mit dem genannten Test-Terminal erst mal den Empfänger direkt ansprechen. die Binären codes halt zuerst zusammensuchen (ALt / Ziffernblock den asciicode/ alt wieder auslassen)
    sorry

  4. #14
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    20.06.2004
    Beiträge
    256
    Zwei Stopbits stellen beim Empfang im PIC kein Problem dar. Beim Senden kann man schon die UART des PIC verwenden, muss aber vor dem Neuladen des TXREG eine Bitperiode abwarten --> ergibt 2 Stoppbits.

    Also warten, bis TRMT=1, dann Pause, dann erst nächstes Byte senden. Nicht TXREG neu laden, wenn TXIF=1 (Sende-Interupt).
    BlackBox

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    09.02.2005
    Ort
    CH
    Beiträge
    14
    Hllo und merci für den post

    Nun, ich hoffe ich habe es richtig verstanden, aber ein Codebeispiel wäre hilfreicht.

    Und: Um die Verbindung herzustellen, muss ich folgendes tun, bevor ich Daten abfrage oder Einstllungen mache:

    RTS = Low setzen
    DTR = High setzen

    Nach ca. 30ms, wenn der Oszillator des Empfängers stabil ist, wird ein ETX geschickt. Aber ein ETX empange ich gar nicht.

    mfg michi

  6. #16
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    20.06.2004
    Beiträge
    256
    Was empfängst Du dann?

    Hier ist auch ein fehler im Quellcode:
    Code:
    while (!DataRdyUSART());    // warten, solange keine Daten ankommen 
    
        store = ReadUSART();        // Get the character received from the USART */ 
        while (BusyUSART());
    Du liest das empfangen Byte aus und wartest dann darauf, dass der Sendepuffer lehr ist. Gut, nicht unbedingt ein Fehler, wenn die Funktion nur das Flag überprüft aber unnötig.

    Die Pause zur verlängerung des Stoppbits müsstest Du wie PicNick schon geschrieben hat immer nach der funktion while(BussyUSART()); ausführen. Ich habe nur keine Ahnung, ob die Funktion TXIF oder TRMT abfragt. Das müsste aber aus der Doku ersichtlich sein. Ich verwende einen anderen Compiler.
    BlackBox

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    09.02.2005
    Ort
    CH
    Beiträge
    14
    Ich empfange nichts oder irgendetwas, z.B. 0xE0, 0x80, 0xF0, 0xFF...
    (siehe oben).

    Das mit der Pause zur verlängerung des Stoppbits muss ich erst noch im Datenbuch nachsehen...

    Ich lerne Elektroniker und kenne mich mit C auf uP-Basis nicht aus, ich habe nur Grundlagen von C auf PC-Ebene und ich kann Assembler. Aber ich sollte es mit C machen.

    Gruss Michi

  8. #18
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    20.06.2004
    Beiträge
    256
    Da ja nur ein Byte gesendet wird (nehme ich jetzt mal an) passt da irgendwas nicht. Entweder die Baudrate stimmt nicht oder es liegt irgendwo ein Hardwarefehler vor. Letzeres ist wahrscheinlicher, da bei falschen Einstellungen immer das gleiche falsche zeichen empfangen werden würde.
    Ich lerne Elektroniker und kenne mich mit C auf uP-Basis nicht aus, ich habe nur Grundlagen von C auf PC-Ebene und ich kann Assembler. Aber ich sollte es mit C machen.
    Macht doch nichts. Jeder fängt mal an.

    MfG
    BlackBox

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    09.02.2005
    Ort
    CH
    Beiträge
    14
    Zitat Zitat von BlackBox
    Ich lerne Elektroniker und kenne mich mit C auf uP-Basis nicht aus, ich habe nur Grundlagen von C auf PC-Ebene und ich kann Assembler. Aber ich sollte es mit C machen.
    Macht doch nichts. Jeder fängt mal an.

    MfG
    Ja, jeder fängt mal an, wollte nur sagen, dass von mit nicht allzu viel zu erwarten ist

    mfg

  10. #20
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Hi, vor lauter Stopp-Bits vergessen wir ganz auf das Parity-Bit, der Kollege legt eventuell Wert darauf.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad