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

Re: Abfrage der Eingänge am PCF 8575 Kategorie: Programmierung (von André H. - 10.04.2004 15:24)
Als Antwort auf Re: Abfrage der Eingänge am PCF 8575 von Heribert.Sch - 9.04.2004 20:54
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT_V2, OSOPT V3.0
Hallo Heribert,

Du machst leider einen grundlegenden Fehler bei der I²C-Bus-Kommunikation.

i2c.readlast() darf man nur einsetzen, wenn danach die Kommunikation mit
i2c.stop() abschnlieÃ?en will. Darum das last in readlast(). :-)

Frag den Baustein einmal folgendermaÃ?en ab, dann wird es funzen:

function getw(byte addr) returns int
// Abfrage des Wordports des PCF8575
{int data;
 i2c.cstart(AddrR[addr]);
 data=i2c.read() or (i2c.readlast() shl 8);
 i2c.stop();
 return data;
}


Zur Einzelportabfrage kann man dann so schreiben:
function getw(byte addr, byte port) returns int
// Abfrage des Wordports des PCF8575
{int data;
 i2c.cstart(AddrR[addr]);
 if port>=8
    data=i2c.read() or (i2c.readlast() shl 8);
   else
    data=i2c.readlast();
 i2c.stop();
 return (data and (1 shl port))!=0;
}



MfG André H.


> Hallo,
>
> nun ja irgendwie klapt es immer noch nicht hier mein Beispiel :
>
> function get(byte addr,byte port) returns int
> {byte state,state2;
>   i2c.cstart(AddrR[addr]);
>   state=i2c.readlast();
>   if addr==0 state2=i2c.readlast();
>   i2c.stop();
>   if port <=7 return (state and (1 shl port))!=0;
>    else  return (state2 and (1 shl (port-8)))!=0;
>  }
>
> thread lcd
>
> {
>   loop {
>  
>    if get (0,15)!=0 pcflcd.setLight (1);
>  
>   }}
>
> was mach ich falsch ??
>
> Mfg
>
> Heribert


Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten: