Технический форум по робототехнике.
Правила форума
В данном разделе каждый может иметь не более одной темы. Тема должна начинаться с логина (ника) робофорума.
legion » 19 авг 2012, 01:47
Если в протеусе есть пошаговая отладка с просмотром всех регистров/портов/памяти мк - пользуйся ей. Я просто не знаю, что конкретно может протеус, не работал с ним. Дмитрий вот еще пугает, говорит - каша.
серж » 19 авг 2012, 01:52
пртотеус вещь кульная, советую! построчно ошибки показывает, сам хекс файлы делает. и много еще чего. ваще в электр прога незаменимая. сначало все виртуально, а потом и на железо.
Добавлено спустя 2 минуты 1 секунду:
в проте собираешь схему, пршиваешь мк, она те показывает как будет работать.... если будет работат.... и ошибки подскажет.
Dmitry__ » 19 авг 2012, 02:15
Серж, нафиг людям советуешь протеус, когда они умеют работают в родной среде авра?
К глюкам в голове добавляются глюки протеуса

серж » 20 авг 2012, 00:22
задача legion решена.
выполнил её так:
- Код: Выделить всё • Развернуть
.dseg ;
.eseg ;
.cseg ;
.equ but =pd0
.equ led =pb0
.equ led1 =pb1
reset:
ldi tempH,$04 ;neobhodimaia
out SPH,tempH ;ustanovka
ldi tempL,$5F ;dlia
out SPL,tempL ;vseh MEG
ldi temp, 0b00000011 ;pin0,pin1 vihodi
out ddrb,temp ;zapis v reg
ldi temp,0b00000001 ; podt na pin0, led vkl
out portb,temp ;vivod na portb
ldi temp,0b00000001 ;pin0 vhod
out ddrd,temp ;
ldi temp,0b00000001 ; podt.na pin0
out portd,temp ;vivod na portd
start:
cbi portb,led1 ;vikl led2
sbic pind, but ;propustit sled kom, esli kn nazata
rjmp start ; vozvrat
m_1:
sbis pind, but ; prop sled kom, esli kn otp
rjmp m_1 ; ozidanie
m_2:
cbi portb,led ;vikl led1
sbi portb,led1 ;vkl led2
sbic pind, but ;propustit sled kom, esli kn nazata
rjmp m_2 ;vozvrat k metke
m_3:
sbis pind, but ; prop sled kom, esli kn otp
rjmp m_3 ;
m_4:
rjmp reset ;vozvrat k nachalu prog
Добавлено спустя 6 минут 53 секунды:я с тини12 решил поиграть, но в инициализации ошибки пишет.
даю весь код (не дописан):
- Код: Выделить всё • Развернуть
.def temp =r16
.def temp =r17
.def temp =r18
.dseg
.eseg
.cseg
.equ bortL = pb5 ;
.equ bortR = pb4 ;
.equ left_up = pb2 ;
.equ rith_up =pb1 ;
.equ left_doun =pb0 ;
.equ rith_doun =pb3 ;
reset:
ldi tempH,$04 ;neobhodimaia
out SPH,tempH ;ustanovka
ldi tempL,$5F ;dlia
out SPL,tempL ;vseh MEG
;nastr pinov porta
ldi temp, 0b00001111 ;pini 0-3 vihod
out ddrb, temp ;zapis v reg
ldi temp, 0b00110110 ;podn na pin 1,2,dvig vpered i datchiki
out portb, temp ; vivod portab
start:
sbic pinb, bortL ; esli net signala propustit sled komandu
rjmp start ; ozidanie
m_1:
sbic pinb, bortR ;esli net signala propustit sled komandu
rjmp m_1 ;ozidanie
и собсна то место, где ошибки выдает
- Код: Выделить всё • Развернуть
ldi tempH,$04 ;neobhodimaia
out SPH,tempH ;ustanovka
ldi tempL,$5F ;dlia
out SPL,tempL ;vseh MEG
тут у меня знаний еще никаких нет. что к чему?
Radist » 20 авг 2012, 01:18
Не знаю никаких темпХ и темпЛ.
серж » 20 авг 2012, 01:43
Radist, legion, а как бы вы выполнили иниц., тиньки?
Добавлено спустя 7 минут 24 секунды:а! все! я эти строки закоментил и все заработало!

legion » 20 авг 2012, 01:44
- Код: Выделить всё • Развернуть
ldi tempH,$04 ;neobhodimaia
out SPH,tempH ;ustanovka
ldi tempL,$5F ;dlia
out SPL,tempL ;vseh MEG
Этот код - установка указателя стека. Он двухбайтный, поэтому записвыаем старший байт и младший. Как правило его устанавливают на конец ОЗУ. У меги8 конец озу 0х045F. У других он может отличаться.
Тут использованы определенияы регистров tempH и tempL. Это не обязательно. Можно использовать первый попавшийся из старшей половины, тогда не придется каждый раз их определять. А еще в файле определений на каждый МК АВР (тот самый *def.inc) есть определение конца ОЗУ - RAMEND. Чтобы поделить его на старший и младший байт в ассемблере в студии есть функции High() и Low(). Хз, есть ли оно в протеусе, но попробуй. Код инициализации указателя стека в общем случае выглядит так:
- Код: Выделить всё • Развернуть
LDI R16, High(RAMEND)
OUT SPH, R16
LDI R16, Low(RAMEND)
OUT SPL, R16
Что такое стек, зачем ему указатель и вообще про память прочитай
здесь.
P.S: Код решения задачи позже посмотрю, но если работает, то молодец!
P.P.S: Стек вроде можно не инициализировать, если не используешь инструкции подпрограмм (CALL и прочие), прерывания и PUSH/POP.
серж » 20 авг 2012, 02:23
к прерываниям как раз и подхожу...
но эт попозже, пока так, с логикой асма покопаюсь.
и вобще - очюблагодарен за помощь и подсказки!

