-         

Ergebnis 1 bis 5 von 5

Thema: Befehl zum Auslesen eines Registers

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    30.01.2008
    Alter
    24
    Beiträge
    44

    Befehl zum Auslesen eines Registers

    Anzeige

    Hallo,

    ich verwende einen SRF02 Ultraschallsensor und habe diesen über I2C an einem MEga 128(ATmega 12 angeschlossen. Ich programmiere in compact c (Compiler bei Bestellung bei Conrad mitgeliefert). Der SRF02 verfügt über 6 Register. Register 0 ist für die Comandotools reserviert, also zum anschreiben. Nach der Messung legt der Sensor die Ergebnisse in den Registern 2 und 3 ab.

    Und da liegt mein Problem: Ich kann zwar einwandfrei auf Adressen zugreifen, aber nicht auf Register. In C gibt es einen Befehl "I2C_Read(ADRESSE, REGISTER)", der aber meines Wissens in compact C nicht existiert, oder doch?

    Wenn jemand einen Befehl zum Auslesen von HIGH- und LOWBYTE aus den Registern des SRF02 oder eine Alternative dazu kennt, soll mir bitte was schreiben

    Gruß Tenorm

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    30
    Beiträge
    674
    Ich kenn dein compact c nicht, aber wenn das irgendwas mit c zu tun hat, dann kannst du den code von I2C_Read doch dadrin umsetzen. c an sich hat den Befehl sicher nicht. Die ganzen Befehle werden erst über libs hinzugefügt und gerade Details zu dem Befehl, den du suchst, wirst du hier im Wiki oder bei google finden.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    30.01.2008
    Alter
    24
    Beiträge
    44
    Compact c ist praktisch wie c, bloß zusammengekürzt, speziell ergänzt zum programmieren von Mikrokontrolern, deshalb kann man im Normalfall völlig ohne libs programmieren. Man kann mit "I2C_Write();" Adressen aufrufen und dann high- und lowbyte mit "I2C_Read_NACK();" und "I2C_Read_ACK();" auslesen, sollte man zumindest...
    Da compact c neuer ist, ist die Sprache in FOren praktisch nicht vertreten, sie wird fast nur zum Programmieren von Conrad-Controlern verwendet. In basic (unter verwendung von libs) kann man einfach mit
    "I2Cwbyte EO
    I2Cwbyte 2"
    z.B auf das Register 2 des Sensors zugreifen. Überträgt man aber diesen Befehl auf compact c, erkennt der Sensor nicht was ich will...
    Auch ein Quelltext in c für den SRF02 würde mir helfen.

    Freue mich über eure Hilfe

    Gruß

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Hallo,

    Also alle I2C Devices die ich kenne werden so ausgelesen:

    I2Cstart(Devadresse+write)
    I2Cwrite(Registeradresse, ab wo gelesen werden soll)
    I2Cstart(Devadresse+read)
    wert1 = I2Cread(Ack)
    wert2 = I2Cread(ack)
    wert3 = I2cread(Nack)
    I2Cstop()

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    30.01.2008
    Alter
    24
    Beiträge
    44
    Danke erst mal!
    In der bedienungsanleitung steht, dass der SRF02 6 "locations" hat:

    0)zum verwenden der commandotools(also messung starten)
    1)für weitere Befehle
    2)zum auslesen von highbyte
    3)zum auslesen von lowbyte
    4)zum ermitteln des max. Messbereichs
    5)zum ermitteln des min. Messbereichs

    Es wird eigendlich alles simpel erklärt: Messbefehl schicken und sich die Werte in den "locations 2 and 3" abholen. Mittlerweile zweifel ich sogar schon dran, das ich den Sensor überhaupt zum messen bringe. Der Vorschlag von oben funktioniert leider nicht (trotzdem danke!!!), da der Compiler beim Befehl "I2C_Start();" keine Argumente duldet. Wenn ich die Befehle danach mit "I2C_Write();" einbringe, gehts auch nicht.

    Ich bin auch auf eure aberwitzigsten Ideen angewiesen!!!Helft mir!!!

    Gruß Tenorm

Berechtigungen

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