UART-Senden-Empfangen mit 2 MC

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • UART-Senden-Empfangen mit 2 MC

      Ich probiere die serielle Übertragung zwischen zwei MC aus und bin leider nicht erfolgreich.An MC1 sind 4 Taster angeschlossen, die bei Betätigung eine bestimmte Zahl erzeugen. Mit dem 5. Taster wird die Übertragung gestartet. Mein Empfänger MC2 zeigt aber stets Fehler an, bei meinem Programm leuchten alle drei LEDs. Das parallel an der Übertragungsleitung angeschlossene Terminal zeigt die richtigen Zahlen an. Hier ist das Programm für MC2:

      'rs-Empang mit M8, 11.10.24


      $regfile = "m8def.dat"
      $crystal = 3686400


      Config Portd = Output
      Portd = &B00000000
      $baud = 9600


      Dim Ausgabedaten As Byte


      Do
      If Ucsra.rxc = 1 Then
      Ausgabedaten = Udr
      Select Case Ausgabedaten 'Anzeige auf LED
      Case 1 : Portd.5 = 1
      Case 26 : Portd.6 = 1
      Case 161 : Portd.7 = 1
      Case 171 : Portd.5 = 1 : Portd.7 = 1
      Case Else : Portd.5 = 1 : Portd.6 = 1 : Portd.7 = 1
      End Select
      End If
      Wait 1
      Portd.5 = 0 : Portd.6 = 0 : Portd.7 = 0
      Loop


      End
      Files
      • rstest8.bas

        (573 Byte, downloaded 5 times, last: )
    • Hallo,
      dies ist ja nur das Empfangsprogramm, das Sendeprogramm wäre auch interessant.
      Wenn du wie üblich einfach print benutzt, wird nach der Zahl auch noch eine CR und LF gesendet. Die haben die Codes 10 und 13, führen also zum Case else.
      Mach doch einfach noch einen Case für 10 und 13 dazu, ohne einen Port zu schalten.
      Und setze das Wait 1 lieber in die If Ucsra.rxc = 1 Abfrage, sonst wird wohl immer das CR oder LF gefunden.
      Du musst die Ausgänge auch als Output konfigurieren, damit sie richtig Strom treiben können.
    • Morning!
      Hier mal ein funktionierendes Programm für den ATMega48
      nach dem Polling-Verfahren. Empfangen werden 2 Byte!
      Wait 1 kann auch außerhalb der If-Abfrage stehen. Mußt nur langsam
      senden.
      Einfach mal mit dem PC verbinden und mit einem Terminal-Programm testen.
      Ich habe mir auch mit Visual-Basic eine eigene Kommunikation geschaffen.
      Bei Bedarf mal melden.
      Files
    • Vielen Dank für die Hinweise. Komme leider nicht jeden Tag dazu, werde auf jeden Fall die Beispiel-Datei "durchforsten".
      Wait 1 habe ich gesetzt, damit die Übertragung sichtbar wird und anschließend wieder bereit ist.
      Das Sendeprogramm hänge ich an.
      michl
      Files
      • testrs.bas

        (866 Byte, downloaded 10 times, last: )
    • Hallo michl,
      dein Sender schickt wegen des ; hinter dem Print zwar kein CR/LF, aber Print wandelt den Wert in ASCII um.
      Aus einer 1 wird also der dezimale Wert 49, aus 2 50 und aus 161 werden die drei Zeichen 49 54 49.

      Am einfachsten kannst du deine Kommunikation zum Laufen bringen, indem du anstelle von Print einfach Printbin benutzt.
      Eine 1 bleibt dann eine 1 und die 161 wird als ein Zeichen mit dem dezimalen Wert 161 übertragen.
      Dabei wird nichts umgewandelt und kannst auch das ; weglassen.