PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit dem I2C Bus und PCF8574



Onkelono
30.01.2005, 18:39
Ich versuche gerade eine PCF8574 anzusteuern. Dieser Zeigt aber keine Reaktion. Ich habe die SCL und SDA mit oder ohne pullup getestet. Beides mal das gleiche Ergebnis. Ich habe mir eine Relaisplatine selbst gebaut. Alle Port des PCF stehen auf high. Normalerweise sollte jedes 2te port mit dem Code auf low schalten. Das Err Flag wird bei keiner Adresse gesetzt.

Was habe ich da nur falsch gemacht?

Hier der Code:


$regfile = "M16DEF.DAT"
$crystal = 1000000
$baud = 2400

'RELAIS
Config I2cdelay = 100
Config Porta = Output


Config Sda = Porta.1
Config Scl = Porta.0
Porta.0 = 1
Porta.1 = 1

Dim I As Byte

Do
For I = 1 To 255
I2csend I , &HAA
Print "Adresse: " ; I ; " ERR: " ; Err
If Err = 0 Then
Print "Adresse: " ; I ; "gefunden"
Wait 5
End If
Next I
Loop




Vielen Dank für Eure Tipps
Ingo

tobimc
30.01.2005, 18:46
HI

Ich habe ja ein bischen das Gefühl, dass der Code mitunter von mir ist...
"i2cdelay = ..." Oder? :D :D

Hm. Sollte eigentlich schon funzen.
Welchen Pullupwert hast du? 4,7k auf VCC?

Wie sind AIN0 ... AIN2 am 74 geschaltet?

(EDIT: Die dumme Frage wurde gelöscht)...

Ich würde es trozdem nischt mit err machen, oder
gibt er dir da was aus?

Ganz liebe Grüße, Tobi

Onkelono
30.01.2005, 20:41
Hallo Toby,

alls pullups habe ich 4,7k genommen.
Alle adresspins auf masse.

Trotzdem keine funktion.
Hmm?

Gruß Ingo

albundy
31.01.2005, 13:34
>Was habe ich da nur falsch gemacht?

>I2csend I , &HAA

Schon mal in der Bascom Hilfe nachgesehen, wie "i2csend" benutzt wird ?
1.Parameter ist die Adresse
2.Parameter ist der Übergabewert

Und was ist &HAA ? Jedenfalls nicht die Adresse vom PCF8574.
Wenn A0-2 auf GND, ist die Adresse &H40 oder bei einem PCF8574A &H70.

Onkelono
31.01.2005, 13:59
Hallo Tobias,
nun klappt es es war die Zeile:
Config Porta = Output

Wenn ich diese Zeile rausnehme, funtioniert es.


Hallo Al (Bundy),
ich schaue immer in die Hilfe und googlele rum, bevor ich eine Frage stelle.
Also bitte erst den Code richtig anschauen und dann meckern.
Ich habe von &H00 bis &HFF iteriert, um die Adresse des PCF8574 zu finden. &HAA als Übergabewert bedeutet binär 10101010. So kann ich auf jeden Fall sehen, ob die Ports geschaltet werden.

Versuchs doch weiterhin mit Schuhen :-)

Gruß Ingo

albundy
31.01.2005, 14:26
Also bitte erst den Code richtig anschauen und dann meckern.

Das sollte kein Meckern sein. Sorry, wenn es so rübergekommen ist.
Ich habe nicht angenommen, das du die Adresse erst suchen mußt.

Versuchs doch weiterhin mit Schuhen

Ich bleib dann doch bei der Elektronik, da verdient man mehr !

PiCus
26.05.2005, 12:18
Hallo,
ich bin neu hier aber habe hier schon viel gelesen, ich habe das Programm etwas umgeshrieben und auch einen Erfolg erzielt dass ich die Adresse des 8583 anzeigen kann. Wenn ich nun aber einen 8574 anschließe reagieren zwar die LED's aber es kommt keine Adresse zurück.

Ich hab schon alles Probiert und nicht die Möglichkeit gefunden dass es geht.

Vielleicht hat von euch jemand eine Idee


$regfile "8515def.dat"
$crystal = 4000000

'$include "ac_lcd.inc"

Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcd = 20 * 4
Cls

Config I2cdelay = 10
Config Porta = Output

Config Scl = Porta.6
Config Sda = Porta.7
Porta.6 = 0
Porta.7 = 0

Dim I As Byte

Do
For I = 1 To 255
I2csend I , &H40
Locate 1 , 1 : Lcd "Adr: " ; I ; " dez " ; Hex(i) ; " hex"
Locate 2 , 1 : Lcd "Adr: " ; Bin(i)
Locate 4 , 1 : Lcd "Error: " ; Err
If Err = 0 Then Goto Ende
'End If
'Waitms 100
Next I
Loop


Ende:
Locate 4 , 1 : Lcd "Adresse: " ; Hex(i) ; " gefunden"
End

Gruß PiCus

PicNick
26.05.2005, 13:07
Ich müßt' mir den BasCom Code dazu genau anschauen, aber zum address-Suchen solltest du das zu Fuß machen, den nur der ACK/NAK bei der Adress-Ausgabe zählt, und nicht das Ack/nak beim Datenbyte
und du solltest step 2 machen, da ja die read-addressen nicht interessant sind.
also
I2CStart
I2CwByte adr ' nur gerade zahlen/adressen
if err = 0 then
addr-is-ok
else
das-war-nix