PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RP6 M32 und noch ein PCF8574P?



AsuroPhilip
13.03.2011, 16:17
Hallo

habe mir bei Reichelt einen PCF8574P gekauft um mehr freie ports zu haben!
Okay, hab noch ein paar Fragen:

1. Kann man noch einen PCF8574P zusätzlich zur der M32?
2. Wie schließe ich den an?
3. Wie viel Ports habe ich dann mehr?
4. Ich stelle ich dann die Ports auf High bzw. Low?
5. Ist die max. mA stärke auch 20mA?
6. Sind auch ADC´s dabei?

Da ich so gut wie alle IO´s schon in gebrauch habe, wäre das sehr gut, weil ich noch was vorhabe.

mfG
Philip

RolfD
13.03.2011, 16:26
1. ja
2. siehe Datenblatt zum IC, Referenzschaltungen
3. siehe Datenblatt zum IC, 8
4. siehe Datenblatt zum IC, Referenzprogramme
5. siehe Datenblatt zum IC, Beschreibung
6. nein*

Du kannst 8 PCF8574P und 8 PCF8574A ins System hängen.............. und hast dann 128 I/O Ports. Das IC wird über den I2C Bus angesteuert. Über SoftwareI2C und SPI kannst du noch mehr anschließen wenn es mit den 128 Leitungen etwas knapp werden sollte *rolleyes. Dafür gibts aber auch extra ICs aus der PCF Reihe.

siehe Datenblatt zum IC http://www.nxp.com/documents/data_sheet/PCF8574.pdf

Und der passende ADC/DAC
http://www.nxp.com/documents/data_sheet/PCF8591.pdf

LG Rolf

AsuroPhilip
13.03.2011, 16:40
Hi schon mal danke für die schnelle antwort!

Könntes du Nr. 2 und 4 noch mal für TOTALE Anfänger erklären?

mfG
Philip

RolfD
13.03.2011, 16:54
Hi,
Zu 2. dazu gibts massenhaft Docu hier, vom Prinzip her an Versorgung VDD und GND sowie dem I2C anschließen, also SDA und SCL Bus je an den gleichen Pin am Bot, Adressen einstellen, das wars. Beim P-Typ mit Ax auf GND ist die Adresse 0x40.
Zu 4. Programme zum ansteuern eines PCF findest Du wenn du z.B. hier im Forum suchst. Insbesondere sind diverse LCDs darüber angesteuert.
Ich steuere meins z.B. so an:
I2CTWI_transmit2Bytes(pcf8574_address_LCD, (lcdd|(1<<E_bit)),lcdd); //Daten anlegen und übernehmen
//I2CTWI_transmitByte(pcf8574_address_LCD, (lcdd|(1<<E_bit))); //Daten anlegen
//I2CTWI_transmitByte(pcf8574_address_LCD, (lcdd)); //Daten übernehmen
Oben der Befehl um mit 2 Byte Signale für das LCD zu erzeugen, unten auskommentiert das gleiche aufgeteilt in 2 Befehlen.

Das wars schon.
LG Rolf

AsuroPhilip
13.03.2011, 21:32
Hallo habe alles richtig angeschloßen und getestet (mit der base und das beispiel programm, musste nur adresse auf 40stellen!) aber wie mache ich das mit der m32 und wie mache ich nur einen port p0 oder p1 auf high bzw. Low?

mfG
Philip

RolfD
13.03.2011, 21:50
Mit den "alten" Treibern gehst Du so vor:
Lösche in der Base das Programm und compilier es für die M32 (includes ändern). Du brauchst an der Hardware nichts zu ändern. Der PCF lässt sich auch von dort steuern da er am Bus hängt an dem auch die base sitzt. (I2C)

Problem: Du wirst den PCF nicht von der Base UND vom M32 aus steuern können.. oder wenn, dann nicht stabil .. weil das 2 Mastercontroller auf dem Bus bedeuten würde. (Daher auch das Programm auf der Base löschen und mit einem Dummy ohne I2C Aktivität ersetzen, die Base merkt wenn kein Programm geladen ist) Das leisten die "alten" Treiber nicht. Alternative 1: Du machst auf der Base ein Slave und auf dem M32 den Master bzw. vice versa. Alternative 2: Du wartest bis ich die I2C Treiber umgebaut und fertig habe.
LG Rolf

AsuroPhilip
13.03.2011, 21:54
Die base ist jetzt wieder als slave und die M32 als Master.
Wie mache ich z.B. das eine Led an p0 blinkt?

Nehme Nummer 2! Wie lang wird es ca. Dauer?


mfG
Philip

RolfD
13.03.2011, 22:28
Genau so wie vorher auf der base.. bzw. ich es gesagt habe


