Das sind die Nummern der ADC-Kanäle (CHannel). Die müssen so bleiben.... verunsichert bin ich durch diese defines, was ist das?
Das sind die Nummern der ADC-Kanäle (CHannel). Die müssen so bleiben.... verunsichert bin ich durch diese defines, was ist das?
Gruß
Dirk
hallo,
wieder einmal eine anfängerfrage...
folgende funktion funktioniert, beim empfang eines signals der IR-bake wird 000 angezeigt, wenn kein signal 004:
diese aber nicht. Da kommt immer nur 000, egal ob IR-bake sendet oder nicht:Code:void read_Register_30(void) { I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 0); // Start with register 0... I2CTWI_readBytes(I2C_RP6_BASE_ADR,RP6data, 31); // and read all 30 registers uint8_t i = 0; for(i = 0; i < 31; i++) { // mSleep(8); if (i == 30) IR_wert[0] = RP6data[30]; } }
ich verstehe einfach nicht warum, hab doch nur die schleife rausgenommen?Code:void read_Register_30(void) { I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 30); // Start with register 30... I2CTWI_readBytes(I2C_RP6_BASE_ADR,RP6data, 1); // and read one register IR_wert[0] = RP6data[30]; }
gruß inka
Nur die Schleife rausgenommen? Ich vermute mal (Glaskugel) das ist ein Stück Code aus dem i2c-Slave der Base.
Du nimmst aber nicht nur die Schleife raus .. du nimmst dem System auch die benötigte Zeit um die Daten aufzuarbeiten.
Die I2C Datenverarbeitung ist zeitkritisch. Wie so vieles andere an den RP6 Libs auch.
Mach doch einfach mal:
und probiere mit Werten für x von 0 bis ... keine Ahnung.. 100 .. was die Funktion macht wenn du x bei sendender Bake erhöhst.Code:void read_Register_30(void) { I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 30); // Start with register 30... I2CTWI_readBytes(I2C_RP6_BASE_ADR,RP6data, 1); // and read one register mSleep(x); IR_wert[0] = RP6data[30]; }
Eigentlich sollte sich experimentell ein Wert ermitteln lassen, ab wieviel x die bake gefunden bzw diese 004 übertragen wird.
Es würde mich auch nicht wundern, wenn Du bald die Erkenntnis hast, das sich die Motorsteuerung und die I2C slave lib jeweils als Zeitkritische Module sich im Prinzip gegenseitig in den Füßen stehen - weshalb es nicht ganz ist, das Base Slave Programm softwaremässig noch zu erweitern.
Gruß
Geändert von RolfD (12.03.2014 um 19:10 Uhr)
Sind Sie auch ambivalent?
Bei dem Code wird das über I2C gelesene Byte in "RP6data" gespeichert.Code:I2CTWI_readBytes(I2C_RP6_BASE_ADR,RP6data, 1); // and read one register IR_wert[0] = RP6data[30];
Du must also mit: IR_wert[0] = RP6data; ... auslesen.
Vorsicht mit den Namen von Variablen (Var) und Arrays (Var[n])!
Gruß
Dirk
@Dirk,
bei genauerem hinschauen wars dann doch recht einfach:
zum einen das "s", zum anderen das direkte auslesen in den IR-wert...Code:void read_Register_30(void) { I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 30); // Start with register 30... I2CTWI_readBytes(I2C_RP6_BASE_ADR,RP6data, 1); // and read one register IR_wert[0] = RP6data[30]; }
Code:void read_Register_30(void) { I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 30); IR_wert = I2CTWI_readByte(I2C_RP6_BASE_ADR); }
@RolfD,
der code hatte diesmal nichts mit code aus dem I2C-Slave der Base zu tun, war ein codeschnipsel aus einem der m32 beispiele...
mit dem mSleep (evtl. stopwatsches) geht es jetzt weiter zu angleichung der sende/empfangfrequenz. So weit war ich eigentlich schon mal...
danke Euch beiden...
gruß inka
hallo Rolf,
ich hätte da eine idee:
ich selbst fühle mich nicht in der lage dazu mit meinen kentnissen und fähigkeiten die IR-bake im sinne Deiner vorschläge (oder denen von SlyD) zu erweitern....
Möchte Dich aber dazu einladen, mit mir zusammen - oder auch allein, an einer verbesserung zu arbeiten (ich persönlich würde die variante der zusammenarbeit bevorzugen). Man würde dann quasi das zweite kapitel des artikels "IR-bake" schreiben. Das angebot an fertigen, gut funktionierenden IR-baken ist wirklich sehr überschaubar und ich glaube es gibt hier bedarf an beiden versionen, die eine so zu sagen für den "hausgebrauch", für die anfänger und bastler, die andere für die fortgeschrittenen....
Was hälst Du davon? Was halten die mitlesenden davon?
gruß inka
das Thema Bake ist eigentlich schon durch. Das Rad neu zu erfinden, halte ich für nicht nötig. Trotzdem ist es nicht verkehrt, eigene Erfahrungen zu machen.Was halten die mitlesenden davon?
Allerdings sollten sie dann nicht ungeprüft als neuer Standard stehen bleiben. Deswegen fand ich Rolfs Kritik angebracht, war aber abgeschreckt von der Reaktion darauf.
Mit 2 555ern kannst du eine leidlich funktionierende Bake bauen, ok, aber genaue Frequenzen ohne aufwendige Kalibrierung kriegt man damit leider nicht hin.
Die Bake selbst sollte punktförmig in alle Richtungen strahlen, Reflektoren oder Röhrchen schaden da nur. Reflexionen an Wänden sollten möglichst nicht detektiert werden, deshalb muss die Bake etwas mehr Leistung bringen als eine Fernbedienung und der Empfänger entsprechend unempfindlich gestaltet werden. Da kann man gleich eine Abschirmung für die Richtungserfassung anbringen.
Gruß, Michael
Lesezeichen