Archiv verlassen und diese Seite im Standarddesign anzeigen : Software I2C - PCF8591 ansteuern
Hallo!
Ich benutze im Moment den Mega8515. Ich bräuchte allerdings das I2C Interface. Ich habe allerdings keine Ahnung wie ich das emulieren kann. Im Netz habe ich auch nicht viel gefunden.
Kann mir da jemand helfen?
Der BasCom sollte doch auch für diesen Chip seine I2C-Emulation anbieten ?
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:
$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
Ich bekomme aber nur sinnlose Ergebnise daraus.
Irgendwas ist mit dem Code nicht in Ordnung. :-s
Übliche Frage: I2C -Bus hat seine Pullup's ?
Pullups sind da. Habs einmal mit 1,8K und einmal mit 10K ausprobiert.
Bin inswischen auch schon ein bißchen weiter:
$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
Funktioniert aber noch nicht.
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/Roboterelektronik/i%B2c/PCF8591/PCF8591.htm
Also ich habe jetzt diesen Code ausprobiert:
$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
Ich bin also langsamer und bekomme im Terminal "ACK from Device".
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
Torsten_G
18.06.2005, 00:51
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... \:D/
@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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.