; Orange programmer module v3.8 beta ; (c) 2002-2012 CnCLab ; Atmel AVR Tiny ;CHIP=ATtiny11 HV,1K,ATTIN12h.hpl ;AREA=FLASH,1K,0,0 ; High-voltage (12V) Serial programming mode ; primary tested SOCKET=0 ; OPTIONS=f, ;FLASH: skip blank INFO="PIC-AVR Adapter" PINO=SDIN, 2,5 ;PB0 PINO=SIIN, 1,6 ;PB1 PINO=SDOUT,0,7 ;PB2 PINO=SCK, 12,2 ;PB3 ! PINO=PB5VPP,5,1 ;RESET PINI=SDOUT,0,7 PINO=GND,255,4 PINO=VCC,254,8 R8=Fuses,B8 R9=Lock,L,All,Prog,Off R10=CKSEL,L,"000:Ext.Clk","100:Int.RC","101:Ext.RC","110:Ext.LF.Crystal","111:Ext.Resonator", R11=RSTDISBL,L,"On (Int.Reset),Off (Ext.Reset)" R12=FSTRT,L,On,Off CDELAY=1 ; [_SCKP] SCK=1,P=1,SCK=0,P=1 [_DOUT] R1=0 LOOP=(7,0){SDIN=R0[I],SCK=1,R1[I]=SDOUT,SCK=0} [_DIN] R0=0 LOOP=(7,0){SCK=1,R0[I]=SDOUT,SCK=0,P=1} [_INSTR] R2=0 SDIN=0,SIIN=0 _SCKP LOOP=(7,0){ R2[I]=SDOUT SDIN=R0[I] SIIN=R1[I] _SCKP } SDIN=0,SIIN=0 _SCKP _SCKP [INIT] SDOUT=Z PB5VPP=0,SDIN=0,P=1000 LOOP=(5){SCK=P} SCK=0 P=100 PB5VPP=1 VPP=12000 P=100000 [READ] $AREA?0{ ;R9=0x20 ;program memory area ;Read Flash High and Low Address R0=00000010B ;1 R1=01001100B _INSTR R0=ADR,R0=/512 ;2 adr l R1=00011100B _INSTR R0=ADR,R0=/2,R0=&0xFF ;3 adr h R1=00001100B _INSTR ;Read Flash R0=00000000B ;1 R1=ADR,R1=&1,R1=<<4,R1=|01101000B ;Low or High _INSTR R0=00000000B ;2 R1=01101100B _INSTR DATA=R2 } [WRITE] $AREA?0{ ;R0=0x40 ;program memory ;Write Flash High and Low Address R0=00010000B ;1 R1=01001100B _INSTR R0=ADR,R0=/512 ;2 adr l R1=00011100B _INSTR R0=ADR,R0=/2,R0=&0xFF ;3 adr h R1=00001100B _INSTR ;Write Flash R0=DATA ;1 R1=ADR,R1=&1,R1=<<4,R1=|00101100B ;Low or High _INSTR R0=00000000B ;2 R1=ADR,R1=&1,R1=<<4,R1=|01100100B ;Low or High _INSTR R0=00000000B ;3 R1=ADR,R1=&1,R1=<<4,R1=|01101100B ;Low or High _INSTR P=5000 ; min 4ms } [WRITEEND] P=20000 ["Read Fuses"] R0=00000100B ;1 R1=01001100B _INSTR R0=0 ;2 R1=01101000B _INSTR R0=0 ;3 R1=01101100B _INSTR R8=R2 R10=0,R11=0,R12=0 ;R10=CKSEL,L,"000:Ext.Clk","100:Int.RC","101:Ext.RC","110:Ext.LF.Crystal","111:Ext.Resonator", R1=R2,R1=&0x7 ;R10=CKSEL,L,Ext,Int R1?0{R10=0} R1?1{PRINT=("Undefined CKSEL value 1")} R1?2{PRINT=("Undefined CKSEL value 2")} R1?3{PRINT=("Undefined CKSEL value 3")} R1?4{R10=1} R1?5{R10=2} R1?6{R10=3} R1?7{R10=4} R11[0]=R8[3] ;R11=RSTDISBL,L,On,Off R12[0]=R8[4] ;R12=FSTRT,L,On,Off SCK=0, PB5VPP=0 GET=("Read Fuses",R8,R10,R11,R12) ["Write Fuses"] GET=("Write Fuses",R10,R11,R12) RA?0{EXIT} R8=0xFF ; unused bits to 1 R8=0 R10?0{R8=0} ;R10=CKSEL R10?1{R8=4} R10?2{R8=5} R10?3{R8=6} R10?4{R8=7} R8[3]=R11[0] ;R11=RSTDISBL,L,On,Off R8[4]=R12[0] ;R13=FSTRT,L,On,Off R0=01000000B ;1 R1=01001100B _INSTR R0=R8 ;2 fuses R1=00101100B _INSTR R0=0 ;3 R1=01100100B _INSTR R0=0 ;4 R1=01101100B _INSTR P=20000 ["Read Lock"] R0=00000100B ;1 R1=01001100B _INSTR R0=0 ;2 R1=01111000B _INSTR R0=0 ;3 R1=01111100B _INSTR SCK=0, PB5VPP=0 R2=/2, R2=&3 ; Error in Datasheet??? R9=R2 R9?1{PRINT=("Undefined value - 1"),EXIT} R2?2{R9=1} R2?3{R9=2} GET=("Lock Bits",R9) ["Write Lock"] R9=0 GET=("Lock Bits",R9) RA?0{EXIT} R9?2{R9=3} R9?1{R9=2} R0=00100000B ;1 R1=01001100B _INSTR R0=R9,R0=*2 ;2 R1=00101100B _INSTR R0=0 ;3 R1=01100100B _INSTR R0=0 ;4 R1=01101100B _INSTR P=20000 [ReadID] R0=00001000B ;1 R1=01001100B _INSTR R8=0 R7=0 ;adr LOOP=(0,2){ R0=R7 ;2 R1=00001100B _INSTR R0=0 ;3 R1=01101000B _INSTR R0=0 ;4 R1=01101100B _INSTR R8=*256 R8=|R2 R7=+1 } SCK=0, PB5VPP=0 R8?0x1E9004{PRINT=("ID: %06lX - ATTiny11",R8),EXIT} R8?0x1E9005{PRINT=("ID: %06lX - ATTiny12",R8),EXIT} R8?0x1E9006{PRINT=("ID: %06lX - ATTiny15",R8),EXIT} PRINT=("ID: %06lX",R8) [Erase] R0=10000000B ;1 R1=01001100B _INSTR R0=0 ;2 R1=01100100B _INSTR R0=0 ;3 R1=01101100B _INSTR P=20000 R0=0 ;4 R1=01001100B _INSTR P=50000 [END] SCK=0, PB5VPP=0 VPP=0 P=10000