тинька "залочилась" НЕ ФУЗЫ

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

тинька "залочилась" НЕ ФУЗЫ

Сообщение ostrov » 27 мар 2011, 05:21

МК ATtini2313,программатор на FT232RL avrdude, оболочка SinaProg, прошивка ниже.

В чем собственно состоит магия)) ну и вопрос:

МК, программатор, оболочка все проверенное и используется давно без глюков, но при программировании прошивкой (ниже) МК не определяется программатором если не выставлять фузами дополнительное время задержки после аппаратного сброса , а при 4.1мс или 65мс все нормально (определяется).
Перепробовал разные скорости "залития", купил пару новых не юзаных МК, все перепроверил несколько раз.

Может быть кто сталкивался с подобным, подскажите пожалуйста.
Спасибо.
Код: Выделить всё
.include "tn2313def.inc"

.EQU CPU_SPEED=10000000
.def delaydelay1=r20
.def delaydelay2=r21
.def delaydelay3=r22



.equ   pSCL   = 6
.equ   pSDA   = 5
;---------------------------------------------------------
.def   DATA   = r17
.def   ClkA   = r18
.def   cnt       = r23
.def    AddrL   = r24    ;àäðåñà EEPROM
.def    AddrH   = r25

.MACRO delay_ms         
                       
      .set CPU_PERIOD=1000000000000/CPU_SPEED
      .set Delay_C=(@0*100000000/CPU_PERIOD)-21
      .set Delay_D3=Delay_C/197122+1
      .set Delay_D2=(Delay_C-(Delay_D3-1)*197122)/770+1
      .set Delay_D1=(Delay_C-(Delay_D3-1)*197122-(Delay_D2-1)*770)/3-1         
         PUSH delaydelay1
      PUSH delaydelay2
      PUSH delaydelay3
      ldi  delaydelay1,Delay_D1
      ldi  delaydelay2,Delay_D2
      ldi  delaydelay3,Delay_D3
      rcall delaydelayloop
      POP  delaydelay3
      POP  delaydelay2
      POP  delaydelay1
.ENDMACRO         



.MACRO outi
LDI R18,@1
OUT @0,R18
.ENDMACRO

.macro  i2c_w
cli
ldi ClkA,@0     ;   i2c_w
ldi data,@1   
rcall write_i2c
.endm


.macro  i2c_r
ldi ClkA,@0
rcall read_i2c
.endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.org 0
rjmp reset


reset:

sbi ddrb, 7
sbi portb, 7

ldi r16, ramend    ;
out spl, r16
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

delay_ms 0.2

rcall reset_cam

i2c_w 3, 0

i2c_w 4, 0b10001111

i2c_w 1, 0b01111000      ;

i2c_w 2, 0b11000000

i2c_w 3, 0b00100110

i2c_w 3, 0


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

cikle: rjmp cikle

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
reset_cam:
cbi portb, 7
delay_ms 0.2
sbi portb, 7
delay_ms 3
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




;----------------------- çàïèñü RTC --------------------------
write_i2c: 
   cbi   PORTB,pSDA
   cbi   PORTB,pSCL
   ldi   cnt,120   ;120 ïîïûòîê ïðîïèñàòü
loop120:
   push DATA
   rcall   start
   ldi  DATA,0b01111000 ;addr device,r/w=0
   rcall   write
   brcs   rt_write  ;C=1 ERROR
   mov   DATA,ClkA ;set HI address
   rcall   write
   brcs   rt_write  ;C=1 ERROR
   pop   DATA      ;set data to DATA
   rcall   write
   brcs   rt_       ;C=1 ERROR
   rcall   stop
   brcs   rt_       ;C=1 ERROR
   ret

;-----------------------  RTC --------------------------
read_i2c:    
   cbi   PORTB,pSDA
   cbi   PORTB,pSCL
ldi   cnt,120
loop_read_:
   rcall   start
   ldi   DATA,0b11010000  ;addr device,r/w=0
   rcall   write
   brcs   rt__     ;C=1 ERROR
   mov   DATA,ClkA ;set HI address
   rcall   write
   brcs   rt__     ;C=1 ERROR
   rcall   start     
   ldi   DATA,0b11010001  ;addr device,r/w=1
   rcall   write
   brcs   rt__     ;C=1 ERROR
   clt   ;  no put ACK
   rcall   read
   rcall   stop
   brcs   rt__     ;C=1 ERROR
   ret
rt__:
   dec   cnt
   brne   loop_read_
   ret

rt_write:
   pop   DATA
rt_:
   brcc   Ok_wr_
   dec   cnt
   brne   loop120
Ok_wr_:
   ret

write: 
   push   DATA
   push   cnt
   ldi   cnt,8   
