PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SRF08 - nur eine Messung



sneaker
14.11.2004, 11:42
Hallo alle zusammen,

mein SRF08 US-Modul misst genau einmal die korrekte Entfernung, bei einer
zweiten Messung danach verweigert es seinen Dienst. Weiß einer warum, muss es vielleicht irgendwie für eine neue Messung zurückgesetzt werden ?

Schon mal danke im vorraus

Florian
14.11.2004, 12:57
Vielleicht misst Du zu schnell hintereinander und das Modul ist noch nicht bereit?

Joerg
14.11.2004, 14:34
Hallo sneaker,


mein SRF08 US-Modul misst genau einmal die korrekte Entfernung, bei einer
zweiten Messung danach verweigert es seinen Dienst. Weiß einer warum, muss es vielleicht irgendwie für eine neue Messung zurückgesetzt werden ?

von diesen Phänomenen habe ich bislang noch nichts gehört. Sprich, ein Rücksetzen zwischen den Messungen ist nicht erforderlich. Eine zu hohe Messrate kann's auch nicht sein, da ja ein richtiges Ergebnis zurückkommt. Wenn man zu früh abfragen würde, erhält man einfach gar kein Ergebnis.

Was passiert bei der Folgemessung? Leuchtet die LED noch beim Messkommando? Ist irgendwas auf dem I2C-Bus faul?
Gib mal bitte noch ein paar weitere Details, evtl. auch Programmstücke um etwas mehr Unterstützung bieten zu können.

Viele Grüße
Jörg

sneaker
14.11.2004, 15:01
Hallo Jörg, Hallo Florian,

mein Code sieht wie folgt aus:

01 startIIC();
02 ack=sendIIC(0xE0);
03 ack=sendIIC(0x00);
04 ack=sendIIC(0x51);
05 stopIIC();
06 wait1();
07 startIIC();
08 ack=sendIIC(0xE0);
09 ack=sendIIC(0x02);
10 restartIIC();
11 ack=sendIIC(0xE1);
12 read1 = receiveIIC(ack);
13 read2 = receiveIIC(ack);
14 stopIIC();

dies ist die Funktion die ich zur jeden Messung aufrufe. Wie gesagt die erste Messung klappt, die zweite scheitert an der Zeile 03, es wird also kein zweiter Burst ausgelöst. Busprobleme könnten natürlich sein, schließe ich den Busmaster (Mikrocontroller) und das US-Modul an eine seperate galvanisch getrennte Spannungsversorgung an, kann ich mehrere Messungen hintereinander ausführen. Laut Busspezifikation brauchen die Bus-Teilnehmer aber alle eine gemeinsame Masseleitung, dann funktioniert es aber nicht mehr. Eine Messung zwischen den beiden Masseleitung ergibt einen Potentialunterschied, der zwischen 3 und 4 Volt schwankt.

Gruß sneaker

Joerg
14.11.2004, 19:11
Hallo sneaker,

das Programm sieht erstmal OK aus, sofern die Funktionen auch das machen was dran steht. Ich denke aber mal, dass das auch so ist, sonst würde ja überhaupt kein vernünftiger Wert zurückkommen.


Busprobleme könnten natürlich sein, schließe ich den Busmaster (Mikrocontroller) und das US-Modul an eine seperate galvanisch getrennte Spannungsversorgung an, kann ich mehrere Messungen hintereinander ausführen.

da dürfte sicherlich das Problem liegen. Normalerweise dürfte die Kommunikation ohne Masseverbindung überhaupt nicht gehen, da das Bezugspotenzial fehlt. Da das dennoch funktioniert, gibt es irgendeine parasitäre Verbindung (Gehäuse, PE, Fehler im Netzteil, ....).


Eine Messung zwischen den beiden Masseleitung ergibt einen Potentialunterschied, der zwischen 3 und 4 Volt schwankt.

Das darf eigentlich nicht der Fall sein. Bei genügend kleinem Innenwiderstand kannst du problemlos damit deinen Controller oder auch das Modul killen. Also ich würde dir raten den Bus, bzw. die Geräte am Bus nochmal daraufhin zu prüfen.

HTH und Viele Grüße
Jörg

14.11.2004, 20:00
Hallo Jörg,

ich hab jetzt nicht genau verstanden auf was ich die Sachen prüfen soll. Ob ich sie gekillt habe ? Ich denke nicht das Sie kaputt sind, da die beiden Module (Mikrocontroller / SRF08) unter bestimmten Bedingungen funktionieren. Ob eine parasitäre Verbindung besteht kann ich ja nochmal prüfen, z.B. Spannungsquelle 1 = Netzteil und 2 = Batterie, dann dürfte es auf jedenfall nicht mehr gehen. Kann es auch sein das die Pull-UP-Widerstände zu klein gewählt sind?

Gruß Marc

Joerg
14.11.2004, 20:56
Hallo Marc,

gekillt hast du sicherlich gar nichts. Sonst würde kaum noch was gehen.


Ob eine parasitäre Verbindung besteht kann ich ja nochmal prüfen, z.B. Spannungsquelle 1 = Netzteil und 2 = Batterie, dann dürfte es auf jedenfall nicht mehr gehen.

gute Idee.


Kann es auch sein das die Pull-UP-Widerstände zu klein gewählt sind?

wie klein sind sie denn?

Viele Grüße
Jörg

sneaker
15.11.2004, 10:37
Hallo Jörg,

ich hab das mal mit den beiden verschiedenen Spannungsquellen ausprobiert, das Ergebnis ist aber das gleiche. Auch der Potentialunterschied ist gleich.
Vielleicht sollte ich noch sagen das bei nicht gemeinsamer Masse, alle zwei bis drei Messungen ein Busfehler auftritt den ich aber durch mein Programm abfangen kann.
Zu den Pull-Up-Widerständen, dort habe ich jetzt gelesen das die Widerstände im Busmaster also dem Mikrocontroller schon integriert sind. Dann kann ich den Pull-Up-Widerstand nicht vergrößern da die neuen Widerstände mit den alten parallel liegen würden. Ich habe trotzdem es mal mit 8,2 und 4,7 kOhm ausprobiert, dadurch hab ich denn einen kleineren Pull-Up-Widerstand gewählt, was aber auch nichts genutzt hat.
Die Moduladresse konnte ich bisher auch noch nicht ändern.

Das wars dann erstmal, also schönen Gruß

Marc

Joerg
15.11.2004, 12:24
Hi Marc,


ich hab das mal mit den beiden verschiedenen Spannungsquellen ausprobiert, das Ergebnis ist aber das gleiche. Auch der Potentialunterschied ist gleich.

nochmal, damit wir die gleiche Sprache reden, Controller und SRF08 wird aus unterschiedlichen Quellen versorgt (z.B. Netzgerät und Batterie) und da ist zwischen beiden, nicht verbundenen, Masse-Potenzialen ein Spannung messbar?
OK, sofern die I2C-Leitungen angeschlossen sind und das Messgerät hinreichend hochohmig misst man die hochgezogenen I2C-Leitungen über den Controller zurück nach Masse des Masters.
Wenn die I2C-Leitungen nicht verbunden sind, darf aber keine Spannung messbar sein!
Weiterhin kann/darf die Schaltung ohne verbundene Massen nicht funktionieren. Oder da ist doch noch ne versteckte Verbindung irgendwo im Aufbau.


Zu den Pull-Up-Widerständen, dort habe ich jetzt gelesen das die Widerstände im Busmaster also dem Mikrocontroller schon integriert sind. Dann kann ich den Pull-Up-Widerstand nicht vergrößern da die neuen Widerstände mit den alten parallel liegen würden. Ich habe trotzdem es mal mit 8,2 und 4,7 kOhm ausprobiert, dadurch hab ich denn einen kleineren Pull-Up-Widerstand gewählt, was aber auch nichts genutzt hat.

OK daran liegts nicht.


Die Moduladresse konnte ich bisher auch noch nicht ändern.

Naja dazu braucht man sequentiell einige funktionierende Buszugriffe und das scheint hier ein Problem zu sein. Um was für einen Controller handelt es sich denn überhaupt? Welche Geschwindigkeit auf dem Bus (SCL-Takt)?
Hast du ein Scope um den Bus einfach mal anzugucken?

Viele Grüße
Jörg

sneaker
15.11.2004, 13:22
Hallo Jörg,

ja mein Mikrocontroller ist der HCS12 von Motorola (um genau zu sein der LVCS12 von elektronikladen) , leider ein seltener Gast im Internet. Die Taktrate ist auf 100KHz also 100kbit/s eingestellt.

Nochmal zu den Spannungsquellen: es ist so wie du es beschrieben hast, also wenn die I2C-Leitungen nicht angeschlossen sind dann messe ich natürlich nix.

Scope sind vorhanden, ich glaub aber alle ohne Speicherfunktionen. Werd ich mal rauskramen.

glowbrain1
15.11.2004, 15:44
Hi Jörg,

Ich benütze auch des HCS12 mit SRF08. Hab auch viele Probleme gehabt es problemlos laufen zu bringen. Benützt du des eingebaute IIC Modul? Mit interrupts oder gepollt?

Wie bemerket, es ist wichtig ein „common ground“ zu haben. Gibt es ein grund warum du nicht ein einziges power supply benützt

sneaker
15.11.2004, 17:53
Hallo glowbrain1,

ich benutze das eingebaute IIC-Modul auf dem HCS12. Ich benutze keine Interrupts sondern polle. Wie ich schon oben erwähnt habe versuche ich ja auf eine einzige Masseleitung zu kommen, wo es dann genau nicht funktioniert.
Wo liegt also der Fehler?
Da du ja diese Probleme schon behoben hast, kannst du mir vielleicht deinen Aufbau beschreiben und vielleicht mal deinen Code geben.
Mein Aufbau ist zur Zeit: das ich das interne Modul benutze das auf die beiden externen Pinreihen rausgeführt wird. Beim mir ist es die X5-Reihe und zwar die Pins 47(SDA) und 48(SCL), als Stromversorgung versuche ich zur Zeit die ebenfalls herrausgeführte Pins zu nutzen (wäre direkt darunter Pin 49 (VCC) und Pin 50 (GND)). Was dann auch die vorgeschriebene gemeinsame Masse haben sollte. Bei mir gehen also 4 Kabel von SRF08 Modul direkt zum HCS12.

Schönen Gruß an alle

Marc

glowbrain1
15.11.2004, 18:30
Hab V+ = 5v, und 2KOhm wiederstand bis SCL u. SDA. Standard SCL/SDA pins (kenn pin nr. nicht auswendig)

Ein paar Bemerkungen. Zwischen Kommando schreiben, und Register lesen functsionierts besser (überhaubt?) mit restart, nicht Stopp/start (frag nicht warum?). Vorsichtshalber probiere eine grösere delay zwischen messungen.

Ich hab so viele unregelmesigkeiten zwischen meine (5) iic gerate und hcs12 IIC module gefunden. Zuerst hab ich von interrupt zu polling gegangen. Dan von polling to bitbang an andere pins. Auf jeden fall, solltest ein interrupt driven iic-monitor schreiben, und an die SCL/SDA leitung legen, und dann des outputs analysieren. Ich kann das monitor code posten wenn du willst. Ich gehe davon aus das du C benutzt. Welches compiler?

Joerg
15.11.2004, 19:08
Hallo Marc,

ich habe mir jetzt die Schaltung+Manual von Elmicro heruntergeladen.


Beim mir ist es die X5-Reihe und zwar die Pins 47(SDA) und 48(SCL), als Stromversorgung versuche ich zur Zeit die ebenfalls herrausgeführte Pins zu nutzen (wäre direkt darunter Pin 49 (VCC) und Pin 50 (GND)). Was dann auch die vorgeschriebene gemeinsame Masse haben sollte. Bei mir gehen also 4 Kabel von SRF08 Modul direkt zum HCS12.

Muss ehrlich sagen, ich täts genauso anschließen. Wichtig ist, dass das dabei das Controllermodul mit 5V und nicht 3,3V versorgt wird. Die Pullups sind 4,7K also OK.

Bleibt die Frage, ob der Controller vielleicht zwischendurch auf die RTC zugreift (ausgelöst durch Interrupt) und damit irgendwas abschießt.
Das erklärt aber alles nicht den "Masse-Effekt".
Blocke mal spaßeshalber die Versorgungsspannung mit einem kleinen Elko (5-10uF) direkt am Modul ab.

Zu der Softwaregeschichte kann ich nichts schreiben, da ich die konkrete Implementierung nicht kenne. glowbrain hat Recht, beim Lesezugriff sollte statt stop/start ein "repeated start" gesendet werden. Das ist aber sicherlich nicht die Ursache für das Problem.

Viele Grüße
Jörg

sneaker
15.11.2004, 19:12
Hallo glowbrain1,

also wenn ich das richtig verstanden habe verwendest du die 2KOhm als Pin-Up-Widerstand, also von 5V zur SCL und 5V zur SDA. Das mit dem Restart ist klar. Zwischen den Messungen sollte eigentlich kein delay notwendig sein. Natürlich benutze ich C, als Compiler benutze ich zur Zeit die 30 Tage Test Version von ImageCraft IDE for ICC12. Welchen Compiler benutzt du denn. Das mit dem Monitorcode wär super.

Gruß Marc

glowbrain1
15.11.2004, 20:49
Ich bin gleich zu GNU gegangen (lieber als nach 30 tage), und bin einigermassen zufrieden, vor allen mit das preis-leistungs verhältniss.

Das monitor program is einfach genug, so das du die custom defines von metroworks relativ einfach hier austauschen kannst. Es benüzt port-H pins 0&1, und interrupt wird von das relevante edge ge-trigger’t . Es speichert dan MON_SIZE daten. Du kannst entweder zu dien Gelegenheit diesen dumpIICTrace() aufrufen, oder wenn es voll ist, wird’s von alleine gemacht.

Das output kommt als 2 reihen nuller und einser raus, und kann als primitiver logic-analiser gesehn werden. Mann kann vor allem sehen ob die start-stop und ack Sequenzen so sind wie Mann sich es vorstellt




#define PORT (*((ptPIM)0x240))
#define scl PORT.pth.byte & PTH0
#define sda PORT.pth.byte & PTH1

#define PortHIntVector (* (unsigned int *)(0x3e4c))

// records old value of portH
unsigned int porth;
#define MON_SIZE 200
tU08 trans[MON_SIZE];
unsigned int count=0;


void PORTH_ISR(void) __attribute__((interrupt));


void initIICMonitor(void)
{

// connect ISR's to ports
PortHIntVector = (unsigned int)PORTH_ISR;

// set pins 0&1 to input
PORT.ddrh.byte &= 0xFC;

// initially trigger on falling edge
PORT.ppsh.byte &= 0xFC;

// clear interrupts on pins
PORT.pifh.byte |= 0x03;
// enable interrupts on pins 0&1
PORT.pieh.byte |= 0x03;
asm("cli");

}

void dumpIICTrace(){
int i;
int c2;
volatile tU08 oscl = 0;
volatile tU08 osda = 0;

//enable interrupts
asm("sei");
DBug12FNP->printf("iic_bitslave TestPorts:count %d\n\r",count);
for (c2=0;c2<count;c2++){
DBug12FNP->printf("%d",trans[c2]&1);
}
DBug12FNP->printf("\n\r");
for (c2=0;c2<count;c2++){
DBug12FNP->printf("%d",(trans[c2]&2)>>1);
}
DBug12FNP->printf("\n\r");
count = 0;
// disable interrupts
asm("cli");
}

void PORTH_ISR(void){

volatile unsigned char lporth;
lporth = PORT.pth.byte;
//DBug12FNP->printf("iic_mon : ISR called %x pifh %x old %x\n\r",PORT.pifh.byte,lporth,porth);

if (count < MON_SIZE){
trans[count] = lporth;
if ((lporth&1)==1) {
// now triger on falling edge
PORT.ppsh.byte &= 0xFE;
}else{
// now triger on raising edge
PORT.ppsh.byte |= 0x01;
}

if ((lporth&2)==2) {
// now triger on falling edge
PORT.ppsh.byte &= 0xFD;
}else{
// now triger on raising edge
PORT.ppsh.byte |= 0x02;
}
count++;
}
else{
DBug12FNP->printf("iic_mon: buffer overflow\n\r");
dumpIICTrace();
}
// reset interrupts
// clear interrupts on pins
if ((PORT.pifh.byte&1)==1) PORT.pifh.byte |= 0x01;
if ((PORT.pifh.byte&2)==2) PORT.pifh.byte |= 0x02;
}

Joerg
16.11.2004, 09:02
Hallo glowbrain1,

also 2K parallel zu 4,7K macht 1,4K als PullUp was schon arg niedrig ist. Ich glaube auch nicht, dass das die Ursache für das Problem ist.

BTW, den Monitor finde ich Klasse!

Viele Grüße
Jörg

16.11.2004, 11:47
Hallo Jörg,

hab die Versorgungsspannung mit den Elkos geblockt, habe dann immer noch ein Potential von 1,5 bis 2 Volt. War aber ein 4,7uF Elko, sollte aber auch gehen. Das US-Modul blink dann am Anfang (Adressenblinken) wie erwartet auch nicht mehr.
Denn HCS betreibe ich natürlich mit 5V.

Joerg
16.11.2004, 12:06
Hallo Marc,

den Elko auch wirklich parallel zur Spannungsversorgung?!


Das US-Modul blink dann am Anfang (Adressenblinken) wie erwartet auch nicht mehr.

Frage: Warum wie erwartet und es muss aber blinken!!

Viele Grüße
Jörg

sneaker
16.11.2004, 12:42
Hallo Jörg,

habe unter:

Blocke mal spaßeshalber die Versorgungsspannung...
wohl etwas anderes verstanden. Wenn ich aber den Elko parallel zur Versorgungsspannung am Modul einbaue, blinkt das Modul wie gewohnt und ich kann keine Messung machen. Wenn ich aber den Elko mit Klaps / Fliegenbeine oder wie auch immer diese Klemmen heißen anschließe geht es wie gewohnt also nur eine Messung. Wahrscheinlich weil der Elko dann nicht mehr direkt am Modul ist sondern 15cm Kabel dazwischen ist.

Nachtrag:
Mir ist noch was aufgefallen und zwar kann ich ja genau eine Messung machen, wenn ich aber die Spannung von Modul und HCS12 kurz unterbreche kann ich wieder eine Messung machen. Wenn ich jetzt aber nur den HCS12 resete kann ich keine Messung machen.

Gruß Marc

16.11.2004, 14:25
Hi Marc,


habe unter:

Blocke mal spaßeshalber die Versorgungsspannung...
wohl etwas anderes verstanden.

hmm, abblocken ist doch eigentlich recht gebräuchlich, egal. Sorry für den missverständlichen Ausdruck. Der Kondensator sollte den Spannungseinbruch auffangen (stützen) der entsteht, wenn das Modul bei Messen aus dem standby aufwacht und einen größeren Strom zieht.


Wenn ich aber den Elko parallel zur Versorgungsspannung am Modul einbaue, blinkt das Modul wie gewohnt und ich kann keine Messung machen. Wenn ich aber den Elko mit Klaps / Fliegenbeine oder wie auch immer diese Klemmen heißen anschließe geht es wie gewohnt also nur eine Messung. Wahrscheinlich weil der Elko dann nicht mehr direkt am Modul ist sondern 15cm Kabel dazwischen ist.

Also verschlechtert sich der Zustand mit dem Kondensator. Das kann aber nicht sein, da ist irgendwas oberfaul!
Schick mir bitte das Modul zur Überprüfung zurück!
So kann ich wenigstens feststellen, ob das Problem am Modul liegt.


Mir ist noch was aufgefallen und zwar kann ich ja genau eine Messung machen, wenn ich aber die Spannung von Modul und HCS12 kurz unterbreche kann ich wieder eine Messung machen. Wenn ich jetzt aber nur den HCS12 resete kann ich keine Messung machen.

Naja, das Modul stürzt ab, das war mir schon länger klar. Die Frage ist nur, warum. Ich tippe immer noch, nach den immer noch ungeklärten Effekten die hier zu Tage treten auf irgendwelche Ungereimtheiten in der Spannungsversorgung (Verbindung Controller-Modul - SRF08) .

Viele Grüße
Jörg

sneaker
16.11.2004, 15:26
Hallo Jörg,

ich glaube nicht das das Modul wirklich kaputt ist, denn ich habe ingesamt drei Stück. Und alle drei verhalten sich ähnlich, wobei ich immer nur mit einem arbeite, habe aber mal an einem anderen ausprobiert ob es sich ähnlich verhält. Falls du es denoch haben möchtest schicke ich es dir gerne zu.

Dann habe ich meinen Code so abgeändert das ich an jeder nur erdenklichen Stelle den Busstatus abfrage, wobei dann rausgekommen ist das wenn ich die zweite Messung starten möchte das nachdem Startsignal der Busstatus mir ein "Arbitration lost" meldet was wohl daher rührt das der Bus beim senden des Startsignals nicht frei ist. Jetzt ist die Frage ob ich einfach nur sc*** Code gebaut habe oder ob der Bus nicht freigegeben wird weil das US-Modul abgestürtz ist (wenn das überhaupt geht das das Modul den Bus dann nicht freigibt).

Tja zu denn Masseeffekten kann ich nicht viel zu sagen da meine Elektrotechnikkentnisse leider begrentz sind, daher wohl auch die Missverständnisse.

Schönen Gruß

Marc

Joerg
16.11.2004, 15:53
Hi Marc,


ich glaube nicht das das Modul wirklich kaputt ist, denn ich habe ingesamt drei Stück. Und alle drei verhalten sich ähnlich, wobei ich immer nur mit einem arbeite, habe aber mal an einem anderen ausprobiert ob es sich ähnlich verhält. Falls du es denoch haben möchtest schicke ich es dir gerne zu.

Nein dann bringt es wohl nichts. Die Wahrscheinlichkeit dass alle drei kaputt sind geht wohl gegen Null, überhaupt ist die Rückläuferquote sehr, sehr gering. Ich glaube dieses Jahr war wohl noch kein defektes SRF08 dabei.

Aber dennoch muss eine Lösung her.


Dann habe ich meinen Code so abgeändert das ich an jeder nur erdenklichen Stelle den Busstatus abfrage, wobei dann rausgekommen ist das wenn ich die zweite Messung starten möchte das nachdem Startsignal der Busstatus mir ein "Arbitration lost" meldet was wohl daher rührt das der Bus beim senden des Startsignals nicht frei ist. Jetz ist die Frage ob ich einfach nur sc*** Code gebaut habe oder ob der Bus nicht freigegeben wird weil das US-Modul abgestürtz ist (wenn das überhaupt geht).

Das geht schon, wenn das Modul den Bus (irgendeine Leitung) dauerhaft auf Low zieht. Der I2C Bus funktioniert ja so, dass alle Busteilnehmer den Bus auf Masse ziehen können. Irgendwo im System (zumeist beim Busmaster) gibt es PullUp-Widerstände, die den H-Pegel liefern.

Eigentlich ist solch eine Konstruktion sehr schnell zum Laufen zu bewegen, mal abgesehen davon, dass es softwareseitig auf manchen Controllern etwas schwierig zu implementieren ist. Das scheint aber bei dir gar nicht der Fall zu sein, da der Controller ja eine hardwareseitige I2C-Unterstützung bietet.


Aber ich habe im Moment echt keine Ahnung, was hier schiefläuft.

Gibt es vielleicht doch einen Adresskonflikt durch den EEPROM oder die RTC? Das würde aber die anderen Phänomene nicht erklären.

Vielleicht kannst du auch einen Elektroniker mal zu Rate ziehen, in das hier geschriebene einweihen und mal auf die Schaltung gucken lassen.

Viel Erfolg und
Viele Grüße
Jörg

glowbrain1
16.11.2004, 16:50
Könnte auch sein das ein oder andere ack entweder low bleibt, oder nicht weitergeclock’t wird oder zu kurz bleibt. Wie gesagt, ich habe viele probleme gehabt. Rate ernsthaft die signale zu beobachten und analysieren. Must vorsichtig sein das du den module klar machst das nur ein bit gelesen wird:

IIC.ibcr.byte |= TXAK; /* disable active low acknowledge bit (signal to slave to stop Tx) */

glowbrain1
16.11.2004, 21:44
Fält mir nochwas ein. In SRF08 docu seite 1.


Die Resultate werden dann einzeln von jeder Moduladresse geholt.

Diene zeile 12-13 lesen 2 bytes hintereinander. Ich habe das docu war genommen, und wieder das ganse lese zugriff (mit module addresse etc.) viederhold für jeden register.

Joerg
16.11.2004, 21:57
Hallo glowbrain,

beim SRF08 geht auch das wortweise Lesen. Sollte also nicht das Problem sein.
Das letzte ACK beim Lesen darf natürlich nicht aktiv sein.

Viele Grüße
Jörg

sneaker
17.11.2004, 12:06
Hallo alle zusammen,

hurra es klappt endlich.

Woran lage es ?

Das letzte ACK beim Lesen darf natürlich nicht aktiv sein.
Auch diese habe ich kontrolliert und immer gedacht es muss so aussehen:

read2 = receiveIIC(0x00);

auch so der Beispielcode unter: http://www.robot-electronics.co.uk/htm/using_the_i2c_bus.htm



i2c_start(); // send start sequence
i2c_tx(0xE0); // SRF08 I2C address with R/W bit clear
i2c_tx(0x01); // SRF08 light sensor register address
i2c_start(); // send a restart sequence
i2c_tx(0xE1); // SRF08 I2C address with R/W bit set
lightsensor = i2c_rx(1); // get light sensor and send acknowledge. Internal register address will increment automatically.
rangehigh = i2c_rx(1); // get the high byte of the range and send acknowledge.
rangelow = i2c_rx(0); // get low byte of the range - note we don't acknowledge the last byte.
i2c_stop(); // send stop sequence

steht ja rangelow = i2c_rx(0);

Bei mir sieht das aber anders aus und zwar so
read2 = receiveIIC(0x01);
funktioniert alles hervorragend es gibt auch keinen einzigen Busfehler mehr.

Nochmal hurra.

Also danke an alle insbesondere an Jörg und glowbrain.

Joerg
17.11.2004, 21:48
Hallo Marc,

na dann Gratulation!

Viele Grüße
Jörg

pebisoft
25.11.2004, 17:25
hallo, mein srf08 setzt nach 6-7messungen aus. programm ist in bascom.
wenn ich den srf80 stromlos mache und wieder einschalte macht er wieder 6-7 messungen. woran liegt das.
mfg pebisoft

Joerg
25.11.2004, 17:44
können wir das nicht an einer Stelle ausdiskutieren?

z.B. hier: https://www.roboternetz.de/phpBB2/viewtopic.php?p=43356#43356

Viele Grüße
Jörg