VL53L0X Time-of-Flight Distance Sensor Carrier with Voltage Regulator

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    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!

    • VL53L0X Time-of-Flight Distance Sensor Carrier with Voltage Regulator

      VL53L0X.jpg

      Den VL53L0X Time-of-Flight Distanz-Sensor gibt es beim freundlichen Chinesen schon fertig aufgebaut mit einer kleinen Platine und Spannungsregler für etwa 4-6 Euro.
      Time-of-flight heißt, der Sensor misst die Zeit, die ein Infrarot-Lichtstrahl bis zum Zielobjekt und zurück braucht und berechnet daraus die Entfernung.
      So wie bei einer Ultraschall Entfernungsmessung.
      Das Board hat nur 25x12mm Fläche und ist damit deulich kleiner als ein GP2D120.

      st.com/content/st_com/en/produ…mity-sensors/vl53l0x.html
      Leider hat es ST nicht so mit den Datenblättern, es gibt lediglich eine API, eine anständige Registermap gibt es nicht.

      Ich habe im Netz eine Weile gesucht und ein funktionierendes Programm gefunden und nach Bascom übersetzt.
      protonbasic.co.uk/content.php/…185773b4824f20f06f0665fd9

      Die angesprochenen Register werden nicht erklärt, aber zumindest funktioniert der Sensor so und liefert tatsächlich die Entfernung in Millimetern.

      Eigentlich ein idealer Sensor für kleine Roboterchen ;)

      BASCOM-Quellcode: VL53L0X.BAS

      1. $regfile = "m328pdef.dat"
      2. $crystal = 16000000
      3. $hwstack = 32
      4. $swstack = 32
      5. $framesize = 24
      6. $baud = 38400
      7. Config Scl = Portc.5
      8. Config Sda = Portc.4
      9. I2cinit
      10. Const Cjvl53_write = &H52
      11. Const Cjvl53_read = &H53
      12. Led Alias Portb.5
      13. Ddrb.5 = 1
      14. Led = 1
      15. Xshut Alias Portd.2
      16. Ddrd.2 = 1
      17. Xshut = 0
      18. Waitms 100
      19. Xshut = 1
      20. Waitms 100
      21. Led = 0
      22. Dim I As Byte
      23. Dim Erg As Word
      24. Dim Daten(12) As Byte
      25. For I = 0 To 254 Step 2
      26. I2cstart
      27. I2cwbyte I
      28. If Err = 0 Then
      29. Print "I2C Adresse = " ; I
      30. End If
      31. Next
      32. Do
      33. Led = 1
      34. Gosub Sensorlesen
      35. Gosub Auswerten
      36. Gosub Ergebnis
      37. Led = 0
      38. Waitms 900
      39. Loop
      40. Sensorlesen:
      41. I2cstart
      42. I2cwbyte Cjvl53_write
      43. I2cwbyte &H00
      44. I2cwbyte &H01
      45. I2cstop
      46. Waitms 5
      47. I2cstart
      48. I2cwbyte Cjvl53_write
      49. I2cwbyte &H14
      50. Waitms 5
      51. I2crepstart
      52. I2cwbyte Cjvl53_read
      53. For I = 1 To 11
      54. I2crbyte Daten(i) , Ack
      55. Next
      56. I2crbyte Daten(12) , Nack
      57. I2cstop
      58. Return
      59. Auswerten:
      60. I = Daten(1) And &H78
      61. I = I / 8
      62. Select Case I
      63. Case $00 : Print "Data OK!"
      64. Case $01 : Print "VCSEL CONTINUITY TEST FAILURE!"
      65. Case $02 : Print "VCSEL WATCHDOG TEST FAILURE!"
      66. Case $03 : Print "NO VHV VALUE FOUND!"
      67. Case $04 : Print "MSRC NO TARGET!"
      68. Case $05 : Print "SNR CHECK!"
      69. Case $06 : Print "RANGE PHASE CHECK!"
      70. Case $07 : Print "SIGMA THRESHOLD CHECK!"
      71. Case $08 : Print "TCC!"
      72. Case $09 : Print "PHASE CONSISTENCY!"
      73. Case $0a : Print "MIN CLIP!"
      74. Case $0b : Print "RANGE COMPLETE!"
      75. Case $0c : Print "ALGO UNDERFLOW!"
      76. Case $0d : Print "ALGO OVERFLOW!"
      77. Case $0e : Print "RANGE IGNORE THRESHOLD!"
      78. Case Else Print "Hurz " ; Hex(i)
      79. End Select
      80. Return
      81. Ergebnis:
      82. Erg = Daten(11) * 256
      83. Erg = Erg + Daten(12)
      84. ' For I = 1 To 12
      85. ' Print Hex(daten(i)) ; " " ;
      86. ' Next
      87. Print "Ergebnis: " ; Erg ; " "
      88. Return
      Alles anzeigen
      Timeofflight.jpg
    • Hallo - bei mir funktioniert das ganze irgendwie nicht wirklich - das ding liefert immer quasi "data ok" (LedCheckOkay) und 0 als distanz (LedMeasurement)
      Die Sub "Call Lcd_print_C_R" gibt das ganze auf einem TFT aus - alles byVal deklariert
      ja - der aufkleber ist nicht mehr drauf ;)
      Das Ergebis ist auch das gleiche wenn ichs direkt so reinkopiere wie von Michael geschrieben - also ohne StateMachine - data ok und 0

      hat von euch zufällig jemand eine andere / überarbeitete version oder kann mir sagen was evtl falsch läuft?
      Allgemeine Frage - sieht man den laser mit der Cam eines Smartphones? - könntet Ihr das mal bitte prüfen - vielleicht ist ist ja nur der Sensor im Eimer

      TmrLed ist ein 5mS Timer
      Vielen Dank für eure Hilfe

      Sub StateMachineLed()
      Select Case StateLedAct
      Case STATE_LED_INIT:
      StateLedNxt = STATE_LED_START_READ_1
      Case STATE_LED_START_READ_1:
      If TmrLed <= 0 Then
      I2cstart
      I2cwbyte VL53_WRITE
      I2cwbyte &H00
      I2cwbyte &H01
      I2cstop
      TmrLed = 2
      StateLedNxt = STATE_LED_START_READ_2
      End If
      Case STATE_LED_START_READ_2:
      If TmrLed <= 0 Then
      I2cstart
      I2cwbyte VL53_WRITE
      I2cwbyte &H14
      TmrLed = 2
      StateLedNxt = STATE_LED_READ
      End If
      Case STATE_LED_READ:
      If TmrLed <= 0 Then
      I2crepstart
      I2cwbyte VL53_READ
      For LedDataIdx = 1 To 11
      I2crbyte LedData(LedDataIdx) , Ack
      Next
      I2crbyte LedData(12) , Nack
      I2cstop
      StateLedNxt = STATE_LED_CHECK_DATA
      End If
      Case STATE_LED_CHECK_DATA:
      LedCheckOkay = LedData(1) And &H78
      LedCheckOkay = LedCheckOkay / 8
      Select Case LedCheckOkay
      Case $00 : dbginfo = "00"
      Case $01 : dbginfo = "01"
      Case $02 : dbginfo = "02"
      Case $03 : dbginfo = "03"
      Case $04 : dbginfo = "04"
      Case $05 : dbginfo = "05"
      Case $06 : dbginfo = "06"
      Case $07 : dbginfo = "07"
      Case $08 : dbginfo = "08"
      Case $09 : dbginfo = "09"
      Case $0a : dbginfo = "10"
      Case $0b : dbginfo = "11"
      Case $0c : dbginfo = "12"
      Case $0d : dbginfo = "13"
      Case $0e : dbginfo = "14"
      Case Else dbginfo = "XX"
      End Select
      Call Lcd_print_C_R( dbginfo , 8 , 80 , 70 , 2 , 1 , 1 , Black , Yellow , ALIGN_CENTER)
      If LedCheckOkay = $00 Then
      StateLedNxt = STATE_LED_CALC_DIST
      Else
      TmrLed = 400
      StateLedNxt = STATE_LED_START_READ_1
      End If
      Case STATE_LED_CALC_DIST:
      LedMeasurement = LedData(11) * 256
      LedMeasurement = LedMeasurement + LedData(12)
      dbginfo = Str(LedMeasurement)
      Call Lcd_print_C_R( dbginfo , 8 , 80 , 100 , 2 , 2 , 2 , Black , Red , ALIGN_CENTER )
      StateLedNxt = STATE_LED_CALC_VOL
      Case STATE_LED_CALC_VOL:
      StateLedNxt = STATE_LED_ACT_BAR
      Case STATE_LED_ACT_BAR:
      TmrLed = 400
      StateLedNxt = STATE_LED_START_READ_1
      End select
      Select Case StateLedNxt:
      Case STATE_LED_ACT_BAR:
      AktLed = INACTIVE
      LedLtr = ComputeTriFuellstandLtr(ComputeHoeheLot(LedMeasurement))
      LedPro = LedLtr / Fuell100
      LedPro = LedPro * 100
      RefreshLed = TRUE
      End select
      StateLedAct = StateLedNxt
      End Sub
    • Vielen Dank für deine Mühen - bin aber jetzt nicht sicher ob ich dir einen gefallen tue wenn ich den gesamten quellcode poste - sind insgesamt etwa 30 dateien - willst du dir das wirklich antun - dann pack ich das selbstverstänlich zusammen - ich versuchs mal trotzdem so kompakt wie möglich zu halten
      andere i2c komponenten (4x pcf8574 (2x output 2x input)) funktionieren und geben auch keine konflikte in den adressen -> ports und pullups passen
      was dann noch übrig bleibt - im vergleich zu deinem code-beispiel - steht in der sub StateMachineLed aus meinem vorherigen post - das sollte - falls du darin keine unterschiede feststellen kannst - deinem beispiel entsprechen - formatiers mal eben und füge noch fragliches ein

      Vielen Lieben Dank Für Deine Mühen


      Ddrd = &B00000011 'switch all Ports of Port D to input
      Portd = &B11111100 'all pull-up-Resistors turned on


      Ddre = &B00000000 'switch all Ports of Port E to input
      Porte = &B11111111 'all pull-up-Resistors turned on
      ' 76543210
      Ddrf = &B10010000 'switch all Ports of Port F to input
      Portf= &B01101111 'all pull-up-Resistors turned on


      Ddrg = &B00000000 'switch all Ports of Port G to input
      Portg = &B11111111 'all pull-up-Resistors turned on


      Config Scl = Portd.0 'Used Ports for I2C-Bus
      Config Sda = Portd.1
      Config I2cdelay = 10 '100 kHz Clock

      Const VL53_WRITE = &H52
      Const VL53_READ = &H53

      DbgInfo As String * 6

      TmrLed As Integer ' ist abgeleitet von einem 5mS Timer
      'DistanzSensor
      Dim LedDataIdx As Byte, LedData(12) As Byte, LedCheckOkay As Byte, LedMeasurement As Word

      Do
      'Einlesen der Zustände
      Call GetInput_I2C1()
      Call GetInputPanel()
      'Call GetInputSensors()
      'Ändern der Anzeige abfragen und herstellen
      Select Case Akt_window
      Case WINDOW_SMA : Gosub Win_smasch
      Case WINDOW_SEN : Gosub Win_config
      Case WINDOW_ABD : Gosub Win_abdreh
      Case WINDOW_INF : Gosub Win_infdat
      End Select
      'Statemachines laufen lasssen
      Call StateMachineFah()
      Call StateMachineRad()
      Call StateMachineLgt()
      Call StateMachineLem() 'schaltet beim starten den buzzer ein -> fehler finden!
      Call StateMachineGeb()
      Call StateMachineBuz()
      'Call FindI2cComponents()
      'Call I2cSetOutput()
      'Call I2cGetInput()
      'Setzen der CPU Ausgänge, I2c Ausgänge schalten
      Call SetAusgaenge()
      'Ausgabe variabler Daten
      Select Case Akt_window
      Case WINDOW_SMA : Gosub Refresh_Win_SMA
      Case WINDOW_SEN : Gosub Refresh_Win_SEN
      Case WINDOW_ABD : Gosub Refresh_Win_ABD
      Case WINDOW_INF : Gosub Refresh_Win_INF
      End Select
      Loop

      Sub InitializeStateMachineLem()
      StateLeuAct = STATE_LEE_INIT
      StateLeuNxt = STATE_LEE_INIT
      StateLeoAct = STATE_LEE_INIT
      StateLeoNxt = STATE_LEE_INIT
      StateLedAct = STATE_LED_INIT
      StateLedNxt = STATE_LED_INIT
      mode_Led = LED_MODE_START
      TmrLed = 6000 ' 10 ms Timer -> 1 Minute
      TmrLed = 100 ' nur zum debuggen
      Call ComputeTrichterBasis()
      Call ComputeAngleGammaBeta()
      Call ComputeFuellstand100()
      Dbgword = Trishw * 10
      End Sub


      Sub StateMachineLem()
      If Leetyp = LEE Or Leetyp = LEE_OPT Then
      Call StateMachineLee(LEM_UNTEN)
      Call StateMachineLee(LEM_OBEN)
      End IF
      'If Leetyp = OPT Or Leetyp = LEE_OPT Then
      Call StateMachineLed()
      'End IF
      'If TmrLed <= 0 Then
      ' If TmrDbg <= 0 Then
      ' mode_Led = LED_MODE_AUTO
      ' TmrDbg = 50
      '' If Dbgword > 10 Then
      ' Dbgword = Dbgword - 10
      ' Else
      ' Dbgword = Trishw * 10
      ' End If
      ' LedLtr = ComputeTriFuellstandLtr(ComputeHoeheLot(Dbgword))
      ' tmps = LedLtr / Fuell100
      ' tmps = tmps * 100
      ' LedPro = tmps + 0.5
      ' RefreshLed = TRUE
      'DbgInfo = Str(LedLtr)
      'DbgInfo = DbgInfo + "l"
      'Call Lcd_print(DbgInfo , 10 , 75 , 2 , 2 , 2 , Grey , Green)
      'DbgInfo = Str(LedPro)
      'DbgInfo = DbgInfo + "%"
      'Call Lcd_print(DbgInfo , 10 , 110 , 2 , 2 , 2 , Grey , Green)
      ' End If
      'End If
      End Sub

      Sub StateMachineLed()
      Select Case StateLedAct
      Case STATE_LED_INIT:
      StateLedNxt = STATE_LED_START_READ_1
      Case STATE_LED_START_READ_1:
      If TmrLed <= 0 Then
      I2cstart
      I2cwbyte VL53_WRITE
      I2cwbyte &H00
      I2cwbyte &H01
      I2cstop
      TmrLed = 2
      StateLedNxt = STATE_LED_START_READ_2
      End If
      Case STATE_LED_START_READ_2:
      If TmrLed <= 0 Then
      I2cstart
      I2cwbyte VL53_WRITE
      I2cwbyte &H14
      TmrLed = 2
      StateLedNxt = STATE_LED_READ
      End If
      Case STATE_LED_READ:
      If TmrLed <= 0 Then
      I2crepstart
      I2cwbyte VL53_READ
      For LedDataIdx = 1 To 11
      I2crbyte LedData(LedDataIdx) , Ack
      Next
      I2crbyte LedData(12) , Nack
      I2cstop
      StateLedNxt = STATE_LED_CHECK_DATA
      End If
      Case STATE_LED_CHECK_DATA:
      LedCheckOkay = LedData(1) And &H78
      LedCheckOkay = LedCheckOkay / 8
      Select Case LedCheckOkay
      Case $00 : dbginfo = "00"
      Case $01 : dbginfo = "01"
      Case $02 : dbginfo = "02"
      Case $03 : dbginfo = "03"
      Case $04 : dbginfo = "04"
      Case $05 : dbginfo = "05"
      Case $06 : dbginfo = "06"
      Case $07 : dbginfo = "07"
      Case $08 : dbginfo = "08"
      Case $09 : dbginfo = "09"
      Case $0a : dbginfo = "10"
      Case $0b : dbginfo = "11"
      Case $0c : dbginfo = "12"
      Case $0d : dbginfo = "13"
      Case $0e : dbginfo = "14"
      Case Else dbginfo = "XX"
      End Select
      Call Lcd_print_C_R( dbginfo , 8 , 80 , 70 , 2 , 1 , 1 , Black , Yellow , ALIGN_CENTER)
      If LedCheckOkay = $00 Then
      StateLedNxt = STATE_LED_CALC_DIST
      Else
      TmrLed = 400
      StateLedNxt = STATE_LED_START_READ_1
      End If
      Case STATE_LED_CALC_DIST:
      LedMeasurement = LedData(11) * 256
      LedMeasurement = LedMeasurement + LedData(12)
      dbginfo = Str(LedMeasurement)
      Call Lcd_print_C_R( dbginfo , 8 , 80 , 100 , 2 , 2 , 2 , Black , Red , ALIGN_CENTER )
      StateLedNxt = STATE_LED_CALC_VOL
      Case STATE_LED_CALC_VOL:
      StateLedNxt = STATE_LED_ACT_BAR
      Case STATE_LED_ACT_BAR:
      TmrLed = 400
      StateLedNxt = STATE_LED_START_READ_1
      End select
      Select Case StateLedNxt:
      Case STATE_LED_ACT_BAR:
      AktLed = INACTIVE
      LedLtr = ComputeTriFuellstandLtr(ComputeHoeheLot(LedMeasurement))
      LedPro = LedLtr / Fuell100
      LedPro = LedPro * 100
      RefreshLed = TRUE
      End select
      StateLedAct = StateLedNxt
      End Sub
    • Vielen Dank für deine Mühen - bin aber jetzt nicht sicher ob ich dir einen gefallen tue wenn ich den gesamten quellcode poste - sind insgesamt etwa 30 dateien - willst du dir das wirklich antun - dann pack ich das selbstverstänlich zusammen - ich versuchs mal trotzdem so kompakt wie möglich zu halten
      andere i2c komponenten (4x pcf8574 (2x output 2x input)) funktionieren und geben auch keine konflikte in den adressen -> ports und pullups passen
      was dann noch übrig bleibt - im vergleich zu deinem code-beispiel - steht in der sub StateMachineLed aus meinem vorherigen post - das sollte - falls du darin keine unterschiede feststellen kannst - deinem beispiel entsprechen - formatiers mal eben und füge noch fragliches ein

      Vielen Lieben Dank Für Deine Mühen


      Ddrd = &B00000011 'switch all Ports of Port D to input
      Portd = &B11111100 'all pull-up-Resistors turned on


      Ddre = &B00000000 'switch all Ports of Port E to input
      Porte = &B11111111 'all pull-up-Resistors turned on
      ' 76543210
      Ddrf = &B10010000 'switch all Ports of Port F to input
      Portf= &B01101111 'all pull-up-Resistors turned on


      Ddrg = &B00000000 'switch all Ports of Port G to input
      Portg = &B11111111 'all pull-up-Resistors turned on


      Config Scl = Portd.0 'Used Ports for I2C-Bus
      Config Sda = Portd.1
      Config I2cdelay = 10 '100 kHz Clock

      Const VL53_WRITE = &H52
      Const VL53_READ = &H53

      DbgInfo As String * 6

      TmrLed As Integer ' ist abgeleitet von einem 5mS Timer
      'DistanzSensor
      Dim LedDataIdx As Byte, LedData(12) As Byte, LedCheckOkay As Byte, LedMeasurement As Word

      Do
      'Einlesen der Zustände
      Call GetInput_I2C1()
      Call GetInputPanel()
      'Call GetInputSensors()
      'Ändern der Anzeige abfragen und herstellen
      Select Case Akt_window
      Case WINDOW_SMA : Gosub Win_smasch
      Case WINDOW_SEN : Gosub Win_config
      Case WINDOW_ABD : Gosub Win_abdreh
      Case WINDOW_INF : Gosub Win_infdat
      End Select
      'Statemachines laufen lasssen
      Call StateMachineFah()
      Call StateMachineRad()
      Call StateMachineLgt()
      Call StateMachineLem() 'schaltet beim starten den buzzer ein -> fehler finden!
      Call StateMachineGeb()
      Call StateMachineBuz()
      'Call FindI2cComponents()
      'Call I2cSetOutput()
      'Call I2cGetInput()
      'Setzen der CPU Ausgänge, I2c Ausgänge schalten
      Call SetAusgaenge()
      'Ausgabe variabler Daten
      Select Case Akt_window
      Case WINDOW_SMA : Gosub Refresh_Win_SMA
      Case WINDOW_SEN : Gosub Refresh_Win_SEN
      Case WINDOW_ABD : Gosub Refresh_Win_ABD
      Case WINDOW_INF : Gosub Refresh_Win_INF
      End Select
      Loop

      Sub InitializeStateMachineLem()
      StateLeuAct = STATE_LEE_INIT
      StateLeuNxt = STATE_LEE_INIT
      StateLeoAct = STATE_LEE_INIT
      StateLeoNxt = STATE_LEE_INIT
      StateLedAct = STATE_LED_INIT
      StateLedNxt = STATE_LED_INIT
      mode_Led = LED_MODE_START
      TmrLed = 6000 ' 10 ms Timer -> 1 Minute
      TmrLed = 100 ' nur zum debuggen
      Call ComputeTrichterBasis()
      Call ComputeAngleGammaBeta()
      Call ComputeFuellstand100()
      Dbgword = Trishw * 10
      End Sub


      Sub StateMachineLem()
      If Leetyp = LEE Or Leetyp = LEE_OPT Then
      Call StateMachineLee(LEM_UNTEN)
      Call StateMachineLee(LEM_OBEN)
      End IF
      'If Leetyp = OPT Or Leetyp = LEE_OPT Then
      Call StateMachineLed()
      'End IF
      'If TmrLed <= 0 Then
      ' If TmrDbg <= 0 Then
      ' mode_Led = LED_MODE_AUTO
      ' TmrDbg = 50
      '' If Dbgword > 10 Then
      ' Dbgword = Dbgword - 10
      ' Else
      ' Dbgword = Trishw * 10
      ' End If
      ' LedLtr = ComputeTriFuellstandLtr(ComputeHoeheLot(Dbgword))
      ' tmps = LedLtr / Fuell100
      ' tmps = tmps * 100
      ' LedPro = tmps + 0.5
      ' RefreshLed = TRUE
      'DbgInfo = Str(LedLtr)
      'DbgInfo = DbgInfo + "l"
      'Call Lcd_print(DbgInfo , 10 , 75 , 2 , 2 , 2 , Grey , Green)
      'DbgInfo = Str(LedPro)
      'DbgInfo = DbgInfo + "%"
      'Call Lcd_print(DbgInfo , 10 , 110 , 2 , 2 , 2 , Grey , Green)
      ' End If
      'End If
      End Sub

      Sub StateMachineLed()
      Select Case StateLedAct
      Case STATE_LED_INIT:
      StateLedNxt = STATE_LED_START_READ_1
      Case STATE_LED_START_READ_1:
      If TmrLed <= 0 Then
      I2cstart
      I2cwbyte VL53_WRITE
      I2cwbyte &H00
      I2cwbyte &H01
      I2cstop
      TmrLed = 2
      StateLedNxt = STATE_LED_START_READ_2
      End If
      Case STATE_LED_START_READ_2:
      If TmrLed <= 0 Then
      I2cstart
      I2cwbyte VL53_WRITE
      I2cwbyte &H14
      TmrLed = 2
      StateLedNxt = STATE_LED_READ
      End If
      Case STATE_LED_READ:
      If TmrLed <= 0 Then
      I2crepstart
      I2cwbyte VL53_READ
      For LedDataIdx = 1 To 11
      I2crbyte LedData(LedDataIdx) , Ack
      Next
      I2crbyte LedData(12) , Nack
      I2cstop
      StateLedNxt = STATE_LED_CHECK_DATA
      End If
      Case STATE_LED_CHECK_DATA:
      LedCheckOkay = LedData(1) And &H78
      LedCheckOkay = LedCheckOkay / 8
      Select Case LedCheckOkay
      Case $00 : dbginfo = "00"
      Case $01 : dbginfo = "01"
      Case $02 : dbginfo = "02"
      Case $03 : dbginfo = "03"
      Case $04 : dbginfo = "04"
      Case $05 : dbginfo = "05"
      Case $06 : dbginfo = "06"
      Case $07 : dbginfo = "07"
      Case $08 : dbginfo = "08"
      Case $09 : dbginfo = "09"
      Case $0a : dbginfo = "10"
      Case $0b : dbginfo = "11"
      Case $0c : dbginfo = "12"
      Case $0d : dbginfo = "13"
      Case $0e : dbginfo = "14"
      Case Else dbginfo = "XX"
      End Select
      Call Lcd_print_C_R( dbginfo , 8 , 80 , 70 , 2 , 1 , 1 , Black , Yellow , ALIGN_CENTER)
      If LedCheckOkay = $00 Then
      StateLedNxt = STATE_LED_CALC_DIST
      Else
      TmrLed = 400
      StateLedNxt = STATE_LED_START_READ_1
      End If
      Case STATE_LED_CALC_DIST:
      LedMeasurement = LedData(11) * 256
      LedMeasurement = LedMeasurement + LedData(12)
      dbginfo = Str(LedMeasurement)
      Call Lcd_print_C_R( dbginfo , 8 , 80 , 100 , 2 , 2 , 2 , Black , Red , ALIGN_CENTER )
      StateLedNxt = STATE_LED_CALC_VOL
      Case STATE_LED_CALC_VOL:
      StateLedNxt = STATE_LED_ACT_BAR
      Case STATE_LED_ACT_BAR:
      TmrLed = 400
      StateLedNxt = STATE_LED_START_READ_1
      End select
      Select Case StateLedNxt:
      Case STATE_LED_ACT_BAR:
      AktLed = INACTIVE
      LedLtr = ComputeTriFuellstandLtr(ComputeHoeheLot(LedMeasurement))
      LedPro = LedLtr / Fuell100
      LedPro = LedPro * 100
      RefreshLed = TRUE
      End select
      StateLedAct = StateLedNxt
      End Sub
    • Hallo @derKederer

      Ich habe gerade dein seed_it.prj (Projekt) offen.
      Im Code-Explorer sehe ich eine Menge Fehler.
      Versuche die mal zu beseitigen, das könnte schon helfen.

      Den Code-Explorer findest du im Menü unter "Anzeigen" und dort "Code Explorer" auswählen.
      Im Code-Explorer ein Rechts-Klick machen und im Kontext-Menü die Option "Show Errors" auswählen

      Außerdem hast du an vielen Stellen Sowas geschrieben wie "Select Case xxx:"
      Wäre ich Compiler, würde ich xxx: als Label interpretieren und nicht unbedingt als Variable.
      Die Doppelpunkte würde ich vorsichtshalber mal entfernen.
    • Hallo Mitch64

      den code-explorer habe ich noch nie verwendet - und wenn ich das projekt compiliere dann bekomme ich auch keinen fehler - scheinbar wirden mir hier fehler angezeigt zu dingen die in anderen dateien definiert / deklariert sind

      der compiler wertet auch xxx richtig bei den selct anweisungen aus - aber unabhängig davon - wie müsste ichs denn machen das er es als variable erkennt und nicht als lable?

      eine sau doofe frage hab ich - was ist der unterschied zwichen &H01 und $01 - das habe ich nicht wirklich verstanden - so wie hier z.b. :
      Case STATE_LED_CHECK_DATA:
      LedCheckOkay = LedData(1) And &H78
      LedCheckOkay = LedCheckOkay / 8
      Select Case LedCheckOkay
      Case $00 : dbginfo = "00"
      Case $01 : dbginfo = "01"
      Case $02 : dbginfo = "02"

      dann habe ich noch eine frage - in c gibts progmem zum verschieben von strings - gibts das in bascom auch irgendwie?

      das teil läuft gar wunderbar - mit ausnahme des Tof-Teils der mir immer 0 liefert

      und vielen lieben dank fürs drüberschauen - schweinsnett von euch
    • das mit den labels - jetzt hab ichs verstanden - du meinst weil hinter der variable beim case eines selects ein doppelpunkt dahinter ist wirds vom preprozessor als als label "vermutet" weil label mit einem doppelpunkt beendet werden - richtig - das hast du gemeint? - nö ist nicht so und wenn der doppelpunkt nicht da ist dann bekommst du einen fehler
    • derKederer schrieb:

      nö ist nicht so und wenn der doppelpunkt nicht da ist dann bekommst du einen fehler
      Iwo, ich habs probiert!
      Doppelpunkte nach "Select Case xxx" weg und einige der Fehler im Code-Explorer sind auch weg.

      Es sind aber noch andere Fehler da!
      Arbeite mal die Liste durch, die im Code-Explorer als Fehler anzeigt werden. Bei mir sind die alle jetzt weg und es läßt sich fehlerfrei kompilieren.

      Auch wenn der Doppelpunkt nicht das Problem ist, solltest du erst mal alle Fehler beseitigen, die der Code-Explorer anzeigt.
      Du wirst dann auch auf Fehler stoßen, wo die Deklaration nicht zu einer definierten Sub/Function passt etc.

      Wenn die Fehler weg sind, sieht man weiter.
      Einen anderen Tip habe ich dir jetzt auch nicht als erst mal das aktuelle bereinigen.
    • ja verreck - super danke!
      zugegeben - zunächst dachte ich mir warum soll ich was ändern wenn sichs ohne fehler compilieren lässt - der code-explorer war mir auch nicht bekannt -danke
      weiß auch nicht warum es sich compilieren lies wenn fehler? beinhaltet sind.. scheint eine besondere bascom eigenschaft zu sein.. sei es wies ist: vielen lieben dank für den hinweis
      einiges geht auch aus der bascom docu nicht so wirklich hervor z.B. byval in der dec und in der sub stehen muss
      jetzt tut auch - warum auch immer - der sensor was.. zwar nich nicht ganz zufriedenstellend - aber das muss ich noch genauer analysieren
      zwei fragen hab ich noch:


      eine sau doofe frage hab ich - was ist der unterschied zwichen &H01
      und $01 - das habe ich nicht wirklich verstanden - so wie hier z.b. :
      Case STATE_LED_CHECK_DATA:
      LedCheckOkay = LedData(1) And &H78
      LedCheckOkay = LedCheckOkay / 8
      Select Case LedCheckOkay
      Case $00 : dbginfo = "00"
      Case $01 : dbginfo = "01"
      Case $02 : dbginfo = "02"


      dann habe ich noch eine frage - in c gibts progmem zum verschieben von sram nach flash von strings - gibts das in bascom auch irgendwie?


      Vielen Dank für deine Unterstützung - klasse
    • derKederer schrieb:

      Ah - das Ding hier mags nicht so gerne wenn man was formatiert
      Dazu gibts die Code Funktion ( oben im Editor </> )

      derKederer schrieb:

      der unterschied zwichen &H01und $01
      $01 ist die billige Schreibweise von &H. Sie liegt außerhalb der Definitionen , heiß muß nicht funktionieren/könnte nach nem Update nicht mehr gehen. Bisher hatte ich (schreibfaul) noch keine Probleme damit. Solange es kleiner als 10 ist ist es überflüssig. ( 1=$1=$01=&H1=&H01 )

      derKederer schrieb:

      verschieben von sram nach flash
      Im Bootloader sieht man eine Möglichkeit das um zu setzen.