Du zeigtst zwar nicht, wie deine LEDs angeschlossen sind, noch was du auf den Port schreibst, aber ich vermute einen klassischen "Manual Not Read Error" . Ich empfehle da Kapitel 7.3
MfG Klebwax
Hallo,
ich experimentiere gerade etwas mit einem PCF8574 an einem ATMega32 herum.
Grundsätzlich habe ich meine kleine Portexpanderschaltung auch zum laufen gebracht. Wenn ich aber nun nur einmal den Befehl zum einschalten aller ports auf den Bus sende blitzen meine LEDs nur einmal kurz auf und bleiben dann aus.
Wenn ich das ganze aber in die Endlosschleife des Hauptprogramms schreibe, dann bleiben sie zwar an, aber die LEDs erreichen bei weitem nicht ihre eigentliche Lichtstärke.Code:i2c_start(); i2c_send(i2cadresse); i2c_send(i2cdaten); i2c_stop();
Meine Frage ist nun:
Ist es mit dem PCF8574 nicht möglich den Zustand der Ausgänge bei zu behalten bis der nächste Befehl kommt, ohne ständig die Daten wiederholt zu senden?
Oder mache ich da noch etwas falsch?
Hier noch einmal der Code den ich für die Funktionen verwendet habe.
Danke schon einmal für die HilfeCode:void i2c_start(void) { TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN); // send start condition while ((TWCR & _BV(TWINT)) == 0) ; // wait for transmission } void i2c_stop(void) { TWCR = _BV(TWINT) | _BV(TWSTO) | _BV(TWEN); } void i2c_send(uint8_t DataByte) { TWDR = DataByte; TWCR = _BV(TWINT) | _BV(TWEN); // clear interrupt to start transmission while ((TWCR & _BV(TWINT)) == 0) ; // wait for transmission }
mfG Henry
Du zeigtst zwar nicht, wie deine LEDs angeschlossen sind, noch was du auf den Port schreibst, aber ich vermute einen klassischen "Manual Not Read Error" . Ich empfehle da Kapitel 7.3
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Hallo,
danke erst einmal für die schnelle Antwort.
Angeschlossen sind die LEDs über einen ULN2803 angeschlossen, der ist mit seinen Eingängen direkt an den IO-Pins des PCF8574 angeschlossen.
Auf den Port schreibe ich zum Test erst eimal immer eine 255.
Da könntest Du in dem Fall wohl Recht haben. Ich habe das mal nachgeholt. Wenn ich das richtig verstanden habe muss ich die IO-Pins des PCF8574 noch mit Pull Up Widerständen bestücken.ich vermute einen klassischen "Manual Not Read Error"
Das werde ich mal versuchen.
mfG Henry
Wie der Text sagt, sind das "quasi-bidirectional I/O". Der weak Pullup des Chips kann nicht genug Strom liefern, um den ULN durchzusteuern. Wenn du nur LEDs ansteuern willst, geht das einfacher: "Latched outputs with high current drive capability for directly driving LEDs".
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Hallo Henry
Das mit den Pullups ist richtig. Die Ausgänge des PCF8574 schalten gegen GND.
Der ULN 2803 benötigt aber eine positive Spannung am Eingang um die LED's einzuschalten.
Lösung: Mach die Pullups niederohmig = 2,2kOhm oder kleiner, damit der ULN einschalten kann oder besser schmeiss den ULN gleich raus. Dann die Pullups als Vorwiderstand der LED's verenden.
Der PCF8574 liefert genug Strom für die Leds.
Gruß NOLEM
Hallo,
Habe jetzt mal zum Test einen PullUp an P0 gelötet und das war wohl die Lösung. Hat halt jetzt nur den Nachteil das alle Ausgänge aktiv sind sobald Spannung anliegt. PullDown wäre in dem Fall schöner gewesen, klappt das auch oder mache ich dann die internen Widerstände kaputt?
Die LEDs sind nur erst einmal zum Test, da sollen später neben LEDs auch andere Lasten angesteuert werden.
mfG Henry
Lesezeichen