PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Software I2C - PCF8591 ansteuern



roboter
12.06.2005, 13:17
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?

PicNick
12.06.2005, 14:07
Der BasCom sollte doch auch für diesen Chip seine I2C-Emulation anbieten ?

roboter
12.06.2005, 16:41
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

PicNick
13.06.2005, 11:08
Übliche Frage: I2C -Bus hat seine Pullup's ?

roboter
13.06.2005, 11:11
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.

PicNick
13.06.2005, 11:19
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 ?

Gerhard
13.06.2005, 11:23
.. 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

roboter
13.06.2005, 11:33
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...

roboter
13.06.2005, 21:33
Es funktioniert jetzt.
Man muß
"Printbin wert;"
und nicht
"Print wert;"
nehmen

Torsten_G
17.06.2005, 23: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