- 3D-Druck Einstieg und Tipps         
Seite 3 von 5 ErsteErste 12345 LetzteLetzte
Ergebnis 21 bis 30 von 50

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

  1. #21
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Anzeige

    LiFePo4 Akku selber bauen - Video
    schaue Dir einmal den INSTR Befehl an.

    Gruß Richard

  2. #22
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    schaue Dir einmal den INSTR Befehl an.

    Gruß Richard

  3. #23
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    47
    Beiträge
    142
    Hallo Richard,
    habe den befehl eingebunden.
    Funktioniert aber leider so nicht.
    Vitis hat mir noch den Tipp gegeben ein 2. overlay array einzubinden, um den gefundenen Datensatz komplett im 2. overlay zu zertrennen.
    Das habe ich nicht hinbekommen.

    Hier mal der neue Code:
    Code:
    $regfile = "m168def.dat"
    $crystal = 18432000
    $baud = 115200
    
     Dim Z As Byte
     Dim I As Byte
    
    Dim S As String * 24
    Dim B(25) As Byte At S Overlay
    
    
    Dim Dsz As Byte
    Dim Check As Integer
    Dim Pos As Byte
    Dim C As Byte
    Dim D As Byte
    Dim E As Byte
    Dim F As Byte
    
    'Dim Pitch As Integer At S(2) + C Overlay
    'Dim Roll As Integer At S(2) + D Overlay
    'Dim Gyroz As Integer At S(2) + E Overlay
    'Dim Chk As Integer At S(2) + F Overlay
    
    On Urxc Onrxd                                               'Interrupt auslösen, wenn volsändiges Zeichen geladen.
    Enable Urxc
    Enable Interrupts
    
    Config Lcd = 16 * 3 , Chipset = Dogm163v5
    Config Lcdbus = 4                                           'configure lcd screen
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portd.7 , Db6 = Portd.6 , Db7 = Portd.5 , E = Portd.2 , Rs = Portd.3
    Waitms 100
    Initlcd
    Waitms 100
    Display On
    Cursor Off Noblink
    Cls
    
    
    Do
    
    Zurueck:
    
    
    
    
    If Dsz > 23 Then
       Cls
       Dsz = 0
       Pos = Instr(s , "snp")
       C = Pos + 6
       D = Pos + 8
       E = Pos + 10
       F = Pos + 12
       Dim Pitch As Integer At S(2) + C Overlay
       Dim Roll As Integer At S(2) + D Overlay
       Dim Gyroz As Integer At S(2) + E Overlay
       Gosub Werteschreiben
        End If
    
    
    Loop
    
    
    Onrxd:
    Incr Dsz
    B(dsz) = Udr
    Return
    
    
    Werteschreiben:
    If Pos = 0 Then                                             'wenn pos =0 dann wurde snp nicht gefunden
       Goto Zurueck
       End If
      Cls
    
    Locate 1 , 1 : Lcd "Pitch= " ; Pitch
    Locate 2 , 1 : Lcd "roll= " ; Roll
    Locate 3 , 1 : Lcd "gyroz= " ; Gyroz
    'Lcd "pos= " ; Pos
    
    Return
    
    End
    Kann den code mal jemand für mich berichtigen?
    So gibt mir das Display für alle 3 Werte 28275 aus mit ein paar Störungen zwischendurch.
    Dim in der Programmschleife ist ja auch nicht so prickelnd oder?
    Ich hätte nicht gedacht, das ich an dieser Sache so hängen bleibe.

  4. #24
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    das wird schon nix werden wegen dem Goto Zurueck da läuft Dir der Stack über weil Du ja per Gosub in die Subroutine springst.
    Verbanne Goto aus dem Sprachschatz, das ist wirklich nur in ganz ganz wenigen Ausnahmen sinnig gebrauchbar.

    Die DIM's gehören an den Anfang des Programms, das wird vom Compiler nur einmal gemacht, die IF davor wird niemals was ergeben zur Redimmensionierung der Variablen. Das ginge nur, wenn Du direkt auf das S-RAM per adressierung zugreifst.

    Den Code berichtigen liefe auf das Schreiben eines neuen Codes hinaus ... mir persönlich zu viel Arbeit.

    Mein Tip: geh nochmal ganz zum Anfang, besorge Dir ein gutes Buch über Bascom Programmierung und arbeite Dich dort Schritt für Schritt durch Programmstrukturen und Programmabläufe. Sorry, klingt hart, ist aber herzlich gemeint. Programmieren ist kein Rätselraten, sondern harte Arbeit vor allem am Anfang.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #25
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Goto sollte man verbieten, Gosub /return oder Call/return ist
    allemal besser.Zuweisungen wie config oder Dim u.s.w. gehören immer ganz am Anfang, der Compieler reserviert da einfach nur Speicherplatz für die Variablen. Wenn Du diesen Speicherplatz später veränderst (wenn das überhaupt geht), überschreibst du vorher zugeordnete Adressen b.z.w. deren Inhalt!!!

    Gruß Richard

  6. #26
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    47
    Beiträge
    142
    Hi Vitis / Richard, okay goto streiche ich von meinem Befehlssatz.
    Ich habe das Bascom AVR Buch von Roland Walter. Über sein Beispiel habe ich auch das Overlay Array aufgebaut. Ich habe das Buch bestimmt schon 4 x gelesen und auch fast alles verstanden. Ist sozudagen meine Bettlektüre bei jedem neuen Projekt, das ich starte.

    Die geringe Beteiligung in diesem Thread durch andere Forumsmitglieder zeigt mir, das entweder dieses Thema (Overlay und bytes aus Strings in andere Variablen, Maskierung) bei vielen noch nicht so klar ist / nicht verstanden wurde (wie bei mir) oder

    die Leute keine Lust haben zu antworten (Das ich mir nicht vorstellen kann)

    Wenn ich fertig bin, werde ich auf jeden Fall den funktionierenden Code hier reinstellen, damit andere auch was davon haben.

    Einfach nur die komplette Lösung bekomen behindert bei den meisten Leuten den Lernprozess. Ich selber will es ja auch verstehen.
    Deshalb bin ich für jeden Tip dankbar.

  7. #27
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Diese ganze STR "Sch****" ist auch zum Mäusemelken.
    Mit den Overlay habe ich mich auch noch nicht richtig befasst, ist auch irgendwie dämlich beschrieben. Ich teste neues immer möglichst klein gehalten bis ich den Sinn (hoffentlich) verstanden habe. Erst danach setze ich das zu einem Programm zusammen, ist übersichtlicher.

    Gruß Richard

  8. #28
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    47
    Beiträge
    142
    ich hänge heute auch schon 4 studen dran und habe es ohne overlay zu Fuss nochmal versucht mir die einzelnen strings in bytes auf mein Display auszugeben.

    nur mal ein auszug:
    Code:
    Pos = Instr(empfang , "snp")
       Datensatz = Mid(empfang , Pos , 15)             'snp Datensatz 15er Länge komplett in einem String
    
       Cls
       astring = Mid(datensatz , 1 , 1)
       Bb = astring
       Locate 1 , 1 : Lcd Bb
    aus dem array "empfang" den Anfang des Datensatzes finden, dann in einen neuen kleineren String "datensatz"übernehmen.
    dann mit MID ein Byte in Astring übernehmen.
    Astring in ein Byte umwandeln und ausgeben.

    Ich habe so per Hand 8 werte auf mein Display gegeben, die sich aber nicht merklich ändern bei Bewegung der Platine.
    Der 10. Wert ändert sich von 81 auf was anderem im Sekundentakt, das wars.

    Ist es richtig das ich mit makeint aus 2 Bytes ein Integer zur anzeige machen kann?

  9. #29
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    47
    Beiträge
    142
    So endlich gute Neuigkeiten. \/
    Ich habe den Modus von Dauersenden (Broadcast mode) auf senden bei Nachfrage (Silent Mode) geändert.
    Jetzt zeigt mit das Terminalprogramm auch alle bytes wie beschrieben an.
    @Richard klein anfangen war ein guter Tipp.
    Das Get_Data Packet, das geschickt werden muss, schicke ich mit printbin und sieht so aus:
    115,110,112,1,0,1,82
    s,n,p,PT,N,chksum,chksum
    Im Datenblatt steht PT=0x01 (Mit dem Windows Rechner von Hex 01 nach Dez)
    Die Checksum wird so errechnet: alle Werte addieren, die letzten(linken) 8 bit sind das 1. Checksum Byte und die anderen 8 Bit das 2. checksum Byte.
    In diesem Fall 115+110+112+1=338

    Zur Verdeutlichung:
    338 sind Binär 1 01010010 = Letzte Byte 00000001 also 1= Dez 1 und
    in das erste Byte 01010010 also 1010010 =Dez 82

    Jetzt weiss ich wenigstens schonmal was da ankommt. Der Datensatz unterscheidet sich um 2 Bytes von der größeren chr6dm Platine!!!

    Es muss ein Terminalprogramm verwendet werden, das auch dezimal ausgeben kann, sonst sieht man nur snp und danach Hyroglyphen.
    Ich nehme das von Robotikhardware, war auf einer CD beim Funkboard dabei.

  10. #30
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    47
    Beiträge
    142
    Hier meine Befehlsliste mit den Befehlen, die ich benötige.
    Angehängte Dateien Angehängte Dateien

Seite 3 von 5 ErsteErste 12345 LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad