roboforum.ru

Технический форум по робототехнике.

прога на тсоп вроде правельна а на практике непашет...

прога на тсоп вроде правельна а на практике непашет...

bloodaxe » 27 сен 2007, 17:45

всем привет..написал прогу на инфракрасный сенсор, протеус говорит что всё в норме а в реале непашет.В чем может быт глюк?
вот кот проги:

Код: Выделить всёРазвернуть
.cseg          
.org 0
reset:
ldi r16,LOW(RAMEND)
out spl,r16

ldi r17,$ff   ;zagruzajem v 17 registr 255   
out ddrd,r17   ;nastraivajem PB na vyxod

cbi ddrb,1   ;podtiazka na Pb1
sbi portb,1   ;vkliuchiajem Pb1

   
   
   
check:      ;podprograma proverki knopki
sbis pinb,1   ;proveriajem knopku na PD1
rjmp LED_ON   ;jesli srabotalo idiom na LED_ON
rjmp start   ;jesli nesrabotalo idiom na start(snova vysylajem pachki impulsav)

start:      ;podprograma START
ldi r18,20   ;zagruzajem v r18 200 t.e zacyklivajem pachki impulsav
start1:      ;pervaja chiast
dec r18      ;umenshajem r18 na 1   
sbi portd,4   ;vkliuchiajem irLED na Pd4
ldi r28,1   ;zagruzajem v r28 dlinu zaderzki(podprogramy delay)
rcall delay   ;vyzyvajem podprogramu zaderzki(delay)
cbi portd,4   ;vykliuchiajem irLED na Pd4
ldi r28,1   ;zagruzajem v r28 dlitelnost zaderzki, tak kak snova budem vyzyvat podprogramu zaderzki
rcall delay   ;snova vyzyvajem podprogramu zaderzki(delay)
sbi portd,4   ;vkliuchiajem irLED na PB4
cpi r18,0   ;sravnivajem r18 s 0
brne start1   ;jesli ne nol perexodim na start1
ret      ;a jesli 0 vyxodim is podprogramy
rjmp check

delay:      ;podprograma zaderzki
delay1:      ;jejo pervaja chiast   
ldi r27,2   ;zagruzajem  v r27  7   
delay2:      ;jejo vtoraja chiast   
ldi r26,7   ;zagruzajem v r26 2   
delay3:      ;jejo trietaja chiast
dec r26      ;umenshajem r26 na 1   
cpi r26,0   ;sravnivajem s 0
brne delay3   ;jesli ne nol perexodim na delay3,a jesli nol idiom dalshe
dec r27      ;umenshajem r27 na 1
cpi r27,0   ;sravnivajem s 0
brne delay2   ;perexodim na delay2,a jesli 0 idiom dalshe
dec r28      ;umenshajem r28 na 1
cpi r28,0   ;sravnivajem s 0   
brne delay1   ;jesli ne nol idiom na delay1,a jesli 0 idiom dalshe
ret      ;vyxodim is podprogramy delay

wait:      ;prosta zaderzka dlia morganija ledom
wait1:      ;jejo pervaja chiast   
ldi r27,25   ;zagruzajem  v r27  100   
wait2:      ;jejo vtoraja chiast   
ldi r26,25   ;zagruzajem v r26 100   
wait3:      ;jejo trietaja chiast
dec r26      ;umenshajem r26 na 1   
cpi r26,0   ;sravnivajem s 0
brne wait3   ;jesli ne nol perexodim na delay3,a jesli nol idiom dalshe
dec r27      ;umenshajem r27 na 1
cpi r27,0   ;sravnivajem s 0
brne wait2   ;perexodim na delay2,a jesli 0 idiom dalshe
dec r28      ;umenshajem r28 na 1
cpi r28,0   ;sravnivajem s 0   
brne wait1   ;jesli ne nol idiom na delay1,a jesli 0 idiom dalshe
ret      ;vyxodim is podprogramy delay


LED_ON:
cbi portd,4   ;vykliuchiajem IRled
sbi portd,6   ;vkliuchiajem led na pd6
rcall wait;   ;vyzyvajem zaderzku chtoby lampachka morgnula
cbi portd,6   ;vykliuchiajem led na pd6
rjmp start   ;perexodim na start

;36khz = r28 * r27 * r26 * 0.000001
;36khz = 1   *  7  *  2  * 0.000001


Код программ заключайте в BBCode-тег CODE <V>

Myp » 27 сен 2007, 17:52

так в протеусе ведь нет модели тсопа
как же ты проверил что она пашет? :shock:

а вобще асм... ужось...

bloodaxe » 27 сен 2007, 20:07

за то в протеусе есть кнопка и диод ;) :)..а для етого осцилогроф есть..36кз настроил по теорию правильно.Задержка между импулсами 14микросекунд, но в чем же глюк?кто в асме шарит помогите пожалутса:)  а нащет что асм ужос .неправда!хотябы можно смодулирывать код с минимальными затратами памети..ну и что,что в проге лехко запутатса, но также лехко ошибку найти.Я тоже думал ц что асм фуфло пока неузнал что за вещ! :wink:

steel_monkey » 27 сен 2007, 20:29

В данном случае прога действительно изврат. Надо быть проще- брать за основу прерывания по совпадению таймеров в режиме сравнения например ( подключить указанный в даташите порт МК к светодиоду и автоматически дергать его ногой при равенстве регистра счета и регистра сравнения). Подпрограммы прерываний и полный контроль МК- это сила асма. Читайте даташит МК в разделе переферии и будет Вам счастье.
А проще всего проверить работу проги на низком уровне в АВРстудии. Там можно запустить симуляцию и оперировать регистрами. Все действия происходят как в МК-покомандно. Там же можно по ходу вносить изменения в регистры, например симулируя нажатие на кнопку или инициируя прерывание.  
А кстати, можно взглянуть на схему? И на алгоритм работы проги. Так в асме разбираться проще.

P.S. Я разгребу дела и выложу свою прогу для ТСОПа и ИК светодиода . Там таймер+внешнее прерывание, 15 строчек интуитивного кода.
P.P.S Странно что ловец неопытных душ еще не обьявился.
P.P.P.S Ну зачем нам в любительских утройствах компактность кода? Ерунда это все. И быстродействие тоже. А уж ошибку искать...... Боже упаси. Если бы я знал хоть один ЯВУ, то МК программил бы на нем. Проблемма в том, что не знаю, а времени изучать нету. Те вещи, которые делают масетра кодов, я и сам могу сделать на асме, а для реального программирования язык надо изучать.

bloodaxe » 27 сен 2007, 21:15

что косаетса асма то я ево только знаю 2 месеца...(блогодоря ВОВАНУ), могу пака себе позволить и безобразный код, а потом когда набю руку буду порядочно писать,еще до таимеров я недошол..да хот и програмно для начяла можно писат неисползывая таимеров, а таймеры будут потом... ;)

Master » 27 сен 2007, 21:24

bloodaxe писал(а):что косаетса асма то я ево только знаю 2 месеца...(блогодоря ВОВАНУ), могу пака себе позволить и безобразный код, а потом когда набю руку буду порядочно писать,еще до таимеров я недошол..да хот и програмно для начяла можно писат неисползывая таимеров, а таймеры будут потом... ;)

Я раньше тоже так думал, но через месяц свою же прогу написанную на асме не смог разобрать, а на С запросто.

bloodaxe » 30 сен 2007, 12:43

С и асм ет 2 разные вешчи, и каждый язык имеет свои приемусчества, так что нельзя говорить что асм отстой а С там лутше..народ так кто нибуд поможет мне найти ошибку?

Master » 30 сен 2007, 13:31

bloodaxe писал(а):С и асм ет 2 разные вешчи, и каждый язык имеет свои приемусчества, так что нельзя говорить что асм отстой а С там лутше..народ так кто нибуд поможет мне найти ошибку?


Вряд ли здесь в основном Сишники.  :?

bloodaxe » 30 сен 2007, 14:20

надо брать С за рога:)


Rambler\'s Top100 Mail.ru counter