x42:
   rol   DATA   
   brcs   se1   
   sbi   DDRB,pSDA
   rjmp   del_wr
se1:
   cbi   DDRB,pSDA
del_wr:
   cbi   DDRB,pSCL   
   rcall   delay 
   sbi   DDRB,pSCL 
   rcall   delay
   dec   cnt
   brne   x42   ;ñëåäóþùèé áèò
   cbi   DDRB,pSDA ; îñâîáîäèòü pSDA äëÿ ACK
   rcall   delay    
   cbi   DDRB,pSCL   
   rcall   delay      
   clc
   sbic   PINB,pSDA ;÷èòàåì â áèò Ñ ñîñòîÿíèå ACK
   sec   ;ACK íå ïðèøåë
   sbi   DDRB,pSCL
   rcall   delay
   pop   cnt
   pop   DATA
ret

read:   ;÷òåíèå â DATA, áèò t=1 -> îòâåòèòü ACK, t=0 íå îòâå÷àòü ACK
   ldi   DATA,1
loop_read:
   sbi   DDRB,pSCL   ;SCL=0
   cbi   DDRB,pSDA   ;SDA=1
   rcall   delay
   cbi   DDRB,pSCL   ;SCL=1
   rcall   delay
   clc
   sbic   PINB,pSDA   ;÷èòàòü SDA â áèò C
   sec
   rol   DATA
   brcc   loop_read
   ;îòñûëàåì ACK ()
   sbi   DDRB,pSCL    ;SCL=0
   rcall   delay
   brts   se0
   cbi   DDRB,pSDA   ;íå îòâå÷àòü ACK (t) , SDA=1
   rjmp   rd_
se0:
   sbi   DDRB,pSDA   ;îòâå÷àòü ACK (t) , SDA=0
rd_:
   clc
   rcall   delay
   cbi   DDRB,pSCL    ;SCL=1
   rcall   delay
ret

start:
   cbi   DDRB,pSDA
   cbi   DDRB,pSCL
   rcall   delay
   sbis   PINB,pSDA
   rjmp   start
   sbis   PINB,pSCL
   rjmp   start
   sbi   DDRB,pSDA ;0=SDA
   rcall   delay
   sbi   DDRB,pSCL ;0=SCL
   rcall   delay
ret

stop:
   sbi   DDRB,pSDA
   sbi   DDRB,pSCL
   rcall   delay
   cbi   DDRB,pSCL ;1=SCL
   rcall   delay
   cbi   DDRB,pSDA ;1=SDA
   rcall   delay
   clc
   sbic   PINB,pSDA
   ret
   sbic   PINB,pSCL
   ret
   sec
ret

delay:              ;~5mks (êâàðö 4MHz)
   push   cnt
   ldi   cnt,24
cyk_delay:    dec   cnt
   brne   cyk_delay
   pop   cnt
ret


delaydelayloop:
      dec delaydelay1
      brne delaydelayloop
        dec delaydelay2
      brne delaydelayloop
      dec delaydelay3
      brne delaydelayloop
       ret
Вложения
0000000000.txt
(8.64 КиБ) Скачиваний: 232
Последний раз редактировалось ostrov 27 мар 2011, 17:56, всего редактировалось 3 раз(а).
ostrov
 
Сообщения: 17
Зарегистрирован: 21 окт 2010, 23:08
Откуда: Москва

Re: тинька не определяется программатором

Сообщение avr123.nm.ru » 27 мар 2011, 12:19

Наверно такт не стартует. Надо фьюзы правильно поставить.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: тинька не определяется программатором

Сообщение ostrov » 27 мар 2011, 13:41

с другои прошивкой с такими же (ПРОВЕРЕНО, да там с фузамии не ошибешься) установками фьюзов все работает
ostrov
 
Сообщения: 17
Зарегистрирован: 21 окт 2010, 23:08
Откуда: Москва

Re: тинька "залочилась" НЕ ФУЗЫ

Сообщение Drunya » 28 мар 2011, 12:24

В Протеусе можно попробовать просимулировать.
Глюк по-немецки означает "счастье"...
Аватара пользователя
Drunya
 
Сообщения: 196
Зарегистрирован: 05 июн 2007, 12:20
Откуда: Киев
прог. языки: C/C++, ASSEMBLER

Re: тинька "залочилась" НЕ ФУЗЫ

Сообщение ostrov » 28 мар 2011, 20:37

спасибо, да не владею я к сожалению протеусом, щас параллельный соберу разберусь думаю что к чему
ostrov
 
Сообщения: 17
Зарегистрирован: 21 окт 2010, 23:08
Откуда: Москва

Re: тинька "залочилась" НЕ ФУЗЫ

Сообщение avr123.nm.ru » 29 мар 2011, 00:37

Овладейте послучаю - www.proteus123.narod.ru
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24