www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem SRF08 Reichweite u. Verstärkung ändern


Autor: Falter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wir arbeiten mit SRF08 US-Sensoren in geschlossenen Räumen und haben 
Probleme beim Ändern der Reichweite bzw. des Verstärkungsfaktors unserer 
Sensoren.
Diese Änderungen bleiben ohne Wirkung.

Wir gehen vor wir im Datenblatt beschrieben.
Also z.B. zur Änderung des Verstärkungsfaktors auf '777' würden wir 
'0x24' ins Register 1 schreiben.
Aber selbst bei geringster Verstärkung werden min. 10 vagabundierende 
Echos erfasst.
Wie schon erwähnt hat auch die Änderung des Reichweite keinerlei 
Auswirkungen. (Den Registerwert hierfür berechnen wir mithilfe der 
Formel, die im Datenblatt angegeben ist...)

Das schreiben ins Register sollte eigentlich nicht das Problem sein, da 
das Auslösen der Messungen tadellos funktioniert (-> schreiben von 
81/0x51 in Register 0).
Ein Hardwaredefekt  ist eigentlich auch ausgeschlossen, weil das Problem 
bei all unseren sechs SRFs auftritt.

Gibt es dabei irgend etwas, dass man übersehen/vergessen könnte?
Hatte vllt. irgendjemand schon einmal ein ähnliches Problem?
Oder hat jemand schon einmal erfolgreich diese Parameter geändert?

Vielen Dank,
Andreas

Autor: Falter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Korrektur:
Verstärkung hat doch einen Effekt. Allerdings sehr viel geringer als 
erwartet. Mit minimalen Verstärkungsfaktor sind noch 3 Echos da, die 
keinem Objekt zugeordnet werden können.

Das Problem bei der Reichweite besteht aber immer noch.
Selbst wenn wir 0 ins Register schreiben (minimal Wert -> kürzeste 
Wartezeit auch Echos; entspricht 43mm Reichweite), werden Entfernungen 
bis zu 8m gemessen...
Ist das normal?

Autor: Yaro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich ist es nicht normal.... ich habe gerade ein SRF08 hier liegen 
und es auch ausprobiert, ich bekomme keinen Wert, der höher als der 
eingestellte ist.
Vielleicht  schreibt ihr in das falsche Register...
 Ihr müsst in das Register Nr. 2 den Reichweitenwert schreiben...
Verwendet ihr einen ATmega zum beschreiben des SRF08?
Dann könnt ich euch meinen Code Posten, der funktioniert.

Gruß, Yaro

Autor: Falter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Yaro,

danke fürs Ausprobieren und die schnelle Antwort!

Wir verwenden eine x86 basierte Architektur (ein RoBoard RB-100; 
Vortex86DX). Darauf läuft ein Linux.
Für den I2C Zugriff liefert der Hersteller eine Bibliothek mit, die wir 
auch verwenden.
Wir schreiben auch in Register 2.

Ich fände es trotzdem interessant einmal den Code zu sehen, mit dem es 
bei deinem ATmega klappt.

Hast du vllt. irgendwann schon einmal mit dem Verstärkungsfaktor 
experimentiert? Weißt du, wie unempfindlich man die Sensoren 
konfigurieren kann?
Mich wundert, dass die Messergebnisse bei uns, trotz reduzierter 
Verstärkung, immer noch so schlecht sind. (Wie gesagt: 3 bis 10 
"Geister-Distanzen")
Früher hatten wir solche Probleme (mit vagabundierenden Echos) überhaupt 
nicht. Selbst ohne Änderung der Verstärkung. Und nun bei allen Sechs...

Viele Grüße!

Autor: Yaro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem Verstärkungsfaktor habe ich noch nicht wirklich 
rumexperimentiert, werde es aber spätestens nächstes Wochenende nochmal 
machen.
Um vagabundierenden Echos zu vermeiden, könnt ihr versuchen, das Modul 
von den Seiten und von hinten her zu dämmen (Watte funktioniert ganz 
gut). Auch könntet ihr versuchen, sowas wie kleine Röhrchen (z.B. aus 
Pappmaschee) auf die Lautsprecher setzten, damit nur Signale aus einer 
bestimmten Richtung empfangen werden.
Wenn nötig, könnt ihr die Verstärkung eben auch Hardware-seitig kleiner 
machen, indem ihr ein bisschen (wirklich wenig) Watte vor die 
Lautsprecher packt.

Hier noch mein Code:
Ich lese aber nur das erste Echo aus, für meine Anwendung brauche ich 
die Mehrfachechos nicht.
 
