Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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
Ich nutze:
C164CI-ControllerBoard, CC2-StarterBoard, OSOPT V3.0
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)