- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte
Ergebnis 31 bis 40 von 50

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

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

    LiFePo4 Akku selber bauen - Video
    Hier etwas neues.
    Ich lasse erst nach Aufforderung senden.
    Die Werte sehen auf meinem Display schon gut aus.

    nur wenn der negative Wert zum ositiven Wert umschlägt ist er plötzlich sehr groß, kippe ich die Platine weiter sieht es wieder besser aus.

    Mache ich da noch was mit den zusammengeführten einzelstrings was falsch?
    Es soll einen complement Integer ergeben.

    Hier mein Code:
    Code:
    $regfile = "m168def.dat"
    $crystal = 18432000
    $baud = 115200
    $hwstack = 32                                               ' default use 32 for the hardware stack
    $swstack = 10                                               ' default use 10 for the SW stack
    $framesize = 40                                             ' default use 40 for the frame space
     Dim Z As Byte
     Dim I As Byte
    
    Dim Empfang As String * 14
    
    Dim Nick As Integer
    Dim Nicka As String * 1
    Dim Nickb As String * 1
    
    Dim Roll As Integer
    Dim Rolla As String * 1
    Dim Rollb As String * 1
    
    Dim Gyro As Integer
    Dim Gyroa As String * 1
    Dim Gyrob As String * 1
    'Dim Gyroc As String * 1
    'Dim Roll As Integer
    'Dim Gyro_z As Integer
    
    
    
    
    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
     Waitms 150
     Printbin 115 ; 110 ; 112 ; 1 ; 0 ; 1 ; 82                  'get data  gesendet 115,110,112,176,1 =data complete
      ' Printbin 115 ; 110 ; 112 ; 3 ; 0 ; 1 ; 84                'GET_ACCEL_BIAS
    
    
     If Len(empfang) > 13 Then
    
    
       Cls
       Nickb = Mid(empfang , 7 , 1)
       Nicka = Mid(empfang , 8 , 1)
       Nick = Makeint(nicka , Nickb)                            'Aus beiden Strings ein Integer machen
       Locate 1 , 1 : Lcd "Nick= " ; Nick
    
       Rollb = Mid(empfang , 9 , 1)
       Rolla = Mid(empfang , 10 , 1)
       Roll = Makeint(rolla , Rollb)
       Locate 2 , 1 : Lcd "Roll= " ; Roll
    
       Gyrob = Mid(empfang , 11 , 1)
       Gyroa = Mid(empfang , 12 , 1)
       Gyro = Makeint(gyroa , Gyrob )
       Locate 3 , 1 : Lcd "Gyro= " ; Gyro
    
    
    
    
       Empfang = ""
       End If
    
    
    Loop
    
    
    Onrxd:
    Empfang = Empfang + Chr(udr)
    Return
    
    
    End

  2. #32
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    probier mal das:

    Dim Empfang As String * 14
    dim Nick as integer at Empfang+7 overlay
    dim Roll as integer at Empfang+9 overlay
    dim Gyro as integer at Empfang+11 overlay


    und dann:
    Cls
    Locate 1 , 1 : Lcd "Nick= " ; Nick

    Locate 2 , 1 : Lcd "Roll= " ; Roll

    Locate 3 , 1 : Lcd "Gyro= " ; Gyro

    ohne die makeint-geschichte dazwischen ... sollte aufs gleiche ergebnis heraus kommen nur praktisch ohne Rechenzeit und stringkopiererei

    der Gag bei Overlayvariablen ist, dass sie auf die gleiche Speicheradresse verweisen, auf die bereits eine Variable verweist.

    Warum das von Vorteil ist? Der Code wird kleiner und daher auch schneller.
    In Deinem Beispiel bremst das LCD die Geschichte noch aus, aber Du wirst das Ding ja auch für was Anderes verwenden wollen und da können dann µs an Ausführungszeit schon entscheidend werden.

    Beispiel:

    dim irgendeinstring as string * 5
    dim eine_byte_variable as byte at irgendeinstring+3 overlay

    an der dritten Stelle des Strings kann ich nun auch per eine_byte_variable direkt auf das Byte zugreifen. Damit ändert sich natürlich der String an der Stelle. Andersherum aber auch, wenn der String sich ändert wird auch das byte geändert.

    irgendeinstring="xx1xx"

    dann steht in eine_byte_variable das ASCII-Zeichen "1", also der Bytewert 49

    schreiben wir nun

    eine_byte_variable=50

    dann steht in dem String nun "xx2xx"

    Die Oberlayvariablen sind so ziemlich das Genialste an Bascom überhaupt.
    Wie man in Deinem Beispiel sieht. Man kann den String einfach aneinanderreihen
    und dann die beliebigen Elemente herauspicken praktisch ohne Code.

    Anderes Beispiel.

    Ich verwende in einer Anwendung einen externen AD-Wandler mit 16 Bit.
    Diese 16 Bit überträgt er als 2 Bytes.
    Ich gehe nun hin und schreibe die 2 Bytes ins S-RAM und lege eine Word-Variable
    als Overlay drüber.
    Nun kann ich an jeder Programmstelle direkt mit der Word-Variable arbeiten
    ohne vorher jedes mal die Bytes zusammen zu setzen.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #33
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    48
    Beiträge
    142
    Hi Vitis, okay jetzt habe ich die overlay Geschichte richtig verstanden.
    Jetzt, wo ich den Datensatzanfang immer an gleicher Stelle habe, ist es ja auch so zu verwenden.

    Nur zum weiteren Verständnis als der Datensatz im doppelt so großen Array irgendwo stand und ich

    dim Nick as integer at Empfang+7 overlay +korrektur

    berechnen musste, würde denn der Korrekturwert trotzdem richtig übernommen, da er sich ja pro Datensatzanfangsuche ändert und nur am Anfang des Programmes einmal der Speicher dimensioniert wird?


    Ich habe mir nen Wolf gesucht, wie ich das Integer am besten befülle.
    Werden im Integer die Bytes komplementär in richtiger reihenfolge geschrieben? Wäre ja blöd wenn nicht. Ich werde es auf jeden Fall morgen ausprobieren.

    Danke, dachte du hättest mich als hoffnungslos abgeschrieben, nach der Kauf dir nen Buch Aufforderung von dir.

  4. #34
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    mit dem doppelten array war der Empfangspuffer gemeint.
    Meine Intension war, die Zeichenfolge zu suchen und bei korrekter Syntax die Message kopieren in ein zweites Array. Daraus ergibt sich dann, dass die entsprechenden Nutz-Werte immer an der gleichen stelle stehen. So kannst Du mit den Overlays die Werte direkt verarbeiten.

    Zur Buchempfehlung ... naja, das Programm oben war einfach Murks, sorry.

    Wenn ich in 5 Zeilen Code nen goto sehr gehn bei mir die Lichter aus.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #35
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    48
    Beiträge
    142
    Morgen Vitis,
    habe jetzt das Programm mit overlay geschrieben.
    Ich habe große Sprünge in der Ausgabe, deren Abhängigkeit ich nicht zuweisen kann. Ich vermute das Die Bytes falsch herum in das Integer geschrieben werden. Ich habe testweise aus dem Integer ein byte gemacht, um mir den Einzelnen Wert in Abhängikeit des Winkels anzusehen.
    Das 7. Byte ist das Hibye, das 8. das lowbyte. Das Lowbyte wird mir am Display in Abhängikeit des Winkels schön angezeigt.

    Da muss ich nochmal schauen.
    Gibt es da einen Trick, die Bytes zu drehen?
    Ich werde heute Abend mal versuchen in 2 Bytes zu schreiben und das
    Highbyte *1000+lowbyte in ein integer schreiben.

  6. #36
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2010
    Beiträge
    167
    Ihr müsst ziemlich genau die 3,3 Volt einhalten, sonst haut es nicht hin.
    Auch die 115000baud sind sehr kritisch.
    Vielleicht lässt sich am Gerät die baudweite runterregeln per software.

  7. #37
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    48
    Beiträge
    142
    3,3 Volt sind per Spannungsregler und 4 Kondensatorern gegen schwingen bei mir verbaut. Der Mega 168 läuft auf 5 Volt. Die CHR Platine soll 5 Volt kompatibel sein. Ich benutze einen externen Quarz 18, xxxMhz mit 0% Error Rate für diese hohe Baud Rate. Meinst du der Mega schafft es nicht fehlerfrei durch den Interrupt ausgelöste Berechnungen bis zum nächsten Interrupt abzuschließen?

  8. #38
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2010
    Beiträge
    167
    Veruch mal eine weile mit normalen Printbefehlen in dieser Geschwindigkeit (115000)TextDaten zu übertragen/einzulesen um zu sehen, wie die aussehen.

  9. #39
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2010
    Beiträge
    167
    ...Das Lowbyte wird mir am Display in Abhängikeit des Winkels schön angezeigt....

    und wenn du 343 Grad hast, wo bleibt der Rest?

  10. #40
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2005
    Ort
    NRW
    Alter
    48
    Beiträge
    142
    Die Printbefehle sehen normal aus. Es Ist ja nur snp zu lesen und dann kommen irgendwelche Zeichen (weil ASCII). Die Zeichenlänge ist annähernd gleich.
    Der Filter kann nur bis unter 90 " verwendet werden.
    Die Einzelbytes habe ich mir angeschaut, um zu sehen, ob sich der Wert wenn auch nur eingeschränkt richtig sichtbar ist. Und das ist er, man kann ihn schön bis 255 hochzählen lassen. Somit gibt es kein Array Speicherprobblem wegen zu hoher datenrate/zu langsame Verarbeitung.

Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests