Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: PCF8574 Ports einzeln ansteuern, Mega 128 Kategorie: I²C-Bus (von Manfred - 25.07.2010 19:48)
Als Antwort auf Re: PCF8574 Ports einzeln ansteuern, Mega 128 von Wolfgang Meinberg - 23.07.2010 17:55
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board
> > > > > > > Hallo Zusammen!
> > > > > > >
> > > > > > >
> > > > > > > ...in der Doku zum PCF8574 hab ich gelesen, daĂ? man die Ports auch einzeln ansteuern kann (Bit)
> > > > > > > so wie die Ports der Mega 128, (z.B.Port_WriteBit(15,1) ). Im Forum CC2 gibt es einen Treiber fĂĽr
> > > > > > > der Ports. Ist dies auch bei der Mega128 möglich,  wenn ja wie?
> > > > > > >
> > > > > > > Danke fĂĽr die Hilfe!
> > > > > > >
> > > > > >
> > > > > > Hi,
> > > > > >
> > > > > > ich habe die Doku kurz angeschaut und nur gesehen, das man immer ein komplettes Byte an I2C
> > > > > > schickt. Du mu�t Dir halt einfach den Zustand aller Ports merken, und dann veränderst Du halt
> > > > > > nur ein Bit für den zu ändernden Port im gesendeten Byte.
> > > > > >
> > > > > > Siehe auch: http://www.mikrocontroller.net/articles/Port-Expander_PCF8574
> > > > > >
> > > > > > Gruss Peter
> > > > >
> > > > > Hallo Peter!
> > > > >
> > > > > ...danke fĂĽr die Antwort. Ich hab auch nichts weiteres dazu gefunden, man kann bei der Mega 128
> > > > > wohl nur ein komplettes Byte senden.
> > > > > Da ich Anfänger bin, könntest Du mir kurz erklären, wie ich nur ein Bit verändere.
> > > > > Ich  lese mit I2C_Read_ACK das Byte und will z.b.das erste Bit von 0 >1 setzen...
> > > > > wie mach ich das??? Evtl. kleines Demo Programm?!
> > > > >
> > > > > Bytes an den PCF8574 zu senden und zu lesen ist kein Problem, aber dafĂĽr hab ich keine Idee...
> > > > >
> > > > > Danke erstmal...
> > > > >
> > > > >
> > > > > GruĂ? Wolfgang
> > > >
> > > > Hallo Wolfgang,
> > > >
> > > > man kann bei I2C immer nur komplette Bytes senden, und nicht einzelne Bits. Schau Dir am besten
> > > > das I2C Protokoll genauer an. Links:
> > > >
> > > > http://de.wikipedia.org/wiki/I%C2%B2C
> > > > http://www.mikrocontroller.net/articles/I2C
> > > >
> > > > Du schickst an den PCF8574 immer ein Byte mit allen Werten fĂĽr alle 8 Portbits. Wenn Du nur einen
> > > > Portausgang verändern möchtest, so änderst Du auch nur das Bit an der jeweiligen Stelle in dem
> > > > Byte was Du schickst.
> > > >
> > > > I2C_Init(I2C_100kHz);  // I2C Bit Rate: 100 kHz - nur einmal im Programm aufrufen
> > > >
> > > > // Wert an PCF8574 schicken
> > > > I2C_Start();
> > > > I2C_Write(0x40);       // DEVICE ADDRESS : 0x40 + untere Addressbits
> > > > I2C_Write(portvalue);  // Bit Werte von allen 8 portbits
> > > > I2C_Stop();
> > > >
> > > > Du muĂ?t auf jeden Fall das I2C Protokoll verstanden haben, sonst kommst Du auf Dauer nicht
> > > > weiter. Es gibt in den Demoprogrammen auch ein Projekt, welches auf ein I2C EEPROM zugreift.
> > > > Zusammen mit dem 24C64 Datenblatt hilft das zusätzlich den Zugriff zu verstehen.
> > > >
> > > > Gruss Peter
> > > >
> > > >
> > > > P.S. Lautet Deine email Adresse nun "a-puetz@a.." oder "j-meinberg@a.."?  :-)
> > >
> > >
> > > Danke für die schnelle Antwort....ich glaube ich hab mein Problem schlecht, mi�verständlich
> > > beschrieben.....das Problem ist folgendes:
> > > Verschiedene Byte auf den PCF8574 schreiben uind lesen ist kein Problem.
> > >
> > > Ich möchte eigentlich folgendes machen:
> > >
> > > Ich schreibe ein Byte, sagen wir 00000001 zum PCF8547. Wenn dann z.B.  "Taster1" = 0
> > > dann soll das  vierte Bit zu "1" wechseln, die "1" des ersten Bit´s soll unverändert bleiben.
> > > ( 00001001)
> > >
> > > Mein Gedanke ist zuerst das Byte vom PCF8574 zu lesen, im Byte
> > > das 4.Bit auf "1" setzen und dann wieder in den PCF zurĂĽckzuschreiben...theoretisch...
> > >
> > > Mein Problem ist eigentlich "nur" wie verändere ich im Programm das gelesene Byte?
> > >
> > > Gelesen 00000001...."wenn  Taster1 betätigt"  dann soll vom
> > > gelesenen Byte das 4.Bit  "1" werden> 00001001  
> > >
> > > Danke nochmal! Werde auch mal in Deinen Links mich schlau machen!
> > >
> > > GruĂ? Wolfgang
> >
> > Hallo Wolfgang,
> >
> > laut Doku ist das lesen vom PCF8547 nur für Eingänge gedacht, es wird wohl nicht
> > funktionieren die Konfiguration der Ausgänge rücklesen zu wollen. Du mu�t Dir halt in
> > einer byte Variable den Zustand merken. So ändert man einzelne Bits in Bytes:
> >
> > var= var|0x08; // 0x08 = 4. Bit wird gesetzt oder
> > var= var|(1<<3); // 4. Bit wird gesetzt
> >
> > var= var&(~0x08); // 0x08 = 4. Bit wird zurĂĽckgesetzt - ausmaskieren mit dem Inversen
> >
> > Ausmaskieren heiĂ?t hier ein Undieren mit allen Bits = 1, auĂ?er dem Bit was ich zurĂĽcksetzen
> > will. Schau Dir mal die Boolesche Algebra an und wie man in Programmiersprachen damit umgeht.
> >
> > Gruss Peter
>
> Hallo Peter!
>
> ...danke fĂĽr Deine Hilfe!
>
> Werde mich jetzt intensiv damit auseinandersetzen und meine Erfolge oder? MiĂ?erfolge mitteilen!
>
> GruĂ? Wolfgang
>
> ...hier noch meine E-Mail-Adresse: j-meinberg@alice.de

Hallo Wolfgang,
ich kann Dir einen Auszug aus einem Programm mit PCF 8574 schicken,
wenn Du noch interessiert bist.
Dazu meine mail-adresse: manfred.d.schulz@gmx.net
gruss
manfred


    Antwort schreiben


Antworten: