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

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
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0
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)