; Orange programmer module v1.0 ; (c) 2007-2014 CnCLab ; pavel-pervomaysk ;CHIP=MCP79410,128,MCP79410.hpl ;AREA=EEPROM,128,0 ; not used ;AREA=RTCC,32,80H ;AREA=SRAM,64,A0H ; Remove SDA, SCL from pcb ; Do not disconnect battery from rtc ; read, write in circuit only ; Tested OK ! INFOFILE="MCP79410.GIF" ALLPINS=0 SOCKET=0 ;"I2C" PING=SCL,0 PING=SDA,1 CDELAY=1 ; one cycle time R5=I2CADR,h2 POWER=0 ; управление питанием из модуля 0, из программы 1 ;VCC=1 [_START] SDA=1,SCL=1,SDA=0,SCL=0 ; Start 10 [_STOP] SCL=0,SDA=0,SCL=1,SDA=1 ; Stop 01 [SETUP] VCC=5000 VCC=1 [INIT] $AREA?0 {R5=0xAE} ; EEPROM $AREA?>0{R5=0XDE} ; RTCC,RAM [_SADR] R0=R5,R1=R0,R1=+1 ; read R0=&0xFE ; write [READ] _START _SADR LOOP=(7,0){SDA=R0[I],SCL=P} ; out Device Slave adr. 0xAE,0xDE SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check LOOP=(7,0){SDA=ADR[I],SCL=P} ; out 8 bits (Adr) SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check _START ; RESTART LOOP=(7,0){SDA=R1[I],SCL=P} ; out 8 bits DeviceAdr+1 SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check LOOP=(7,0){SCL=1,DATA[I]=SDA,SCL=0} ; read byte Data SDA=1,SCL=1,SCL=0 ; out master NO_ACKN _STOP [WRITE] _START _SADR LOOP=(7,0){SDA=R0[I],SCL=P} ; out Device adr. 0xAE SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check LOOP=(7,0){SDA=ADR[I],SCL=P} ; out 8 bits (Adr) SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check LOOP=(7,0) {SDA=DATA[I],SCL=P} ; out byte Data SDA=1,SCL=1,SDA?0,SCL=0 ; ACKN check ; end out Data _STOP P=6000