INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo zusammen, Ich habe eine Echtzeit-uhr PCF8583 (als Fertigen baustein mit Gold cap bei cc-tools gekauft) Leider Klappt die Kommunikation nicht so, wie ich mir das vorstelle. beim lesen vom pcf8583 erhalte ich immer den wert 0 zurück, (bei nicht angeschlossenen Baustein 255) egal welche Speicherstelle ich auslese. ich hab mir den Bus schon mit einem Oszilloskop angesehen, und festgestellt, das der PCF8583 jedes Byte brav mit einem ACK beantwortet. ich verwende die eingebauten I2C Routinen der M-unit 2.0 Nachfolgend ein Test-programm das den Wert 127 an speicherstelle 21 schreibt (freier ram bereich) und anschliessend wieder einlesen soll. Zurück erhalte ich jedoch den wert 0 da tut sich ein grosser abgrund von fragen auf was mache ich falsch ? ist das schreiben fehlerhaft, oder das Lesen ? kann man softwaremässig prüfen ob ein ACK eingegangen ist, ohne neue I2C Routinen zu schreiben ? wieso entstehen mit dem get befehl 18 Impulse auf SDA (Oszilloskop) ? Es soll ja nur ein Byte gelesen werden und nicht 2 '--------------------------------------------------------------------------- ' Testprogramm Für PCF8583 '--------------------------------------------------------------------------- define schleife byte define word_adress byte define slave_adress byte define data byte define uhr_schreiben &b10100010 define uhr_lesen &b10100011 #start '-----------------Schreiben in ram-------------------------------------------------------------------- slave_adress=uhr_schreiben data=127 word_adress=21 print" Schreibe RAM Adresse:";word_adress;" Daten: ";data print"#ON_IIC#"; 'Umleitung auf I2C Bus Aktivieren print"#START#"; 'Sende Start Bedingung put slave_adress put word_adress put data print"#STOP#"; 'Sende Stop Bedingung print"#OFF#"; 'Umleitung aufheben print "daten geschrieben !" '-------------------------------------------------------------------------------------------------- slave_adress=uhr_schreiben print" lese RAM Adresse:";word_adress print"#ON_IIC#"; 'Umleitung auf I2C Bus Aktivieren print"#START#"; 'Sende Start Bedingung put slave_adress put word_adress print"#START#"; 'Sende Start Bedingung slave_adress=uhr_lesen put slave_adress get data print"#STOP#"; 'Sende Stop Bedingung print"#OFF#"; 'Umleitung aufheben print" gelesener wert :";data goto start end |
Antwort schreiben |