Mit den "alten" Treibern gehst Du so vor:
Lösche in der Base das Programm und compilier es für die M32 (includes ändern). Du brauchst an der Hardware nichts zu ändern. Der PCF lässt sich auch von dort steuern da er am Bus hängt an dem auch die base sitzt. (I2C)


LG Rolf

AsuroPhilip
13.03.2011, 23:01
Also soll ich ein leeres Programm auf die base laden?
Dann kann ich mit der M32 gar nicht mehr fahren.
Wie lautet der befehl um ein Port (vom PCF) auf high zu setzen, hab ich im Datenblatt nicht gefunden.

mfG
Philip

RolfD
13.03.2011, 23:18
Richtig... Les noch mal genau ab Post 4... gründlich... !

Du sollst ein Programm auf die _Base_ laden was NICHT als Master auf den I2C läuft... also z.B. das I2C-Slave Programm oder irgend eine Demo _OHNE_ das I2C Aktivität. Zum testen und lernen ist das zunächst ok.
Da der M32 nun als Master den PCF ansteuern soll... wie, hab ich oben beschrieben ... brauchst Du nur in deinem Testprogramm mit den oben beschriebenen Funktionen den PCF ansteuern (so wie Du es glaube ich schon von der Base aus gemacht hast).
Damit müsste die M32 dann den PCF steuern wie vorher die Base... die Base stellt sich dann bezüglich I2C "doof".

So.. und wenn alles zusammen laufen soll, gilt meine Ansage aus Post 6, Abschnitt Problem:

Und noch mal grundsätzlich: Da der PCF ein I2C Baustein ist, benutzt du auch I2C Befehle um ihn anzusprechen. Diese stehen in der TWI Masterlib. Es gibt in diesem Forum auch eine sehr schöne Forensuche... und erstklassige Artikel in RN-Wissen. Wenn Dir Wissen fehlt, musst Du es Dir eben erst aneignen. Es reicht nicht wenn ich dir das hier vorsinge denn Du bist nicht in der Lage Fehler zu suchen. Und ich kann nun mal nicht hell sehen.

Und wenn Du dich doch schlau machen willst, empfehle ich dir auch gleich:
https://www.roboternetz.de/community/showthread.php?51816-Dicker-Fehler-in-der-RP6I2CmasterTWI.h-der-RP6Lib-Bugfix
sowie alle I2C Artikel aus RN-Wissen. Für ein einfachen PCF brauchst du den geänderten Treiber (der z.Z. eh noch nicht 100%ig geht) jedoch nicht. Zum lernen reicht erst mal die vorhandene RP6Lib.

LG Rolf

AsuroPhilip
13.03.2011, 23:21
Werde ich morgen mal versuchen....

mfG
Philip

AsuroPhilip
14.03.2011, 15:48
Hallo

Werde aus der Lib nicht schlau?!?
Wie mache ich P0 auf High???

mfG
Phililp

RolfD
14.03.2011, 16:31
7.3 Quasi-bidirectional I/Os


A quasi-bidirectional I/O can be used as an input or output without the use of a control signal for data direction (see Fig.15). At power-on the I/Os are HIGH. In this mode only a current source to VDD is active. An additional strong pull-up to VDD allows fast rising edges into heavily loaded outputs. These devices turn on when an output is written HIGH, and are switched off by the negative edge of SCL. The I/Os should be HIGH before being used as inputs.Was gibts den daran bitte nicht zu verstehen? Ich sage nicht umsonst, du sollst ins Datenblatt gucken.
Und das nach dem, was ich sonst dazu geschrieben habe? Du hast den Chip doch schon von der Basis aus mit den genannten Befehlen angesteuert?


Hallo habe alles richtig angeschloßen und getestet (mit der base und das beispiel programm, musste nur adresse auf 40stellen!) Willst Du mich verschaukeln?

Ne Phililp... tut mir leid. Ich klinke mich hier aus. Ich kann Dir beim Verstehen helfen aber nicht das Denken abnehmen. Im Thread ist von mir genau beschrieben was zu tun ist, so lange du das nicht nachvollziehst ist jedes weitere Wort überflüssig.
LG Rolf

AsuroPhilip
27.06.2011, 22:45
Sorry, das ich den "etwas älteren" Thread ausgrabe ;)


Das mit den ansteuern kann ich jetzt und jetzt wollte ich wissen ob ich noch einen zweiten PCF8574P an den Rp6 (sda, sdc) anließen kann, bei dem ersten habe ich A1-3 auf gnd gelegt, dann müsste ich ja bei dem 2ten alle auf VDD legen um die adresse zuändern, gell? Und den Steuer ich dann genau so an?


Vielen Dank
Philip

RolfD
27.06.2011, 23:19
Ja richtig... ansonsten kannst du dir natürlich auch andere Adressen suchen.