Re: I2C Befehlsfolge Kategorie: Programmierung (von André H. - 27.01.2005 12:53) | ||
Als Antwort auf I2C Befehlsfolge von Epp - 26.01.2005 13:45 | ||
| ||
Hallo Epp, > Dim I2cdaten(6) As Byte > I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein > I2cdaten(2) = 1 ' Befehlscode > I2cdaten(3) = 241 '1 Parameter > I2csend &H56, I2cdaten(1),5 'Befehl wird gesendet > > dadurch wird dann z.B. der maximal zulässige Motorstrom gesetzt. > Mein CC2 Programm sieht wie folgt aus: > > i2c.start(86); //Hex56=Dec86 > i2c.write(10); //Byte 1 Kennung > i2c.write(10); //Byte 2 Befehlscode_Motorstrom setzen > i2c.write(0); //Byte 3 Linker Motor > i2c.write(100); //Byte 4 1 Ampere > i2c.write(0); //Byte 5 Ungenutzt > i2c.stop(); Was mitr hier als erstes auffällt, ist, da� Du zwar im Kommentar schreibst, da� Du den Motorstrom setzt, jedoch ist "10" lt. Anleitung das Kommando für Motor einschalten. Aber das wichtigste ist ersteinmal rauszufinden, ob die Schaltung überhaupt reagiert. Dazu kannst Du einen Busscan machen: thread main {byte i; hwcom.init(); hwcom.setspeed(8); hwcom.clr(); hwcom.print("I2C-Scanprogramm"); hwcom.ret(); hwcom.ret(); hwcom.print("Addr.9Write9Read"); for i = 0 ... 254 step 2 { hwcom.num(i); hwcom.tab(); if i2c.cstart(i) hwcom.print("OK"); else hwcom.print("n.c."); i2c.stop(); hwcom.tab(); if i2c.cstart(i or 1) hwcom.print("OK"); else hwcom.print("n.c."); i2c.stop(); hwcom.ret(); } quit 1; } �ber Hyperterminal kannst Du Dir dann anzeigen lassen, auf welchen Adressen sich I²C-Bus-Bausteine befinden. Wird an der Adresse für dein RN-Motor nichts gefunden, so ist dieses entweder falsch angeschlossen oder funzt einfach nicht. Falsch anschlie�en kann man eigentlich I²C-Bus-Hardware nicht: SDA kommt an SDA, SCL an SCL und GND and GND (=bitte nicht vergessen) Extra Pull-Ups etc. benötigst Du kein kurzen Busleitungen nicht, da die CC2-Unit, nicht das Appl.Board, breits Pull-Ups am Bus besitzt. Ist der Busscan erfolgreich, so kannst Du auch die Funktion i2c.send() verwenden. Diese ist dann analog zu der BASCOM-Funktion. Jedoch mu�t Du bei einem Array dann Null-basierend arbeiten: byte data[6]; data[0]=10; data[1]=10; data[2]=0; data[3]=100; i2c.send(0x56, data, 5); Dies steht jetzt für das Setzen der Strombegrenzung des linken Motors auf 1A. Die Funktion gibt True zurück, wenn die �bertragung erfolgreich war, und False, wenn nicht. Mit lcdext.zahl() kannst Du Dir das z.B. auf ein externes Display ausgeben lassen. MfG André H. PS: Benutze bitte das Code-Tag, wenn Du C2-Quellcode postest. Ansonsten wird dieser u.U. nicht korrekt dargestellt und ist auch schlechter lesbar. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: Re: I2C Befehlsfolge (von Epp - 27.01.2005 16:02) Re: I2C Befehlsfolge (von André H. - 30.01.2005 12:32) |