jo forum, was geht?
ich hab ne frage bzgl. dem pcf8574. ich bin mir nicht sicher, aber kann
man einzelne pins als ausgang und eingang schalten und nicht alle als
eingang oder alle als ausgang? ich würd gern mit dem portexpander auch
den ram von display lesen können, klappt jedoch nicht. gibt es eine
möglichkeit dies zu schaffen, ohne rs rw am µC zusätzlich anzubinden?
ich benutz den 4-bit modus
1
voidwait_for_bf()
2
{
3
4
send_instruction(RW_H,0);// RW_H HIGH mit enable und DB4-DB7 = 0
5
uint8_tinput=get_portexpander_input(PCF8574_ADDRESS)&0b00001000;// busy flag checken, db7 ist auf p3
wenn nur in der funktion _delay_us(300) steht, klappt das schreiben
wunderbar, sobald ich den o. g. code verwende, werden falsche buchstaben
angezeigt. ich wüsste nicht, wie ich es anders machen könnte. die input
lese funktion des portexpander funktioniert auch, hab die getestet.
ich denke auch, dass kurzzeitig das display signale ausgibt, während der
expander auf ausgang-modus abgeht.
die methode geht auch nicht, da geht der gleiche shit aufm display ab...
1
voidwait_for_bf()
2
{
3
4
enable_high(RW_H,0);// RW_H HIGH mit enable high und DB4-DB7 = 0
5
uint8_tinput=get_portexpander_input(PCF8574_ADDRESS)&0b00001000;// busy flag checken p3 ist auf db7
6
7
enable_low(RW_H,0);// RW_H HIGH mit enable low
8
9
while(!(input)==BF)// BF = 0b00001000
10
{
11
12
enable_high(RW_H,0);// RW_H HIGH mit enable high und DB4-DB7 = 0
13
input=get_portexpander_input(PCF8574_ADDRESS)&0b00001000;// busy flag checken p3 ist auf db7
>hole mir daher den MCP23008, damit gehts
Das geht auch mit dem pcf8574. Du bekommst es nur nicht
gebacken DB4..7 auf 1 zu setzen bevor du liest. Dann wirken
nur noch die Weak Pullups und das Display kommt
dann auch durch.
hab das problem erkannt. bei meinem pcf8674n ist es so, dass er, wenn
der port gesetzt wurde, diesen nicht zurücksetzt beim lesen, sondern ihn
so belässt.
das muss man beachten, dann sollte es auch gehen :D
6e 6f 5f 6c 69 66 65 schrieb:> hab das problem erkannt. bei meinem pcf8674n ist es so, dass er, wenn> der port gesetzt wurde, diesen nicht zurücksetzt beim lesen, sondern ihn> so belässt.
Warum sollte der port beim lesen zurückgesetzt werden und wieso ist
das ein Problem ?
6e 6f 5f 6c 69 66 65 schrieb:> jo forum, was geht?
Geht nun, oder geht nicht?
6e 6f 5f 6c 69 66 65 schrieb:> ... bei meinem pcf8674n ist es so, dass er, wenn der port gesetzt> wurde, diesen nicht zurücksetzt beim lesen, sondern ihn so belässt.
Das ist nicht nur bei deinemPCF8574 so.
Wenn du dir im Datenblatt unter 8.2.2 das vereinfachte Schaltbild eines
Portpins anguckst, siehst du auch, warum das Lesen überhaupt keinen
Einfluss auf die Ausgabe hat.
ja, kein plan, fand das schon komisch, weil dachte schon, dass wenn man
etwas auf eingang schaltet, dass die vorherige Spanung eben nicht mehr
da ist.
leider klappt es immer noch nicht. aber eine frage, was ich nicht
verstehe, wenn der pcf die ausgänge beim lesen auf high schaltet, dann
gibt es doch einen kurzschluss, wenn das display die ausgangsspannung
ausgibt?
toll ist es doch nicht?
6e 6f 5f 6c 69 66 65 schrieb:> leider klappt es immer noch nicht. aber eine frage, was ich nicht> verstehe, wenn der pcf die ausgänge beim lesen auf high schaltet, dann> gibt es doch einen kurzschluss, wenn das display die ausgangsspannung> ausgibt?
Die Ausgänge werden beim lesen nicht High, sondern hochohmig - aber
dazu muss man sie erst als Eingang schalten - einen Ausgang kann
man nicht lesen, wohl aber den Portzustand, d.h. den dazugehörigen
Ausgaberegister.
also, wie ich es beim PCF8574 verstanden habe, ist es so, dass man
entweder liest oder schreibt. beim schreiben werden die PCF Pins
gesetzt. Beim Lesen gibt es den aktuellen Wert vom Port zurück. Beim PCF
gibt es doch keine Register, in die man schreiben kann, oder?
holger schrieb:
> Das geht auch mit dem pcf8574. Du bekommst es nur nicht> gebacken DB4..7 auf 1 zu setzen bevor du liest. Dann wirken> nur noch die Weak Pullups und das Display kommt> dann auch durch.
Ich verstehe das mit den weak pullups nicht. Wenn ich DB4-DB7 ENABLE und
RW high setze, dann kommt ja eine Spannung vom Display erstmal aus. So
ist doch für eine gewisse Zeitdauer ein Kurzschluss vorhanden?
>Ich verstehe das mit den weak pullups nicht. Wenn ich DB4-DB7 ENABLE und>RW high setze, dann kommt ja eine Spannung vom Display erstmal aus. So>ist doch für eine gewisse Zeitdauer ein Kurzschluss vorhanden?
Der PCF8574 hat keine Push Pull Ausgänge. Es sind quasi
Open Collector mit Pullups dran. Bei Low Signal kann er
einige mA gegen Masse schalten. Bei High wirken nur noch
die Pullups und dort kommen nur ein paar uA raus.
Es wird also keinen Kurzschluss geben wenn man die Ausgänge
des PCF8574 auf High legt und gleichzeitig einen Ausgang
(hier das Display) anlegt.
>Eine Frage, was passiert, wenn der Port auf 0 V gesetzt wurde und aber>z. B. eine Spannung vom Display da ist? Wird der Strom blockiert?
Dann hast du deinen Kurzschluss. Das musst du vermeiden.
Also, ist es richtig, wenn ich z. B. einen Pin am Port vom PCF8457 HIGH
setze, dann wird ja der Transistor geschlossen, sodass der Strom
sozusagen von Vcc über den Pullup zum Gerät fließen kann. Wenn ich den
öffne den Transitor, dann fließt der Strom über Kollektor zur Masse und
am Port ist die Spannung 0, ist das richtig?