-
@SlyD
Ja, der Slave Code ist nur um ein paar Zeilen erweitert worden und evtl. waren da noch die Reste vom Test Code (SRF im Slave auslesen - das habe ich ja nun verworfen).
Danke - die "Request ID 0" Doppeltvergabe habe ich übersehen. Das werde ich nochmal testen und bescheid geben ob es daran lag. Die if-Bedingung ist mir leider nicht so gut gelungen (garnicht), da ich ein wenig von den Herstellangaben irritiert war. Ich habe die nächsten Tage noch mal vor, eine abgespeckte Version vom I2C Slave Read (nur der TSL2561) zu schreiben, in der Hoffnung ein paar Daten zu erhalten.
Das macht mir jetzt wieder Hoffnung.
@RolfD
Ich habe testweise schon mal probiert die Libs von Arduino zu verwenden. Da muss man jede Menge Header Dateien mit einbinden, um einen Haufen Fehlermeldungen zu verarbeiten. Das Beste in diesem Fall wäre, alle Libs von Arduino in das entsprechende Verzeichnis zu kopieren. Da gibt es auch ein paar doppelte Definierungen eines Typs und ein Haufen anderer Fehlermeldungen. Das ist aber ein lohnendes Ziel, die Libs von Arduino zu importieren. Das werde ich mal am Wochenende austesten.
Vorzugsweise werde ich den TSL in das schon vorhandene Gerüst im RP6 ein zu binden versuchen. Danach geht es Schritt für Schritt weiter.
Ich danke euch beiden.
Gruß
Mac80
-
@SlyD
Hallo, du hattest recht. Als ich die ID angepasst hatte, funktionierte der Ablauf absturzfrei. Die SRF Anweisung habe ich dann noch in die if Bedingung gesetzt und siehe da: Es funktionierte, wie es wohl sollte.
Ich habe weiterhin noch die requestedDataReady Funktion verwendet. Hier noch ein kurzer Auszug von der Terminalausgabe:
Read Sensor Values:
PL:000 | PR:000 | VL:000 | VR:000 | DL:000 | DR:000
DSTL:00001 | DSTR:00001
LSL:0971 | LSR:0963 | MCL:0000 | MCR:0000 | BAT:0748 | AD0:0956 | AD1:0949
| SRF_M: 146 cm |
SRF_L: 34 cm
Read Sensor Values:
PL:000 | PR:000 | VL:000 | VR:000 | DL:000 | DR:000
DSTL:00001 | DSTR:00001
LSL:0967 | LSR:0960 | MCL:0000 | MCR:0000 | BAT:0748 | AD0:0953 | AD1:0946
|tSRF_R: 53 cm | | SRF_M: 146 cm |
Read Sensor Values:
PL:000 | PR:000 | VL:000 | VR:000 | DL:000 | DR:000
DSTL:00001 | DSTR:00001
LSL:0967 | LSR:0960 | MCL:0000 | MCR:0000 | BAT:0748 | AD0:0953 | AD1:0946
SRF_L: 28 cm |tSRF_R: 53 cm |
Read Sensor Values:
PL:000 | PR:000 | VL:000 | VR:000 | DL:000 | DR:000
DSTL:00001 | DSTR:00001
LSL:0980 | LSR:0968 | MCL:0000 | MCR:0000 | BAT:0748 | AD0:0960 | AD1:0953
| SRF_M: 146 cm |
SRF_L: 33 cm
Read Sensor Values:
PL:000 | PR:000 | VL:000 | VR:000 | DL:000 | DR:000
DSTL:00001 | DSTR:00001
LSL:0893 | LSR:0894 | MCL:0000 | MCR:0000 | BAT:0748 | AD0:0888 | AD1:0882
|tSRF_R: 53 cm | | SRF_M: 14 cm |
[RP6BOOT]
[READY]
Wie man sieht, werden die Messergebnisse nur alle 2 Aufrufe von "Read Sensor values" mitgeliefert. Da könnte man noch eine Pause integrieren, ist aber nicht so schlimm. Aber was hier definitiv fehlt sind die ACS Ausgaben, welche ich eigentlich auch bekommen sollte.
Der Slave Code ist diesmal der original Code ohne Erweiterungen und der Master Code nur etwas erweitert/ korrigiert.
Das sollte ich aber hoffentlich dieses Wochenende geklärt haben.
Gruß
Mac80
-
Hallo zusammen,
Ich schliesse mich nun mal diesem Thema an, da es auch um I2C Master-Slave Einstellungen geht.
Dazu mal die Hardware:
1 RP6 Base, 1 RP6 M32, 1 PR6 M256, 1 Atmega8, 1 Attiny44
Idee:
Am Attiny44 sind 2 Servos und ein Sharp angeschlossen. Diese dienen als 3D- Distanz-Scanner. Siehe hier
Der Atmega8 steuert einen Schrittmotor, Display eine serielle Schnittstelle. Zudem kann er Helligkeit und Temperatur messen.
Die M32 steuert nebst Beeper einige Servos an und liest ein ADC-Tastenfeld aus.
Die M256 sollte das Gehirn (Master) bilden und alle infos sammeln und übertragen / auf die SD-Karte speichern.
RP6 Base ist das Fahrgestell von alldem.
Als Bus möchte ich den I2C verwenden.
Fragen:
Gibt es zur M32 eine bestehende I2C Slave Bibliothek?
Würde es Probleme verursachen, die M32 und M256 mit den vorhandenen LIB's als Master zu betreiben?
Muss ich noch irgendwo Pull-Up's anbringen?
Für eure Antworten dankt euch
Filou :-)
-
Hallo Filou,
zu deinen Fragen...
Es gibt im Projekt RP6 Remotrol 1.3 unter RP6 Remotrol 1.3\Firmware\M128 - Master\ ein M32 Slave.
Ja es würde Probleme machen 2 Master auf dem i2c gleichzeitig laufen zu lassen da hier für eine Vorrangsteuerung bzw. Busarbitierung nötig ist, die in der RP6Lib so nicht implementiert ist. Je einen der beiden wirst du aber als Master zum Laufen bekommen.
Nein du brauchst keine Pullups... die Prozessoren bringen schon Pullups mit und auf dem Baseboard sind auch welche. Siehe auch i2c Spezifikation bei NPX oder für TWI bei Amtel.
LG Rolf