ram mit pcf8574 vom display hd44870 lesen

Gast #4057567
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
>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.
Gast
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
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
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)
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
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
>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
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?
Gast
>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.
Gast
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?
Gast
> dann fließt der Strom über Kollektor zur Masse und
> am Port ist die Spannung 0, ist das richtig?


am Pin meine ich



Großen Dank für die Aufklärung

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.