- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 50

Thema: 3d Sensorboard CHR-6d Datenformat und Uart Geschwindigkeit

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    47
    Beiträge
    142

    3d Sensorboard CHR-6d Datenformat und Uart Geschwindigkeit

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    ich habe ein 3D Sensorboard CHR-6d

    http://www.shop.robotikhardware.de/s...roducts_id=221

    Mit der software über meinen PC kann ich alle Werte sehen.

    Wie sehen die Empfangenen Daten aus? Laut Datenblatt müssten die Daten Hexadezimal ausgegeben werden.

    Das Hyper Termnal macht bei mir deshalb nur Hyroglyphen.

    Hat jemand einen Bascom Codeschnipsel für mich, um diese Daten in normale ASCI Zeichensätze umzuwandeln und in verschiedene Variablen zu schreiben?


    Vielen Dank Im vorraus.


    Um die UART mit 115200 Baut zu betreiben benötigt man einen Quarz zB. einen 7,3728 MHz oder einen 18,432 MHz Quarz.

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    47
    Beiträge
    142
    Meine neue Erkentnis ist, das das Modul binär sendet.
    Wäre schön, wenn hier jemand seine Erfahrungen mit dem Moodul posten würde.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.05.2007
    Ort
    Im hohen Norden
    Beiträge
    227
    Guten morgen,
    ich habe dieses Board auch hier. Funktioniert denn das alles mit dem mitgelieferten Programm?

    Peter
    _________________________________________________
    [-X Quis custodiet ipsos custodes
    Ground-Effect-Stability-Robot www.peter-holzknecht.de

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Die Übertragung per UART ist immer binär, eine Abfolge von H und L - Pegeln, die für 0 und 1 als Bits stehen und die dann in der Regel ein Byte werden, dass dann beim AVR im UDR-Register landet.

    im Datenblatt:
    http://www.pololu.com/file/0J276/chr6d_datasheet.pdf

    Seite 7 steht wie der Sensor seine Daten übermittelt, nämlich als Abfolge von mehreren Bytes als Message, die mit der Zeichenfolge ASCII "s" "n" und "p" beginnen.

    http://www.torsten-horn.de/techdocs/ascii.htm

    sprich im UDR-Register tauchen nacheinander die Bytes / Zeichen
    "s" / 115
    "n" / 110
    "p" / 112 auf
    dann dahinter die Daten.
    Wie im Datenblatt beschrieben.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    47
    Beiträge
    142
    Hi,
    Mit dem Programm kann ich alle achsen sehen.
    Mit meinem alten xp Rechner funktionierte es nicht, da kam eine Fehlermeldung. Das hat mit directx und Java zu tun, soweit ich das verstanden habe.
    Mit meinem Notebook mit windows 7 funktionierte es sofort.
    Ich benutzte von myavr das UART to USB Modul.

    Per Terminalprogramm bekam ich nur Hiroglyphen. Mit dem Serial Programm von Robotikhardware, das gleiche. Wenn ich auf Hex stelle, dann Zeigt er Hex werte an, ob die stimmen weiss ich nicht.

    Es scheint, als ob das Terminalprogramm nicht weis, wann ein Datenpaket zu ende ist und wann das neue anfängt.

    Es werden wohl auf keinen Fall Achsinformationen wie roll=WERT, accZ= WERT ausgegeben, sondern nur die Werte hintereinander weg.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    47
    Beiträge
    142
    hi Vitis,
    danke für deine Nachricht.
    Das eine UART nur Binär senden kann ist ja logisch wo du mich mit der Nase drauf gestossen hast.

    Warum kann mann diese Abfolge dann nicht im Terminalprogramm sehen?
    Da die Paketlänge vom Standart abweicht und von den gesendeten Kanälen abhängig ist. (Die Kanäle können mit dem Tool von CH Robotics einzeil abgeschaltet werden.)
    Die Paketlänge besteht aus 7 + Gesendete Kanäle Bytes.

    Somit ist eine klare Anzeige über ein Terminalprogramm nicht möglich.

    Bitte berichtigt mich, wenn ich was falsches geschrieben habe.
    Es soll ja später für alle eine korrekte Ausarbeitung sein.

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    47
    Beiträge
    142
    Hier mal mein Code für das einlesen Per UART und Aufteilen des Strings in Bytes.

    Code:
    $regfile = "m8def.dat"
    $crystal = 7372800
    $baud = 115200
    
    Dim E As String * 13                                        'Länge des Strings hier einstellen. Abhängig von den gesendeten Kanälen.
    
    Dim Gyroz As String * 1
    Dim Gyroy As String * 1
    Dim Gyrox As String * 1
    Dim Accz As String * 1
    Dim Accy As String * 1
    Dim Accx As String * 1
    Dim Anfang As String * 1
    
    
    On Urxc Onrxd                                               'Interrupt auslösen, wenn volsändiges Zeichen geladen.
    Enable Urxc
    Enable Interrupts
    
    '------------------------------------------------------------------------
    Do
    
    Anfang = Left(e , 1)                                        '1. Byte lesen
    
    If Anfang = "115" Then                                      'Anfang des Datensatzes abwarten,damit nicht mittendrin in den String geschrieben wird.
       E = ""
    End If
    
    If Len(e) > 12 Then                                         'wenn kompletter Datensatz geschickt, dann in einzelne Variablen aufteilen.
       Gosub Werte
    End If
    
    Loop
    
    
    Onrxd:
    E = E + Chr(udr)                                            'neu empfangenes Byte anhängen
    Return
    
    Werte:
    Gyroz = Mid(e , 5 , 1)                                      'String e wird in die einzelnen Werte verteilt.
    Gyroy = Mid(e , 6 , 1)
    Gyrox = Mid(e , 7 , 1)
    Accz = Mid(e , 8 , 1)
    Accy = Mid(e , 9 , 1)
    Accx = Mid(e , 10 , 1)
    E = ""
    Return
    End
    Warum kann ich den auseinandergeschnittenen String nicht als Byte Dimensionieren? z.B: Gyroz?
    Ist das abwarten bis ein p(115) gesendet wird so richtig?
    If Anfang = "115" Then
    E = ""
    Wenn jemand etwas auffällt, bitte Posten

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    47
    Beiträge
    142
    Warum geht beim Nachricht schreiben der Scrollbalken in die Mitte dier Nachricht wenn die Nachrichtenbox voll geschrieben ist?
    Das nervt gewaltig

    Habs rausgefunden.
    Internet Explorer 8 nur in der Kompatibilitätsansicht verwenden.

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    das wird so nicht funktionieren, da ja die Datenbytes alles Mögliche enthalten können, unter Anderem auch den Binärwert von s und p.

    Das wird nur gehen wenn Du nen Ringpuffer verwendest, der mindestens 2mal die Paketlänge lang ist und dann quasi ne maske darüber schiebst.

    Sprich erst schiebst Du "snp" über den puffer, wenn da eine Übereinstimmung ist wertest Du das Type-byte aus, ob Du dieses Paket überhaupt haben willst, dann liest Du die Paketlänge aus und hüpfst die angegebene Paketlänge über den Buffer und bildest die 2 angehängten checksummenbytes aus um das Paket auf Richtigkeit zu prüfen.
    Dann und nur dann ist das ne gültige Message.

    schau Dir mal Overlayvariablen und Array an.

    du schreibst dann per urxc in den array und zählst den pointer hoch

    also pseudocode

    dim puffer(40) as byte
    dim pufferstring as string*39 at puffer overlay

    :uartempfang
    incr pufferpointer
    puffer(pointer)=udr
    if pufferpointer>39 then pufferpinter=0
    return
    :auswertung
    For Zaehler = 1 To 40
    Zeichenpointer=Zaehler
    If Puffer(zeichenpointer) = "s" Then
    Incr Zeichenpointer
    If Zeichenpointer > 40 Then
    Zeichenpointer = Zaehler - 40
    endif
    If Puffer(zeichenpointer) = "n" Then
    Incr Zeichenpointer
    If Zeichenpointer > 40 Then
    Zeichenpointer = Zeichenpointer - 40
    End If
    If Puffer(zeichenpointer) = "p" Then
    Snp_erkannt_flag = Zeichenpointer
    Else
    Snp_erkannt_flag = 0
    End If
    else
    Snp_erkannt_flag = 0
    End If
    else
    Snp_erkannt_flag = 0
    End If
    Next

    If Snp_erkannt_flag > 0 Then
    Gosub Weiter_zur_auswertung
    End If

    return

    irgendwie so halt
    return
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    47
    Beiträge
    142
    Ich benutze in einem Array 2 Zeiger. Den ersten Zeiger für aus dem UDR Register zu speichern und den 2. Zeiger um eine For next schleife zu benutzen um den Datensatzanfang zu finden. Ist der Datensatzanfang gefunden werden die Nachfolgenden 6 Bytes ausgelesen.

    Wenn das Hauptrogramm beim USART Interrupt für ein neu angekommenes Zeichen anhält, kann es sein das sich das Schreiben und das Lesen im Array überschneidet, so das Datenschrott ausgelesen wird?

Seite 1 von 5 123 ... LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad