- LiTime Speicher und Akkus         
Ergebnis 1 bis 8 von 8

Thema: srf02 Programmierung

  1. #1

    srf02 Programmierung

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Und zwar hab ich den sfr02 über I2C angeschlossen und lesen die entfernung aus. nun möchte ich die ausgelesenen daten auswerten

    dafür hab ich mir folgende select case anweisung geschrieben

    Do

    Select Case Entfernung


    Case 200 To 150 : Sound Portb.2 , 200 , 300

    Case 150 To 100 : Sound Portb.2 , 200 , 400

    Case 100 To 50 : Sound Portb.2 , 200 , 500

    Case 50 To 10 : Sound Portb.2 , 200 , 600

    End Select
    Wait 1

    Loop

    aber irgendwie klappt das nicht, hat jemand da ne idee?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    1. Das ist nur ein Teil deines Codes. Wie soll man da wissen, was nicht klappt?
    2. Was klappt denn "irgendwie" nicht?

    Gruß Dirk

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Ich würde jetzt mal so ins Blaue tippen, dass du unter den Tönen keinen wirklichen Unterschied hörst?
    Wie wäre es denn dann, wenn du die Unterschiede größer machst? So sind die Töne relativ gleich.

    eine genauere Beschreibung deines Problems wäre hilfreich!

    jon
    Nice to be back after two years
    www.roboterfreak.de

  4. #4
    Nein es ist mehr so dass ich gar keine töne höre

    Code:
    Declare Function Srf02_firmware(byval Slaveid As Byte) As Byte
    Declare Function Srf02_entfernung(byval Slaveid As Byte) As Integer
    
    
    $regfile = "m32def.dat"
    $framesize = 42
    $swstack = 42
    $hwstack = 42
    
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600
    Config Portb.2 = Output
    'Portb.2 = 1
    Config Scl = Portc.0                                        'Ports fuer IIC-Bus
    Config Sda = Portc.1
    
    
    Const Srf02_slaveid = &HE0                                  'Standard I2C Adresse von SRF02
    
    Dim Entfernung As Integer
    Dim V As Byte
    
    
    
    
       Wait 3                                                   'Warte 3 Sekunden
       I2cinit
    
       V = 1
       Do
    
         Select Case Entfernung
    
    
         Case 200 To 150 : Sound Portb.2 , 200 , 300
    
         Case 150 To 100 : Sound Portb.2 , 200 , 400
    
         Case 100 To 50 : Sound Portb.2 , 200 , 500
    
         Case 50 To 10 : Sound Portb.2 , 200 , 600
    
         End Select
         Wait 1
       Loop
    
    
    End
    '------------- Hilfsfunktionen für SRF02 ----------
    Function Srf02_firmware(byval Slaveid As Byte) As Byte
      Local Firmware As Byte
      Local Slaveid_read As Byte
      slaveid_read = Slaveid + 1
      I2cstart
      I2cwbyte Slaveid
      I2cwbyte 0 'Leseregister festlegen
      I2cstop
      I2cstart
      I2cwbyte Slaveid_read
      I2crbyte Firmware , Nack
      I2cstop
      Srf02_firmware = Firmware
    End Function
    
    Function Srf02_entfernung(byval Slaveid As Byte) As Integer
      Local Lob As Byte
      Local Hib As Byte
      Local Firmware As Byte
      Local Temp As Byte
      Local Slaveid_read As Byte
    
      slaveid_read = Slaveid + 1
    
      'Messvorgang in starten
      I2cstart
      I2cwbyte Slaveid
      I2cwbyte 0
      I2cwbyte 81 'in Zentimetern messen
      I2cstop
    
      Warteaufmessung:
        Waitms 1
        Firmware = Srf02_firmware(slaveid)
      If Firmware = 255 Then Goto Warteaufmessung
    
      I2cstart
      I2cwbyte Slaveid
      I2cwbyte 2 'Leseregister festlegen
      I2cstop
      I2cstart
      I2cwbyte Slaveid_read
      I2crbyte Hib , Ack
      I2crbyte Lob , Nack
      I2cstop
      Srf02_entfernung = Makeint(lob , Hib)
     End Function
    Ich benutze zum größten teil das srf02 beispiel
    und mit if und einer entfernung geht das aber nicht im case

    und wenn ich
    Code:
    select case entfernung
    case etfernung <=100: Sound usw..
    mache bekomme ich nur fehler meldungen

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Tipp:
    Bascom hat eine Hilfe, die man mit F1 schnell öffnen kann. Wenn man dort Case in die Suche eingibt, findet man unter Anderem das Programm
    Code:
    $regfile = "m48def.dat"                                     ' specify the used micro
    
    $crystal = 4000000                                          ' used crystal frequency
    
    $baud = 19200                                               ' use baud rate
    
    $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 I As Byte                                               'dim variable
    
    Dim S As String * 5 , Z As String * 5
    
    
    
    
    Do
    
    
    
    
      Input "Enter value (0-255) " , I
    
      Select Case I
    
        Case 1 : Print "1"
    
        Case 2 : Print "2"
    
        Case 3 To 5 : Print "3-5"
    
        Case Is >= 10 : Print ">= 10"
    
        Case Else : Print "Not in Case statement"
    
      End Select
    
    Loop
    
    End
    
    
    
    
    'note that a Boolean expression like > 3 must be preceded
    
    'by the IS keyword
    Mehr muss ich dazu eigentlich nicht sagen, steht alles da.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    und mit if und einer entfernung geht das aber nicht im case
    Echt? Das kann ich irgendwie nicht glauben, denn es fehlt etwas in der Art: "Entfernung=Srf02_entfernung(Srf02_slaveid)" oder "Select Case Srf02_entfernung(Srf02_slaveid)"

    Oder braucht man das in Bascom nicht?

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    Da du es sagst, fällt es mir auch auf. Es fehlt die Zeile "Entfernung=Srf02_entfernung(Srf02_slaveid)" vor der "Select case Entfernung".

    Natürlich braucht man die in BASCOM.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164
    irgendwie stimmt dein code nicht, nimm diesen mal und bring deine case rein und deine atmegaanpassungen.

    Code:
    Declare Function Srf02_firmware(byval Slaveid As Byte) As Byte
    Declare Function Srf02_entfernung(byval Slaveid As Byte) As Integer
    
    
    $regfile = "m32def.dat"
    $framesize = 42
    $swstack = 42
    $hwstack = 42
    
    $crystal = 8000000                      'Quarzfrequenz
    $baud = 19200
    
    Config Scl = Portc.0                    'Ports fuer IIC-Bus
    Config Sda = Portc.1
    
    
    Const Srf02_slaveid = &HE0              'Standard I2C Adresse von SRF02
    
    Dim Entfernung As Integer
    Dim V As Byte
    
       Wait 1
       I2cinit
       Print "SRF02 Ultraschall-Firmware Version:" ; Srf02_firmware(srf02_slaveid)
    
       Do
         Entfernung = Srf02_entfernung(srf02_slaveid)
         Print "Entfernung:" ; Entfernung ; "cm"
         Wait 1
       Loop
    
    
    End
    
    
    '------------- Hilfsfunktionen für SRF02 ----------
    
    
    Function Srf02_firmware(byval Slaveid As Byte) As Byte
    Local Firmware As Byte
    Local Slaveid_read As Byte
    
       Slaveid_read = Slaveid + 1
    
       I2cstart
       I2cwbyte Slaveid
       I2cwbyte 0                           'Leseregister festlegen
       I2cstop
    
       I2cstart
       I2cwbyte Slaveid_read
       I2crbyte Firmware , Nack
       I2cstop
    
       Srf02_firmware = Firmware
    End Function
    
    
    
    Function Srf02_entfernung(byval Slaveid As Byte) As Integer
    Local Lob As Byte
    Local Hib As Byte
    Local Firmware As Byte
    Local Temp As Byte
    Local Slaveid_read As Byte
    
       Slaveid_read = Slaveid + 1
    
       'Messvorgang in starten
       I2cstart
       I2cwbyte Slaveid
       I2cwbyte 0
       I2cwbyte 81                          'in Zentimetern messen
       I2cstop
    
    
       Waitms 65                            'minimale Wartezeit für Messung bei SRF02
    
       I2cstart
       I2cwbyte Slaveid
       I2cwbyte 2                           'Leseregister festlegen
       I2cstop
    
    
       I2cstart
       I2cwbyte Slaveid_read
       I2crbyte Hib , Ack
       I2crbyte Lob , Nack
       I2cstop
    
    
       Srf02_entfernung = Makeint(lob , Hib)
    End Function

Berechtigungen

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

LiFePO4 Speicher Test