
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Maybe this will help you. Greetings, H.J. Windt '****************** PORTS ******************' define lcd_backlight_off port[16] '*******************************************' '**************** VARIABLES ****************' define configuration byte[1] define iic_nack bit[7] define iic_nack_count byte[2] define schleife byte[3] define word_adress byte[4] define slave_adress byte[5] define data byte[6] '*******************************************' '**************** CONSTANTS ****************' define uhr_schreiben &b10100010 define uhr_lesen &b10100011 '*******************************************' '****************** SETUP ******************' put 0 'needed because of a bug in CCIUM2.01 rs232 communication' print"#ON_LCD#";:print"#INIT#";:print"#CLR#";:print"#OFF#";:lcd_backlight_off = 1 '*******************************************' '***************** PROGRAM *****************' #start slave_adress=uhr_schreiben data=127 word_adress=21 #Schreiben_in_ram 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 gosub check_for_iic_error if iic_nack_count > 9 then goto no_ack_from_iic_device if iic_nack then goto Schreiben_in_ram print "daten geschrieben !" '-------------------------------------------------------------------------------------------------- #lese_ram print"lese RAM Adresse:";word_adress print"#ON_IIC#"; 'Umleitung auf I2C Bus Aktivieren print"#START#"; 'Sende Start Bedingung slave_adress=uhr_schreiben put slave_adress put word_adress print"#STOP#"; print"#OFF#"; gosub check_for_iic_error if iic_nack then goto pass_read print"#ON_IIC#"; print"#START#"; 'Sende Start Bedingung slave_adress=uhr_lesen put slave_adress get data print"#STOP#"; 'Sende Stop Bedingung print"#OFF#"; 'Umleitung aufheben gosub check_for_iic_error #pass_read if iic_nack_count > 6 then goto no_ack_from_iic_device if iic_nack then goto lese_ram print"gelesener wert :";data goto start '*******************************************' '*************** SUBROUTINES ***************' #check_for_iic_error print"#ON_CONFIG#"; get configuration if iic_nack = 0 then goto pass_iic_nack_clear iic_nack = 0 put configuration iic_nack = 1 iic_nack_count = iic_nack_count + 1 print"#OFF#"; return #pass_iic_nack_clear iic_nack_count = 0 print"#OFF#"; return '*******************************************' '******* INITIALIZATION SUBROUTINES ********' '*******************************************' '****************** DATA *******************' '*******************************************' '************* ERROR MESSAGES **************' #no_ack_from_iic_device print"No ACK from I2C device!!" #end_it goto end_it '*******************************************' > 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 |