серж » 20 авг 2012, 17:14
всеп прив!
я пытаюсь реализовать простейшего бота на тии12.
в чем я облажался?
вот код:
- Код: Выделить всё • Развернуть
;простейший бот на тини12
;задача-видим препятствие слева, то поворот вправо.
;препятствие справа - поворот влево.
.include "ATtiny12.inc" ;
.list ;
.def temp =r16
.dseg
.eseg
.cseg
.equ bortL = pb5 ;датчик левого борта
.equ bortR = pb4 ;датчик правого борта
.equ left_up = pb2 ;левый борт вперед
.equ rith_up =pb1 ;правый борт вперед
.equ left_down =pb0 ;левый борт назад
.equ rith_down =pb3 ;правый борт назад
reset:
;nastr pinov porta
ldi temp, 0b00001111 ;pini 0-3 vihod
out ddrb, temp ;zapis v reg
ldi temp, 0b00110110 ;podn na pin 1,2,dvig vpered i datchiki
out portb, temp ; vivod portab
start:
sbic pinb, bortL ;если датчик не сработал,
rjmp a ;пропустить эту команду.
sbic pinb, bortR ;если датчик не сработал,
rjmp b ;пропустить эту команду.
rjmp start ;возврат на старт
a:
cbi portb, rith_up ;выкл правый вперед
sbi portb, rith_down ;вкл правый назад
sbis pinb, bortL ;если датчик еще срабатывает,
rjmp a ;то пропустить эту команду.
rjmp start ;возврат на старт.
b:
cbi portb, left_up ;выкл левый вперед
sbi portb, left_down ;вкл левый назад
sbis pinb, bortR ;если датчик еще срабатывает,
rjmp b ;то пропустить эту команду.
rjmp start ;возврат на старт.
; :Yahoo!:
подправил...

Последний раз редактировалось
серж 20 авг 2012, 23:14, всего редактировалось 1 раз.
legion » 20 авг 2012, 17:41
- Код: Выделить всё • Развернуть
.devise tinny 12;
.no list ;
.list ;
Это все точно нужно? Откуда взял? И зачем исковеркал? Если нужно, то пишется это так:
.device ATtiny12
.nolist
- Код: Выделить всё • Развернуть
reset:
;nastr pinov porta
init:
Две метки указывают на один адрес. Не ошибка, но не хорошо.
- Код: Выделить всё • Развернуть
start:
sbic pinb, bortL ;
rjmp a ;
sbic pinb, bortR ;
rjmp b ;
rjmp init ;
Это у тебя основной цикл программы, зачем в каждом цикле выполнять инициализацию порта б? Прыгай на start. Тоже не ошибка, но бессмысленное действие.
Остальное вроде нормально. Только описывай что именно ты хочешь запрограммировать, чтобы другим не надо было догадываться.
P.S:
- Код: Выделить всё • Развернуть
.include "c : \ programm files \ atmel \ avr studio \ appnotes \ tinny12.inc" ;
Ты уверен, что по этому адресу есть такой файл? Вообще, если ты студию устанавливал, а не скопировал установленную папку откуда-нибудь, то полный путь прописывать не надо, достаточно имени файла.
Файлы определений надо искать в папке avr studio\AvrAssembler2\Appnotes\
серж » 20 авг 2012, 18:23
ок. дома осмыслю. писл код на работе - временм мало-торопился. поэтому нет ояснений.
серж » 20 авг 2012, 22:58
legion, дружище, ставь задачу. хочу голову поломать))))
а пока подправлю последний листинг...
подправил...
серж » 22 авг 2012, 00:17
думаю, кодовый замок, вот где мона голову поломать...
Добавлено спустя 1 час 52 минуты 12 секунд:похоже остался я один на один с асмом...
Добавлено спустя 50 минут 4 секунды:В СТУДИИ МНЕ ПОСТОЯННО ПИШУТ: FATAL ERROR: Cannot open output file C:\Users\=\Documents\5.hex: No such file or directory
ЧТО К ЧЕМУ, ПОДСКАЖИТЕ??
legion » 22 авг 2012, 01:03
Выбери другую директорию для своих проектов. Что-нибудь простое и короткое, C:\Projects, например.
А задачи пора самому себе ставить, это верно. =)
серж » 22 авг 2012, 01:50
я понимаю, что студия не любит длинные пути чтения, но у меня при любом раскладе пишет эту же ошибку....
