Технический форум по робототехнике.
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
так в протеусе ведь нет модели тсопа
как же ты проверил что она пашет?
а вобще асм... ужось...
bloodaxe » 27 сен 2007, 20:07
за то в протеусе есть кнопка и диод
..а для етого осцилогроф есть..36кз настроил по теорию правильно.Задержка между импулсами 14микросекунд, но в чем же глюк?кто в асме шарит помогите пожалутса:) а нащет что асм ужос .неправда!хотябы можно смодулирывать код с минимальными затратами памети..ну и что,что в проге лехко запутатса, но также лехко ошибку найти.Я тоже думал ц что асм фуфло пока неузнал что за вещ!
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
надо брать С за рога:)