Re: I2C Befehlsfolge Kategorie: Programmierung (von Epp - 27.01.2005 16:02) | ||
Als Antwort auf Re: I2C Befehlsfolge von André H. - 27.01.2005 12:53 | ||
| ||
Hallo André, ich habe dein Programm durchlaufen lassen und es hat folgende Daten geliefert: ... 82 n.c. n.c. 84 n.c. n.c. 86 OK OK 88 OK OK 90 OK n.c. 92 n.c. n.c. 94 n.c. n.c. ... das wundert mich jetzt schon, da anscheinend 2,5 I2C Bausteine gefunden wurden. Wenn ich den Test aber ab 88 laufen lasse sieht das wieder anders aus...irgendwas stimmt da nicht! I2C-Scanprogramm Addr. Write Read88 n.c. .c.n90 n.c. n.c. 92 n.c. n.c. 94 n.c. n.c. 96 n.c. n.c. 98 n.c. n.c. ... Das Sonderzeichen am Anfang und die verrutschte Zeile sind Originalausgabe des Terminalprogramms. > 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. Du hast recht, das Beispiel ist nicht stringent. Sollte auch nur die Struktur verdeutlichen. > 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. Habe ich auch ausprobiert und habe als Rückgabewert 255 erhalten, was wahrscheinlich als "True= Befehl erfolgreich gesendet und erhalten" zu werten ist? Vielen Dank, auch wenn der Motor immer noch nicht läuft bin ich ein gutes Stück schlauer geworden! Epp | ||
Antwort schreiben Antworten: Re: I2C Befehlsfolge (von André H. - 30.01.2005 12:32) |