Hallo zusammen,
die bisher abgehandelten Beiträge waren leider nicht so hilfreich und
etwas weiter zurückliegend, deshalb nun ein neuer...
Ich habe Probleme beim Auslesen eines Ultraschallsensor SRF10.
Hardware: Mega16, 16 MHZ, am I2C hängt der Sensor. Pullups 10k, I2C
Clock 111kHz. Adresse SRF10: 0xE0
Software: WinAVR, AVR Studio 4, twimaster.c und I2Cmaster.h von Peter
Fleury
(.c Datein sind zwar für SRF08 geschrieben, sollten aber auch für srf10
vom Prinzip her funkionieren.)
Problembeschreibung:
Nach dem Rüberspielen blinkt der Sensor. Laut Datenblatt tut er dies bei
jedem Aussenden eines US Impulses. Dies ist also normal.
Über die UART / Hyper Terminal wird stolz der Wert 0 ausgegeben, was
nicht sein kann. Verstärkungsfaktoren und Reichweiten x mal ausprobiert.
Fragestellungen an die Spezialisten
Etwas scheint beim Auslesen nicht richtig zu sein. Wie kann es sein,
dass er ständig 0 ausgibt?
void srf08_auslesen(void)
{
if(srf08_ready())
{
i2c_start(SRF08_adress+I2C_WRITE);
i2c_write(0x01);//Ergebnisregister wählen
i2c_rep_start(SRF08_adress+I2C_READ);
//SRF08_light= i2c_readAck();
SRF08_messwert = ((i2c_readAck())<<8); //highbyte
SRF08_messwert += (i2c_readNak()); //lowbyte
i2c_stop();
}
}
Wie kann ich ausschließen, dass nicht das Modul im Eimer ist?
Hat jemand eine hex, die mal probehalber rüberspielen kann, um ein
Defekt auszuschließen.
Über jeden sinnvollen Beitrag dazu wäre ich sehr dankbar.
Danke schon mal für Eure Zeit.
Wenn man genau hinhört, bemerkt man bei jedem Ultraschallimpuls ein
Knacken. Daran kann man erkennen, ob überhaupt ein Impulse gesendet
wird. Aber das sollte eigentlich der Fall sein, wenn die LED blinkt.
Der Code für den SRF08 stammt von mir, und ich habe ihn gerade noch mal
getestet. Nachdem ich den Wackelkontakt im Stecker gefunden habe,
funktioniert er einwandfrei. Ich habe bloß den Code auf mein Board
angepasst, und den gain-Wert erhöht.
Hallo Leute,
vielen Dank für schnelle Antwort. Schon, mal den Autor
kennenzulerenen...
Also ein Knacken am Sensor beim Senden kann ich nicht wahrnehmen.
Die Peter Feury Dateien geben bei mir keinerlei Fehlermeldungen, nicht
einmal Warnungen.
Uwe,
ich verwende ja nun NICHT den SRF08, sondern den SRF10. In Deiner
srf08_auslesen (void) steht,
i2c_write(0x01);//Ergebnisregister Lichtsensor wählen
Der SRF10 hat nun keinen Lichtsensor. Heißt dass, dass ich diese Zeile
rauskommentieren muss bzw. 0x02 / 0x03 für das Auslesen des Registers
für die Entfernung wählen muss?
Ich danke Dir für die hex Datei. Ich werde es damit mal testen und ein
Feedback geben. Schönen Abend
Gruß
Andy
Hallo Leute,
ich habe die main.hex einmal ausprobiert. Die Kommunikation funktioniert
(LED blinkt), aber dennoch wird über die UART permanent der Wert 0
ausgegeben. Für mich ein klares Zeichen, dass das Modul im Eimer ist.
Was das Fehlen des Knackens erklärt. (Hört man das wirklich deutlich?)
Im Anhang mal meine hex. Wenn Du mal ganz viel Zeit und Lust hast sie
auszuprobieren...muss aber net sein.
Ich wende mich mal an den Verkäufer des Modules. Mal sehen, was sich
machen lässt.
Nochmals vielen Dank.
Andy
Hallo Leute,
der Umtausch des Modules brachte leider nichts. Keine Änderungen, trotz
blinkender LED gibt es ständig den Wert Null raus.
Deshalb: Hat jemand von euch schon mal das SRF10 zum Laufen bekommen?
Wenn ja, könnte ihr mit bitte einen Hinweis geben, ob ihr ähnliche
Probleme hattet?
Danke Euch
Andy
Hallo zusammen,
nachdem ich noch mal so einiges versucht habe, das SRF10 zum Laufen zu
bekommen, bin ich allmählich betriebsbild.
Könntet Ihr bitte einen Blick auf den Quellcode werfen.
Das Auslösen der Messung geht, der Sensor blinkt entsprechend. Aber wie
lese ich den gemessenen Wert aus? Wo der Fehler beim Auslesen der Daten
liegt, kann ich nicht nachvollziehen. Er gibt ständig Null zurück. Auch
das Auslesen der Firmware geht nicht. Die I2C Routinen stammen von Peter
Fleury. I2c Init, 110kHz CLK, Pullups usw. ist alles in Ordnung.
Da stimmt was prinzipelles beim Auslesen nicht.
1
// Testprogrmm SRF10 am ATMega16
2
// Crystal: 16.000Mhz
3
// Software: winAVR, AVR Studio4,GCC
4
5
6
#include<avr/io.h>
7
#include<avr/interrupt.h>
8
#include<stdio.h>
9
#include<util/twi.h>
10
11
unsignedintFirmware;
12
charPuffer[10];
13
doubleD;
14
intH,L;
15
16
#define SRF10_ADR 0xE0
17
18
19
20
voidread_Firmware(void)
21
{
22
i2c_start_wait(SRF10_ADR+TW_WRITE);// set device address and write mode
23
i2c_write(0x00);
24
i2c_stop();// write address = 0
25
i2c_rep_start(SRF10_ADR+TW_READ);// set device address and read mode
26
Firmware=i2c_readNak();
27
i2c_stop();
28
29
//Ausgabe
30
sendUART(utoa(Firmware,Puffer,10));
31
sendUART(" ; ");
32
}
33
34
35
36
voidMessung(void)
37
{
38
//Verstärkung setzen,sende START Condition, Verstärkungsregister wählen, beschreiben mit 7
39
i2c_start(SRF10_ADR+TW_WRITE);
40
i2c_write(0x01);
41
i2c_write(0x07);
42
i2c_stop();
43
44
//Reichweite setzen, sende START Condition, Reichweitenregister wählen, beschreiben für 1m
45
i2c_start_wait(SRF10_ADR+TW_WRITE);
46
i2c_write(0x02);
47
i2c_write(0x18);
48
i2c_stop();
49
50
//Messung starten, sende START Condition, Befehlsregister wählen, messen in cm