- fchao-Sinus-Wechselrichter AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Problem bei UART Kommunikation zwischen ATmega und VB.net

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von masasibe
    Registriert seit
    21.01.2011
    Beiträge
    181

    Problem bei UART Kommunikation zwischen ATmega und VB.net

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo allerseits!
    Für ein Projekt muss ich mit VB mit einem ATmega über die UART Schnittstelle kommunizieren. Ich verwende Visual Basic 2008 und für die UART-Kommunikation verwende ich das Serial Port-Steuerelement.
    Der Code auf dem ATmega schaltet eine Statusled ein bzw. aus, wenn der String "aus" bzw. an" empfangen wurde. Mit dem Hyperterminal und dem ATmega hat das auch ohne Probleme sofort funktioniert, aber wenn ich das ganze mit VB versuche dann funktioniert es nur bei der ersten Übertragung und dann nicht mehr. Erst sobald der ATmega resettet wird funktioniert es mit VB wieder genau einmal und dann nicht mehr.
    Übrigens verwende ich einen ATmega32.
    Da es mit dem Hyperterminal funktioniert hat, glaube ich nicht, dass es an der Kabelverbindung liegt. Die Baudrate habe ich auch schon überprüft und die sollte stimmen.



    Hier mein VB Code:
    Code:
     PublicClass Form1
    PrivateSub cmdffnen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdffnen.Click
    If SerialPort1.IsOpen = FalseThen
    SerialPort1.Open()
    EndIf
    EndSub
    PrivateSub cmdSchlieen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSchlieen.Click
    SerialPort1.Close()
    EndSub
    PrivateSub cmdan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdan.Click
    SerialPort1.WriteLine("an" & vbCrLf)
    EndSub
    PrivateSub cmdaus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdaus.Click
    SerialPort1.WriteLine("aus" & vbCrLf)
    EndSub
    PrivateSub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    Dim x AsString
    x = SerialPort1.ReadLine.ToString
    MsgBox(x)
    EndSub
    EndClass
    
    Und hier der Bascom-Code für den ATmega:
    Code:
    $regfile "m32def.dat"
    $crystal = 1000000
    $baud = 1200
    Config Portd.5 = Output
    Statusled Alias Portd.5
    Statusled = 1
    Dim X As String * 10
    Do
        Input X
        If X = "an" Then
          Statusled = 1
        Elseif X = "aus" Then
          Statusled = 0
        End If
        
    Loop

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    33
    Beiträge
    1.192
    Hallo,
    kenne mich zwar nicht direkt mit Bascom aus, aber welche Länge hat denn die Zeichenkette X ? Also wie lange wartet der Prozessor bei Input X ?
    Wird das über Dim X As String * 10 festgelegt?

    Oder machen die Steuerzeichen die du mitsendest (vbCrLf) Probleme?
    Grüße,
    Bernhard

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Ich bin mir nicht sicher aber in C kann man Strings nicht einfach mit

    X = "aus"

    vergleichen. Möglicherweise liegt es daran......
    Mit Dim X as String * 10 legst du fest das X ein String ist der 10 Zeichen lang ist. Und wenn du dann schreibst:

    Input X

    wird alles was über den UART reinkommt in X reingeschrieben.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Meine Bascom-Kenntnisse sind schon etwas eingerostet, also nicht wundern wenn etwas falsch ist^^

    Ich würde das so machen.

    Dim X as String = "0"

    Do
    Input X
    If X <> "0"
    Call LED()
    End if
    loop

    Sub LED()
    If X = "an" Then Statusled = 1 Elseif X = "aus" Then Statusled = 0 End If
    X = "0"
    End Sub
    mfg

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von BMS Beitrag anzeigen
    Hallo,
    kenne mich zwar nicht direkt mit Bascom aus, aber welche Länge hat denn die Zeichenkette X ? Also wie lange wartet der Prozessor bei Input X ?
    Wird das über Dim X As String * 10 festgelegt?

    Oder machen die Steuerzeichen die du mitsendest (vbCrLf) Probleme?
    Grüße,
    Bernhard
    Input wartet auf das CR (Return) das LF (Linie Feed) ist input egal und das String Ende wird durch eine NULL gekennzeichnet. Ob das VbCrLf zusammen gesendet stört? Im Bascom Programm ist Dim X As String * 10 schon richtig.

    Gruß Richard

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    ich vermute auch, daß das LF am Schluß Probleme bringt. Schau mal den CONFIG INPUT Befehl an. Dort kann man festlegen, welche/s Zeichen INPUT beendet. Default ist nur CR.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied Avatar von masasibe
    Registriert seit
    21.01.2011
    Beiträge
    181
    Hallo Wsk8!
    Ich habe deinen Code eingebaut und ausprobiert, aber es hat leider trotzdem nicht funktioniert.

    Input wartet auf das CR (Return) das LF (Linie Feed) ist input egal und das String Ende wird durch eine NULL gekennzeichnet.
    Hallo Richard!
    In VB habe ich jetzt das vbCrLf durch vbCr ersetzt und auch das hat nicht geholfen. Muss ich das mit der Null am Ende des Strings noch einbauen?

    Das komische an der ganzen Sache ist ja, dass es immer das erste Mal funktioniert. Also wenn ich den ATmega einschalte und dann den "aus"-Button
    drücke, dann geht die Led aus nur dann geht sie nicht mehr an. Also irgendwie funktioniert die erste Übertragung, aber alle weiteren nicht mehr.

  8. #8
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Du musst den String auch immer leeren.
    Weil sonst kommt bei der ersten Übertragung ein "Aus" da rein und das steht dann da drin. Dann kommt die Abfrage und bei einer zweiten Übertragung kommt noch ein "Aus" oder "An" da rein und dann steht "AusAn" oder "AusAus" in dem String.

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.703
    Blog-Einträge
    133
    In VB bin ich nicht so fit. Könnte es sein, das beim Senden die "SerialPort1.WriteLine" schon von sich aus ein CRLF anhängt und mit dem & vbCrLf noch weitere angehangen werden? Gibt es ein "SerialPort1.Write"?

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied Avatar von masasibe
    Registriert seit
    21.01.2011
    Beiträge
    181
    Hallo Searcher!
    Kurz bevor ich deinen Beitrag gelesen habe, hatte ich die gleich Idee und es hat wirklich funktioniert.
    Wenn ich schreibe SerialPort1.write("an" & vbcr) dann klappt es ohne Probleme.

    Nur komisch, dass es mit SerialPort1.writeline("an") nicht funktioniert. Das habe ich nämlich ganz am Anfang geschrieben
    und das hat überhaupt nicht funktioniert. Aber vielleicht liegt es wirklich am LF das gesendet wird.

    Aber Hauptsache es funktioniert jetzt mit SerialPort1.write!

    Vielen Dank für eure Hilfe!

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Kommunikation zwischen 2 atmega
    Von 1.2.3.4.5.6. im Forum AVR Hardwarethemen
    Antworten: 17
    Letzter Beitrag: 31.08.2009, 17:33
  2. LCD-Kontrast und UART-Kommunikation zwischen 2 µcs
    Von MelMan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 04.12.2008, 16:25
  3. Kommunikation zwischen 2 ATmega
    Von Ozzy im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 16.03.2008, 17:11
  4. Kommunikation zwischen 2 oder mehr atmega
    Von mihailo im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 12.03.2007, 23:53
  5. Uart-Kommunikation zwischen µCs
    Von ProgDom im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 20.04.2006, 01:37

Berechtigungen

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

LiFePO4 Speicher Test