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

Re: pcf8574 Kategorie: I²C-Bus (von Ralf Metzner - 3.03.2008 11:29)
Als Antwort auf Re: pcf8574 von nitraM - 2.03.2008 12:10
Ich nutze:
C-Control II Station, OSOPT V3.0
Ich habe an der C-Control II Station diesen kleinen Porttreiber von Conrad am I2C-Bus. Danach den
Verteiler (mit kurzem Originalkabel angeschlossen) und dort angeschlossen:

- 1.DS1631 Temperatursensor,Kabel auf ca.1m verlängert
- 2.DS1631 Temperatursensor,Kabel auf ca.1m verlängert
- PCF-Tastatur mit kurzem Originalkabel
- 1.PCF8574 Porterweiterung,mit kurzem Kabel als Eingänge, um Schalterstellungen zu erfassen.
- 2.PCF8574 Porterweiterung,mit kurzem Kabel, als Ausgänge zur Steuerung eins Frequenzumformers.
     (mit Open-Collector-Erweiterung).

mit der zweiten Porterweiterung fangen die Probleme an

mit folgenden Zeilen frage ich die Tastatur ab:

   z=pcfkeyb.getbin(50);

   if (z and 4096)  ablauf.taste1=1;
   else ablauf.taste1=0;


   if (z and 1)  ablauf.taste2=1;
   else ablauf.taste2=0;

  .....

mit folgenden Zeilen frage ich die Eingänge ab:


  pcf.init();
  pcf.off(pcfport,0);
  pcf.off(pcfport,1);
  pcf.off(pcfport,2);
  pcf.off(pcfport,3);
  pcf.off(pcfport,4);
  pcf.off(pcfport,5);
  pcf.off(pcfport,6);
  pcf.off(pcfport,7);                           <---- Notwendig ???

   y=pcf.in(pcfport);
   
   ablauf.knebel1=0;
   if (y and 1)   ablauf.knebel1=-1;
   if (y and 2)   ablauf.knebel1=1;
   
   ablauf.knebel2=0;
   if (y and 4)   ablauf.knebel2=-1;
   if (y and 8)   ablauf.knebel2=1;
   
   ablauf.knebel3=0;
   if (y and 16)  ablauf.knebel3=-1;
   if (y and 32)  ablauf.knebel3=1;

   ablauf.knebel4=0;
   if (y and 64)  ablauf.knebel4=-1;
   if (y and 128) ablauf.knebel4=1;


wobei mir gerade auffällt, da� es wohl besser wäre es so zu lösen, weil sonst ablauf.knebel immer
kurz auf 0 gesetzt wird

   if (y and 64)                         ablauf.knebel4=-1;
   if (y and 128)                       ablauf.knebel4=1;
   if !(y and 64) and !(y and128) ablauf.knebel4=0;


Das dĂĽrfte aber nicht das Problem sein, denn bis hier funktioniert alles einwandfrei.

mit folgender Zeile setze ich die Ausgänge:

    pcf.out(7,ablauf.pumpe380);

Sowie die Porterweiterung für die Ausgänge angeschlossen ist treten bei den Eingängen und bei der
Tastatur Störungen auf, die Ausgänge funktionieren. Das seltsame ist, die Störungen fangen langsam
an und werden dann schlimmer. Zuerst kommen kurze Störimpulse von der Tastatur,als ob jemand kurz
eine Taste drückt. Dann reagieren die Eingänge mit etwa1-2 Sekunden Zeitverzögerung, bis sie dann
nach ein paar Minuten gar nicht mehr erkannt werden.

Ich bin mir nicht ganz im Klaren was pcf.off bzw. pcf.on bedeutet?

Der Frequenzumrichter stört unter Umständen auch, jedoch brachte ein vorrübergehendes Abklemmen
auch keine Besserung.

Wie wird ein pcf8574 richtig als Ausgang oder Eingang initialisiert?

pcf.init(0) was ich in einem anderen thread gelesen habe funtioniert bei mir nur mit pcf.init() fĂĽr alle ange-
schlossenen Portexpander. Wenn ich richtig weiss holt pcf.init() nur den Status aller Portexpander,oder?


Habe von allen Modulen die neueste Version (auĂ?er OSOPTV3.0).

So, hoffe ich hab jetzt alles gut beschrieben und nichts vergessen.

GruĂ?
Ralf





> Hallo Ralf,
> so ganz kann ich deinen AusfĂĽhrungen nicht folgen....
> Hilfreich sind genaue Fehlerbeschreibungen und die passenden Quelltexte...
>
> ...was passiert wann, was geht, was geht nicht, was hast du verändert, wie sieht deine Schaltung aus,
> wie lang sind die Datenleitungen, was fĂĽr eine SW-Version verendest du......
>
>
>
> mfG nitraM
>
> > Neue Erkenntnisse:
> > Habe die Sache wieder am Laufen, allerdings ohne den Ausgangsportexpander und nach längerem
> > Ausschalten der c-control. Habe noch andere Adressen der Bausteine versucht, aber ohne Erfolg.
> > Sowie ich den zweiten Portexpander (Ausgänge) anstecke fangen die Probleme wieder langsam an,
> > falsche Eingangssignale und dann irgendwann Fehlfunktion der Tastatur. Stecke ich den zweiten Port-
> > expander ab, sind die Probleme sofort weg, es sei denn ich lasse es zu lange laufen, dann muĂ? ich
> > die c-control wieder längere Zeit ausschalten damit es wieder funktioniert.
> >
> > > Hallo,
> > > erst mal ein groĂ?es Lob an dieses Forum und diese Seite. Ich konnte alle Informationen die ich zum
> > > programmieren brauchte hier finden. Jetzt habe ich aber ein Problem und komme nicht dahinter.
> > > Ich habe am I2C-Bus 2 Thermometer, 1 PCF-Keyboard und 2 pcf-portexpander (nicht die A-Version,
> > >  einen als Eingänge und einen als Ausgänge). Es hat zuerst alles funktioniert wie gewĂĽnscht, jedoch
> > > gab es dann immer häufiger Fehlmeldungen der Eingangskarte, die Eingänge als gesetzt übergab,
> > > obwohl sie definitiv nicht belegt waren. mit entfernen des als Ausgang verwendeten Portexpanders
> > > verschwanden die Probleme zunächst. Nach mehreren Versuchen bekomme ich jetzt die Portexpander
> > > nur noch sporadisch zum laufen, teilweise aber erst nach längerem Ausschalten der C-Control. Die
> > > PCF-Tastatur funktioniert auch nicht mehr. Das alles, obwohl ich alles in den Zustand zurĂĽckversetzt
> > > habe in dem alles funktioniert hat. Was immer geht sind die Thermometer (DS1631). Als Adressen habe
> > > ich 4 für die Tastatur, 6 für die Eingänge und 7 für die Ausgänge. Treibermodul für den I2C-Bus ist auch
> > > eingebaut. Wie werden die Portexpander richtig als Ein bzw. Ausgang initialisiert? Was genau bedeutet
> > > pcf.on() bzw.pcf.off()? Die Eingänge sind einfache Schalter und die Ausgänge sollen einen Frequenzum-
> > > richter steuern. Falls jemand eine Idee hat wo hier der Fehler liegen könnte bitte ich dringend um Hilfe.
> > >
> > > Vielen Dank.


    Antwort schreiben


Antworten: