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 | ||
| ||
> > > > > > > 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: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum