www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik großes Prob mit PCF8574P


Autor: Felix Fellhauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leuz!!

Ich habe volgendes problem, an dem ich jetzt schon fast 15h rumräzel
ich schilder es mal, villeicht kann mir einer von euch einen tip
geben.

Ich habe an meinem at90s8515 via i2c zwei mal nen pcf8574P mit
natürlich 2 verschiedenen adressen angeschlossen. an dem einen hängen 8
taster und an dem anderen 8 led´s. ich lese die tasterwerte von dem
einen pcf in den µC. dort liegen die daten auch alle korrekt,  hab ich
nachgemessen. und dann gebe ich die daten an den anderen pcf, den mit
den led´s, aus. aber da kommt das problem das funktioniert bei allen
tastern außer beim taster7. wenn ich den taster 7 drüche, dann werden
alle leds dunkler ?!?. aber wenn ich die led vom µc unabhängig von den
tastern am andern pcf steuern lasse funktioniert alles tadellos.

ich hoffe mir kann jemand helfen.

THX

mein CODE:

.include "8515def.inc"




.equ scl    = 6
.equ sda    = 7
.equ  i2c_port  = PORTC
.equ  i2c_pin   = PINC
.equ  i2c_ddr   = DDRC
.def temp = r16

        ; Stackpointer initialisieren
        ldi temp, LOW(RAMEND)
        out SPL, temp
        ldi temp, HIGH(RAMEND)
        out SPH, temp





ldi r16, 0xff
out DDRA, r16
out DDRC, r16

ldi r16, 0x00
out PORTA, r16

ldi temp, 25
out UBRR, temp
sbi UCR,TXEN






read:

rcall i2c_start
ldi r16, 0b01001101
rcall putbyte

rcall getbyte
mov r10, r16

out PORTA, r16

rcall i2c_stop


rcall i2c_start

ldi r16, 0b01000000
rcall putbyte

mov r16, r10

rcall putbyte

rcall i2c_stop

rjmp read








serout:


; =============================
;   Warteschleifen-Generator
;     4000 Zyklen:
; -----------------------------
; warte 3999 Zyklen:
          ldi  R20, $1F
WGLOOP02:  ldi  R21, $2A
WGLOOP12:  dec  R21
          brne WGLOOP12
          dec  R20
          brne WGLOOP02
; -----------------------------
; warte 1 Zyklus:
          nop
; =============================




ret

delay:
; =============================
;   Warteschleifen-Generator
;     20000000 Zyklen:
; -----------------------------
; warte 19999992 Zyklen:
          ldi  R20, $BF
WGLOOP0:  ldi  R21, $A7
WGLOOP1:  ldi  R22, $D0
WGLOOP2:  dec  R22
          brne WGLOOP2
          dec  R21
          brne WGLOOP1
          dec  R20
          brne WGLOOP0
; -----------------------------
; warte 6 Zyklen:
          ldi  R20, $02
WGLOOP3:  dec  R20
          brne WGLOOP3
; -----------------------------
; warte 2 Zyklen:
          nop
          nop
; =============================
ret



.include "i2c_routinen.txt"

Autor: Felix Fellhauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat denn niemand ne ahnung an was des liegen könnte??

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur mal so ne Vermutung:
Die 8574 können eigentlich nur einen Low-Pegel erkennen, d.h. man muß
den 8574 mit den Tastern mit $FF vordefinieren und dann die Taster
gegen Masse schalten lassen, oder mit entsprechenden Pull-Ups
arbeiten.
Dementsprechend ist es auch im Betrieb als Ausgang: Die LEDs müssen so
angeschlossen werden, daß sie bei einem GND am 8574 leuchten.
Einen belastbaren High-Pegel liefert der 8574 nur ganz kurz nach einem
Schreibvorgang.

Gruß
Thomas

Autor: Felix Fellhauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn ich alle led´s abklemme, d.h. die ausgätge vom 8574 stehen alleine
und ich messe die spannungen, dann geht die spannung, wenn ich den
entsprechenden taster drücke auch nich auf 0v aber bei allen anderen
tastern gehz! nur nich bei dem an p7 und wie gesagt die daten liegen
alle richtig im µc -> der fehler kann nicht am einlesen entstehen!

an was kanns noch liegen?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du als Master Daten liest, mußt Du immer nach jedem Byte ein ACK
senden.

Liest Du aber das letzte Byte, dann mußt Du danach ein NACK senden,
damit der Slave weiß, daß er nun nichts mehr auf den Bus legen darf.


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.