PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bekomme kein ACK an der I²C Hardware (Munit2, Basic++)



Amiwerewolf
07.07.2006, 02:33
Hallo,
warum bekomm ich bei der I²C Hardware kein ACK zurück???? :-k
Benutze die M-Munit2.0 mit Basic++

Danke im vorraus, Michi



DECLARE FUNCTION i2cstart()
DECLARE FUNCTION i2cstop()
DECLARE FUNCTION i2cdevselect(adress AS BYTE)
DECLARE FUNCTION i2cbwrite(data AS BYTE)
DECLARE FUNCTION i2cgetack()

DEFINE SCL AS PORT [1]
DEFINE SDA AS PORT [2]
DEFINE temp AS BYTE

' Programmteil

Print "IIC Test Programm"
for temp = 1 to 255
Print "Scanning for I2C Device at " & temp
i2cstart()
pause 1
i2cdevselect(temp)
pause 1
i2cgetack()
i2cstop()
next temp
end

' Unterprogramme
SUB i2cstart()
SDA=1
SCL=1
pause 1
SDA=0
pause 1
SCL=0
END SUB

SUB i2cstop()
SDA=0
Pause 1
SCL=1
pause 1
SDA=1
END SUB

FUNCTION i2cdevselect(adress AS BYTE)
i2cbwrite(adress)
END FUNCTION

FUNCTION i2cgetack()
DEFINE i2c_ack_timeout AS WORD
SDA = 1
Deact SDA
i2c_ack_timeout=0
Do
i2c_ack_timeout=i2c_ack_timeout+1
'print i2c_ack_timeout & " | " & SDA

if SDA = 0 then Print "SDA EMPFANGEN"
Loop Until SDA = 0 Or i2c_ack_timeout = 5000
Pulse SCL
SDA = 1
END FUNCTION

FUNCTION i2cbwrite(data AS BYTE)
define i2c_data8 ref data at bit[1]
define i2c_data7 ref data at bit[2]
define i2c_data6 ref data at bit[3]
define i2c_data5 ref data at bit[4]
define i2c_data4 ref data at bit[5]
define i2c_data3 ref data at bit[6]
define i2c_data2 ref data at bit[7]
define i2c_data1 ref data at bit[8]
SDA=i2c_data1
'print SDA
pulse SCL
SDA=i2c_data2
'print SDA
pulse SCL
SDA=i2c_data3
'print SDA
pulse SCL
SDA=i2c_data4
'print SDA
pulse SCL
SDA=i2c_data5
'print SDA
pulse SCL
SDA=i2c_data6
'print SDA
pulse SCL
SDA=i2c_data7
'print SDA
pulse SCL
SDA=i2c_data8
'print SDA
pulse SCL
END FUNCTION

Dierk
07.07.2006, 09:44
Hallo Michi,
Nutz doch die internen I2C-Bus Routinen über Port 9 und Port 10:
In Basic++ in Verbindung mit der M2.00 oder Station2 kannst Du den IIC-Bus ganz einfach bedienen.


WITH IIC
.INIT
.START
.SEND 21
.STOP
.OFF
END WITH

Hier noch etwas aus der WorkBench-Hilfe
http://www.csslabs.de/ccontrol/help/iic.html

Achim
07.07.2006, 09:50
Das Betriebsystem sendet aber vielleicht auch kein ACK. Bei der alten C-Control war das jedenfalls so komisch gelöst.

Amiwerewolf
07.07.2006, 11:18
Hallo Dierk,
das hab ich auch schon versucht, funktioniert auch nicht!
muss ich vorher die Ports 9 & 10 Definieren?
oder wie läuft das ab?

Danke Michi

Amiwerewolf
07.07.2006, 12:30
Anscheinend lag es am EEPROM, hab 2 niegelnagel neue versucht hat nicht geklappt!
aber was ist den bitte so falsch an 24C02WP ???
war ein SMD Bauteil im SO8.
Pin 1,2,3,4,7 waren auf Masse
Pin 5 SDA
Pin 6 SCL
Pin 8 +5V
schreibadresse 160
leseadresse 161

Habe so ein 24C04 im DIL8 genauso eingelötet
und ich bekomm zumindest ein ACK zurück.
(mit meinem Programm)

was hab ich falsch gemacht das das mit mein 24C02WP nicht klappt?
](*,)
was hab ich falsch gemacht das volgendes porgamm nicht funktioniert!



OPTION CC2.0 'Zielplattform
DEFINE temp as byte
Print "WRITE"

WITH IIC
.INIT
.START
.SEND 160 'Device Select schreiben
.SEND 0 'Pointer setzen auf 0
.SEND 123 'Wert 123 Schreiben
.STOP
.OFF
END WITH
Print "WRITE END"
pause 10
PRINT "READ"
WITH IIC
.INIT
.START
.SEND 160 'Device Select schreiben
.SEND 0 'Pointer setzen auf 0
pause 5
.START 'I²C Neustarten
.SEND 161 'Device Select lesen
.GET temp 'Daten auslesen
.STOP
.OFF
END WITH
PRINT Temp
PRINT "READ END"


danke Michi

Amiwerewolf
07.07.2006, 16:21
so hab den fehler, es lang an einem DisignFeher der geätzen Platine wo das EEP-Rom drauf war.
wenn pin 1,2,3,4 auf SCL liegen und nicht auf masse kanns nicht gehen! ](*,)

aber mit IIC.INIT, IIC.START, .... klapts immer noch nicht, kann mir wer helfen?

DIE HARD
07.07.2006, 18:33
so hab den fehler, es lang an einem DisignFeher der geätzen Platine wo das EEP-Rom drauf war.
wenn pin 1,2,3,4 auf SCL liegen und nicht auf masse kanns nicht gehen! ](*,)

aber mit IIC.INIT, IIC.START, .... klapts immer noch nicht, kann mir wer helfen?

Hallo...
Guck hier in der Code-Library von Fdos, das Beispiel:
http://www.fdos.de/ccbpp/codelib.php?dir=../ccforum/codelib/basic_plus_plus/Demo_Unit_M2.0_M1.2/BEISPIELE_ZUBEH%D6R_M2.0_M1.2/IIC_DATENSPEICHERMODUL_198849

Und die zugehörige Datei der Library:
http://www.fdos.de/ccforum/codelib/basic_plus_plus/Library_Micro_M2_Station2/IIC_EEPROM.htm
Da gibts auch ein Forum, wenn du nicht klar kommst.

Amiwerewolf
12.07.2006, 17:36
Danke nach ewigen testen hat es geklapt