AVR i.c.m. pcf8574 kan wel lezen maar niet schrijven

goedenavond,

atmega8 geprogd met bascom via i2c verbonden met pcf8574p.

ik kan wel drukknoppen inlezen in mijn avr, maar een led aansturen wil niet lukken.

dit werkt wel


Ddrb = &B1111_1111

Ddrc = &B0000_0000
Portc = &B1111_1111

Ddrd = &B0000_0011
Portd = &B1111_1100


Config Sda = Portd.1                                        'data line IC3
Config Scl = Portd.0                                        'clock line IC3

Config I2cdelay = 5

Const Badreswrite = &H40                                    'for write to IC3
Const Badresread = &H41                                     'for read from IC3

Dim 6ic4data As Byte                                        'data (byte) uit pcf8574ap (IC3) RC


I2cinit

Do

'*******************************************************************************
'OK inlezen  op (let op ! 6ic4data.X)
   I2cstart
   I2cwbyte Badresread
   I2crbyte 6ic4data , Ack
   I2crbyte 6ic4data , Nack
   I2cstop
   Waitms 25

   If 6ic4data.1 = 0 Then
   Porta.3 = 1
   Else
   Porta.3 = 0
   End If

   If 6ic4data.0 = 0 Then
   Porta.4 = 1
   Else
   Porta.4 = 0
   End If


Loop

End

dit werkt niet


regfile = "m16def.dat"
$crystal = 8000000

Ddra = &B1111_1111

Ddrb = &B1111_1111

Ddrc = &B0000_0000
Portc = &B1111_1111

Ddrd = &B0000_0011
Portd = &B1111_1100


Config Sda = Portd.1                                        'data line IC3
Config Scl = Portd.0                                        'clock line IC3

Config I2cdelay = 5

Const Badreswrite = &H40                                    'for write to IC3
Const Badresread = &H41                                     'for read from IC3

Dim 6ic4data As Byte                                        'data (byte) uit pcf8574ap (IC3) RC


I2cinit

Do

   I2cstart
   I2cwbyte Badreswrite
   I2cwbyte 255
   I2cstop
   Waitms 25


Loop

End

waarschijnlijk zie ik iets heel simpels over het hoofd....maar ra ra wat ?

alvast dank voor de reacties

[Bericht gewijzigd door Henry S. op (0%)]

Led wel goed aangesloten? (8574 heeft sinking drivers, sourcing kan maar 100µA leveren!)

[Bericht gewijzigd door Arco op (26%)]

led moet tussen voeding in i/o poot staan ven de pcf8574 ...
het feit dat je 255 schrijft 'dofft' dus alle leds ... en duid erop dat je de leds verkeerd hebt staan.

als je 00 zou schrijven zet je alle leds aan ...

badankt voor de reacties,

ik had inderdaad de LED verkeerd aangesloten, ik ging er van uit dat er 5V op de pinnen zou komen te staan.

maar nu doet er zich iets anders vreemds voor :
ik heb 2x een pcf8574 op een printje staan 1x pcf8574p & 1x de 8574ap (ja ik weet dat die andere adressen hebben voor read/write)
stuur ik na allebei de waarde 0 dan gaan alle pinnen naar GND (controleer ik met een losse LED + 220 ohm weerstand) dus alle pinnen geven een brandende LED.
maar stuur ik 255 dan:
bij de pcf8574P gaat de LED alleen uit op: p0, p1, p2, p3
bij de pcf8574AP gaat de LED alleen uit op: p1, p2, p3
en op de andere pinnen brand de LED nog steeds !

weet iemand hier een verklaring voor ?

Je wacht zo te zien niet op een acknowledge van de slave?

bedenk nu dat op beide pcf8574's op p0 t/m p3 10k pul up weerstanden zitten. moet nog even kijken, word waarschijnlijk morgen moet zometeen weg

edit: volgens mij is het zo dat er een pul-up weerstand nodig is om de LED te doven.
dat de LED bij de AP versie op p0 niet uit ging was een stomiteit van mezelf (zat verder op in de schakeling nog een schakelaar die verkeerd stond)

[Bericht gewijzigd door trix op (45%)]