#define READ 1
#define WRITE 0
#define TWI_READY (TWCR & (1<<TWINT))

#define SRF08ADR 0xE0

void TWIInit(void){
  PORTC |= 0x30;  //PULLUP Widerstaende
  TWBR = 0xFF;
}

void TWIStart(uint8_t addr, uint8_t RW){
  uint8_t temp = 1;

  while(temp == 1){
    TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);   //START
    while(!TWI_READY);
    if(TWSR == 0x00) {TWCR = (1<<TWINT) | (1<<TWSTO) | (1<<TWEN);};
    if(TWSR != 0x08 && TWSR != 0x10) {continue;}

    TWDR = addr + RW;//LCD_BOARD_ADR;     //send ADR+W
    TWCR = (1<<TWINT) | (1<<TWEN);
    while(!TWI_READY);
    if(TWSR == 0x00) {TWCR = (1<<TWINT) | (1<<TWSTO) | (1<<TWEN);};
    if(TWSR != 0x18 && TWSR != 0x40) {continue;}
    temp = 0;
  }
}

void TWIStop(void){
  TWCR = (1<<TWINT) | (1<<TWSTO) | (1<<TWEN);
  while(TWCR & (1<<TWSTO));
}

//Byte senden
uint8_t TWIWrite(uint8_t data ){
    TWDR = data;
    TWCR = (1<<TWINT) | (1<<TWEN);

    while(!TWI_READY);

    if(TWSR != 0x28){return 1;}
    return 0;
}

//Byte empfangen
uint8_t TWIReadAck(void){
    TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWEN);
    while(!TWI_READY);
    return TWDR;
}

//letztes zu empfangendes Byte empfangen
uint8_t TWIReadNack(void){
    TWCR = (1<<TWINT) | (1<<TWEN);
    while(!TWI_READY);
    return TWDR;
}



void SRF08Init(uint8_t range, uint8_t amp){
    TWIInit();

    //Reichweite einstellen
    TWIStart(SRF08ADR, WRITE);  //Start
    TWIWrite(2);  //Reichweiten-Register (2)
    TWIWrite(range);
    TWIStop();

    //Verstaerkung einstellen
    TWIStart(SRF08ADR, WRITE);  //Start
    TWIWrite(1);  //Verstaerkungs-Register (1)
    TWIWrite(amp);
    TWIStop();
}




uint8_t SRF08GetData(void){
  uint8_t version = 0xFF;
  uint16_t dist;

  //In cm auslesen
  TWIStart(SRF08ADR, WRITE);  //Start
  TWIWrite(0);  //Command-Register
  TWIWrite(0x51);  //Messung in cm
  TWIStop();

  //warten bis fertig
  while(version == 0xFF){
    TWIStart(SRF08ADR, WRITE);  //Start
    TWIWrite(0);
    TWIStart(SRF08ADR, READ);  //Start
    version = TWIReadNack();
    TWIStop();
  }

  //auslesen
  TWIStart(SRF08ADR, WRITE);  //Start
  TWIWrite(3);
  TWIStart(SRF08ADR, READ);  //Start

  dist = TWIReadNack();

  TWIStop();

  return dist;
}

Autor: Yaro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe jetzt noch den Verstärkungsfaktor getestet.
Ich sehe sehr deutliche Unterschiede, wenn ich den Verstärkungsfaktor 
ändere!
Ändert ihr ihn immer nur bei der Initialisierung, oder könnt ihr ihn 
dauernd ändern?
Wenn man ständig Messungen macht und zwischendurch (z.B. mit einem Poti) 
den Verstärkungsfaktor ändert, dann sollte man die Unterschiede deutlich 
erkennen.

Gruß, Yaro

Autor: Falter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal danke fürs Ausprobieren!
Wir hatten schon Joghurtbecher (mit Schaumstoff ausgekleidet) zur 
Abschirmung gegen störende Echos von der Seite montiert. An Störungen 
von der ungeschützten Rückseite habe ich noch nicht gedacht. Auch die 
Idee mit der dünnen Lage Watte über dem Lautsprecher finde ich gut - 
hört sich vielversprechend an!

Also bei der Verstärkung haben wir inzwischen auch Auswirkungen 
beobachtet.
Allerdings sind die kleiner als ich erwartet hatte. Im Moment messen wir 
einfach von der Tischkante in Richtung Teppichboden.
Ich glaube um da noch "unsensibler" zu werden, müssen wir in die 
Watte-Kiste greifen.

Wie viel misst er denn bei dir noch, wenn du die Verstärkung ganz auf 
den minimal Wert setzt?
Misst er dann überhaupt noch etwas?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.