ram mit pcf8574 vom display hd44870 lesen

Gast #4057567
Lesenswert?

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
  void wait_for_bf()
2
  {
3

4
    send_instruction(RW_H, 0); // RW_H HIGH mit enable und DB4-DB7 = 0
5
    uint8_t input = get_portexpander_input(PCF8574_ADDRESS) & 0b00001000; // busy flag checken, db7 ist auf p3
6
    
7
    
8
    while( ! (input) == BF ) // BF = 0b00001000
9
        {
10
          
11
          send_instruction(RW_H, 0);
12
          input = get_portexpander_input(PCF8574_ADDRESS) & 0b00001000;
13
          
14
            
15
        }
16
}


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
void wait_for_bf()
2
  {
3

4
    enable_high(RW_H, 0); // RW_H HIGH mit enable high und DB4-DB7 = 0
5
    uint8_t input = 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
14
    
15
                 enable_low(RW_H, 0); // RW_H HIGH mit enable low
16
          
17
            
18
        }
19
}


danke für antworten, meine homies
Gast #4098004
Lesenswert?

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
Gast #4099090
Lesenswert?

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 deinem  PCF8574 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.
Gast #4099151
Lesenswert?

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?
(Firma: Vescomp) #4099192
Lesenswert?

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.
Gast #4099215
Lesenswert?

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?
Gast #4099228
Lesenswert?

>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.
Gast #4099258
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren