Der Bascom sollte doch auch für diesen Chip seine I2C-Emulation anbieten ?
Der Bascom sollte doch auch für diesen Chip seine I2C-Emulation anbieten ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Ich will eigentlich nur einen PCF8591 ansteuern.
Eine analog Spannung, die an dem Pin AIN0 des 8591 anliegt soll ausgelesen werden.
Wie gesagt wird ein Mega8515 benutzt als MC benutzt.
Ich habe bis jetzt folgenden Code:
Ich bekomme aber nur sinnlose Ergebnise daraus.Code:$regfile = "m8515.dat" 'ATmega8515-Deklarationen $crystal = 4000000 'Quarz: 4 MHz $baud = 9600 Dim Wert As Byte Config Scl = Portb.2 Config Sda = Portb.3 I2cinit I2cstart I2cwbyte &B10010000 I2cwbyte &B00000000 I2cstop I2cstart I2cwbyte &B10010001 Do I2crbyte Wert , Ack Print Wert Loop I2cstop End 'end program
Irgendwas ist mit dem Code nicht in Ordnung.![]()
Übliche Frage: I2C -Bus hat seine Pullup's ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Pullups sind da. Habs einmal mit 1,8K und einmal mit 10K ausprobiert.
Bin inswischen auch schon ein bißchen weiter:
Funktioniert aber noch nicht.Code:$regfile = "m8515.dat" 'ATmega8515-Deklarationen $crystal = 4000000 'Quarz: 4 MHz $baud = 9600 Dim Wert As Byte Dim I As Byte Config Scl = Portb.2 Config Sda = Portb.3 I2cinit I2cstart I2cwbyte &B10010000 I2cwbyte &B00000000 I2cstop Do I2cstart I2cwbyte &B10010001 I2crbyte Wert , Nack I2cstop Print Wert; Loop End 'end program
Tja, geh mal mit der Speed runter
config i2cdelay=20
Außerdem:
mach einen "ACK"-Kontrolle
I2cstart
i2cwbyte &B10010000
if Err = 1 then
print "No Ack from Device"
i2cStop
else
i2cwbyte &B00000000
i2cstop
end if
Ob der PCF überhaupt antwortet.
Übrigens: Welche werte bekommst du denn ?
.. hast Du das Steuerbyte richtig gesetzt, bzw. der Beschaltung angepaßt ?
schau mal hier:
http://www.the-starbearer.de/Roboter...91/PCF8591.htm
Also ich habe jetzt diesen Code ausprobiert:
Ich bin also langsamer und bekomme im Terminal "ACK from Device".Code:$regfile = "m8515.dat" 'ATmega8515-Deklarationen $crystal = 4000000 'Quarz: 4 MHz $baud = 9600 Dim Wert As Byte Dim I As Byte Config I2cdelay = 20 Config Scl = Portb.2 Config Sda = Portb.3 I2cinit 'I2cstart 'I2cwbyte &B10010000 'I2cwbyte &B00000000 'I2cstop I2cstart i2cwbyte &B10010000 if Err = 1 then Print "No Ack from Device" I2cstop Else I2cwbyte &B00000000 I2cstop Print "ACK from Device" end if 'Do I2cstart I2cwbyte &B10010001 I2crbyte Wert , Nack I2cstop Print Wert; 'Loop Do Loop End
Das ist also in Ordnung.
Ich lese jetzt erst nochmal Gerhards link durch.
Ich bekomme übrigens immer so Werte um die 50...
Es funktioniert jetzt.
Man muß
"Printbin wert;"
und nicht
"Print wert;"
nehmen
Hallo Leute,
dank Eurer Tipps hier im Forum ist es mir jetzt auch erstmalig gelungen, den I2C-Bus zum Laufen zu bringen!
Mein Mega8 versteht sich jetzt jedenfalls bestens mit seinem neuen Kumpel, einem PCF8574 - ist schon irgendwie ein cooles Gefühl, wenn zum ersten Mal die Test-LED´s aufleuchten... \/
@roboter:
Dein Bascom-Code war eine große Hilfe, er hat mir die noch fehlenden Teile des Puzzles geliefert! Irgendwie tappte ich da nämlich ziemlich im Dunkeln.
Euch allen vielen Dank, dieses Forum ist Spitze!
Viele Grüße
Torsten
Lesezeichen