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

Re: Wechselschalter Kategorie: Programmierung (von AndrĂ© H. - 21.04.2004 18:42)
Als Antwort auf Wechselschalter von Bernd RĂĽffer - 16.04.2004 8:05
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT_V2, OSOPT V3.0
Hallo Bernd,

Zuerst: Bitte formatiere Quellcode mit dem code-Tag, wie oberhalb des Texteingabefelds
beschrieben, und nicht mit pre-Tags. Der Code ist dann besser lesbar.
(AuĂ?erdem wird dieser dann auch nach C2-Syntax formatiert.)

> Nun die Fragen:
> Gibt es Schwierigkeiten mit den Werten in "Data"?

Nein, es sollte keine Schwierigkeiten geben.
Im Bytearrays pcf.Data[] stehen die Portzustände der PCF8574.
Dieses Arrays wird nur benutzt, wenn einzelne oder mehrere Ports
vom PCF8574 als Ausgang benutzt werden.
Im diesen Array müssen die entsprechenden Bits, welche zu den Ports gehören
auf high stehen, die als Eingang genutzt werden.

> Ist dieser Weg ĂĽberhaupt der richtige?

Der Code sollte funzen.
Nur was Du mit dem s = s + ChgeData[i]; bezwecken willst,
verstehe ich nicht ganz.
Jedoch solltest Du bei den PCF8574 mit einer Interruptleitung arbeiten,
um den Bus nicht unnötig zu belasten.
Du fasst einfach alle Interruptausgänge der PCF8574 zusammen, bei denen
einzelne oder alle Ports als Eingang dienen.
Diese Interruptleitung führst Du dann zu einem freiem I/O der CC2 und hängst
noch einen 10k Pull-Up-Widerstand zwischen dem I/O und der CC2.
Solange der Port einen high-Pegel hat, ist auch nichts an den Eingängen
der PCF8574 passiert. Geht die Int-Leitung an dem Port auf Low, so gab es
eine Ă?nderung an einem der PCF8574.
Und, um dies in Deine Funktion einzubinden:

function ReadAll() returns int
{byte i, n; int s;
 if ports.get(IntPort) return 0; // Wenn kein Interrupt, Funktion verlassen
 // Lesen sämtlicher Bausteine (PCFaddr) bis Interrupt beendet
 s = 0;

 for i = 0 ... 15
 {
  if PCFaddr and (1 shl i) != 0
   {
    i2c.cstart(AddrR[i]);
    n = i2c.readlast();
    i2c.stop();
 //    Berechnung von ChgeData
 //    danach speichern von ReadData
    ChgeData[i] = ReadData[i] xor n;
    s = s + ChgeData[i];
    ReadData[i] = n;
   }
  if ports.get(IntPort) break; // Wenn Interrupt beendet, Schleife verlassen
 }
 return s;            
}



MfG André H.


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

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: Wechselschalter (von Bernd Rüffer - 26.04.2004 12:05)
    Re: Wechselschalter (von André H. - 6.05.2004 8:32)