Участник:AVKrobotics — различия между версиями

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
(AVRMicrobot)
Строка 7: Строка 7:
 
«Схема рис 1 разработана для двигателей с встроенным редуктором. Ток двигателя 150 мА. Для двигателей от китайских игрушек необходимо изменить схему драйвера рис 2»
 
«Схема рис 1 разработана для двигателей с встроенным редуктором. Ток двигателя 150 мА. Для двигателей от китайских игрушек необходимо изменить схему драйвера рис 2»
 
[[Файл:web3.jpg|thumb]]
 
[[Файл:web3.jpg|thumb]]
 +
« .include "D:\Program Files\Atmel\AVR Studio\Appnotes\tn25def.inc"
 +
 +
;Автор: Кравченко А.В.
 +
;Дата: 18.06.2010
 +
;Версия: 1.1.1
 +
;Проект Робоход
 +
;Имя файла: Robohod.asm
 +
;Микроконтроллер: AVR tiny25.
 +
;Тактовая частота: 6,4 мГц
 +
;Питание: стабилизированное 5,0 В
 +
 +
 +
.def tmp  = r16
 +
.def tmp2  = r17
 +
.def tmp3  = r18
 +
.def tempo = r19
 +
.def adc2 = r22
 +
.def adc1 = r23
 +
.def Yo  = r20
 +
.def Xo = r21
 +
.def Mo = r26
 +
.def adr = r0
 +
.def d1 = r24
 +
.def d2 = r25
 +
.def S1 = r27
 +
.def S2 = r28
 +
 +
 +
.cseg
 +
.org 0
 +
rjmp RESET
 +
nop ;rjmp  EXT_INT0 прерывание не используется
 +
nop ;rjmp  EXT_PCINT прерывание не используется
 +
nop ;rjmp  TIMER1_COMPA совпадение таймер 1
 +
nop ;rjmp  TIMER1_OVF0 прерывание от таймера
 +
nop ;rjmp  TIMER0_OVF0 прерывание от таймера
 +
nop ;rjmp  EE_RDY прерывание от таймера
 +
nop ;rjmp  ANA_COMP прерывание не используется
 +
nop ;rjmp  ADC прерывание не используется
 +
nop ;rjmp  TIMER1_COMPB прерывание от таймера
 +
nop ;rjmp  TIMER0_COMPA прерывание от таймера
 +
nop ;rjmp  TIMER0_COMPB прерывание от таймера
 +
nop ;rjmp  WDT тайм аут сторожевой таймен
 +
nop ;rjmp  USI START состояние START
 +
nop ;rjmp  USI OVF прерывание не используется
 +
.org 20
 +
;настройка порта В
 +
RESET: nop
 +
clr tmp
 +
out DDRB, tmp
 +
out PORTB, tmp ;обнулить порт В
 +
clr tmp
 +
ldi tmp, $0B ;PB0,PB1,PB4-выходы
 +
out DDRB, tmp
 +
nop
 +
nStart: nop
 +
;Один шаг левый
 +
clr tmp
 +
ldi tmp, $04
 +
out PORTB, tmp ;обнулить порт В
 +
rcall zader
 +
clr tmp
 +
out PORTB, tmp ;обнулить порт В
 +
;Один шаг правый
 +
clr tmp
 +
ldi tmp, $02
 +
out PORTB, tmp ;обнулить порт В
 +
rcall zader
 +
clr tmp
 +
out PORTB, tmp ;обнулить порт В
 +
;Проверка фото датчиков
 +
;вход в подпрограмму опроса АЦП1 правые датчики
 +
nop
 +
ldi tmp3, $93  ;источник питания, ADC2,ADMUX
 +
ldi tmp2, $C6  ;одиночное, запуск, 1/64,ADCSRA
 +
ldi tempo, $00  ;ADCSRB
 +
;опрос уровня правых датчиков
 +
rcall adcn
 +
mov S1, tmp2 ;загрузка младшего разряда
 +
mov S2, tmp3 ;загрузка старшего разряда
 +
cln
 +
clz
 +
cls
 +
cpi S1, $10
 +
brsh  dalee
 +
nop
 +
cpi S2, $00
 +
brne  dalee
 +
nop
 +
rjmp  nazadlevo
 +
dalee: nop
 +
;вход в подпрограмму опроса АЦП1 левые датчики
 +
nop
 +
ldi tmp3, $91  ;источник питания, ADC2,ADMUX
 +
ldi tmp2, $C6  ;одиночное, запуск, 1/64,ADCSRA
 +
ldi tempo, $00  ;ADCSRB
 +
;опрос уровня левых датчиков
 +
rcall adcn
 +
mov d1, tmp2 ;загрузка младшего разряда
 +
mov d2, tmp3 ;загрузка старшего разряда
 +
cln
 +
clz
 +
cls
 +
cpi d1, $10
 +
brsh  dalee2
 +
nop
 +
cpi d2, $00
 +
brne  dalee2
 +
nop
 +
rjmp  nazadpravo
 +
nop
 +
dalee2: nop
 +
;Вычитаем значения левых датчиков от значения правых
 +
cln
 +
cls
 +
clz
 +
sub d1, S1 ;Вычитание младших байтов
 +
;проверка на ноль старшего байта
 +
clr tmp
 +
rol tmp 
 +
sub d2, S2 ;Вычитание старшего байта с заемом
 +
sub d2, tmp ;Вычитание заема
 +
brmi npr ;переход если результат отрицательный
 +
nop
 +
;Один шаг левый
 +
clr tmp
 +
ldi tmp, $04
 +
out PORTB, tmp ;обнулить порт В
 +
rcall zader
 +
clr tmp
 +
out PORTB, tmp ;обнулить порт В
 +
nop
 +
rjmp con
 +
npr: nop
 +
;Один шаг правый
 +
clr tmp
 +
ldi tmp, $02
 +
out PORTB, tmp ;обнулить порт В
 +
rcall zader
 +
clr tmp
 +
out PORTB, tmp ;обнулить порт В
 +
nop
 +
con: nop
 +
rjmp nStart
 +
 +
 +
;Подпрограмма назад, влево вперед
 +
nazadlevo:
 +
;назад
 +
clr tmp
 +
ldi tmp, $01
 +
out PORTB, tmp ;обнулить порт В
 +
nop
 +
rcall zader
 +
nop
 +
rcall zader
 +
clr tmp
 +
out PORTB, tmp ;обнулить порт В
 +
;Один шаг левый
 +
clr tmp
 +
ldi tmp, $04
 +
out PORTB, tmp ;обнулить порт В
 +
nop
 +
rcall zader
 +
nop
 +
rcall zader
 +
clr tmp
 +
out PORTB, tmp ;обнулить порт В
 +
ret
 +
;Подпрограмма назад, вправо вперед
 +
nazadpravo:
 +
;назад
 +
clr tmp
 +
ldi tmp, $01
 +
out PORTB, tmp ;обнулить порт В
 +
nop
 +
rcall zader
 +
nop
 +
rcall zader
 +
clr tmp
 +
out PORTB, tmp ;обнулить порт В
 +
;Один шаг левый
 +
clr tmp
 +
ldi tmp, $02
 +
out PORTB, tmp ;обнулить порт В
 +
nop
 +
rcall zader
 +
nop
 +
rcall zader
 +
clr tmp
 +
out PORTB, tmp ;обнулить порт В
 +
ret
 +
;Настройка АЦП
 +
adcn: nop
 +
nop
 +
clr tmp
 +
awe: nop
 +
cpi tmp, $04
 +
brsh ass
 +
out ADMUX, tmp3 ;коммутация входов АЦП
 +
nop
 +
out ADCSRA, tmp2 ;запуск АЦП на преобразование
 +
nop
 +
out ADCSRB, tempo ;запуск АЦП на преобразование
 +
;Сохранение данных АЦП
 +
in tmp2, ADCL
 +
in tmp3, ADCH
 +
mov r2, tmp2
 +
mov r3, tmp3
 +
mov r4, r2
 +
mov r5, r3
 +
mov r6, r4
 +
mov r7, r5
 +
inc tmp
 +
rjmp awe
 +
;среднее арифметическое действие
 +
ass: nop
 +
clr r8
 +
clc
 +
add tmp2, r2
 +
adc r9, r8
 +
add tmp2, r4
 +
adc r9, r8
 +
add tmp2, r6
 +
adc r9, r8
 +
clc
 +
lsr r9
 +
ror tmp2
 +
lsr r9
 +
ror tmp2
 +
clr r9
 +
clc
 +
add tmp3, r3
 +
adc r9, r8
 +
add tmp3, r5
 +
adc r9, r8
 +
add tmp3, r7
 +
adc r9, r8
 +
clc
 +
lsr r9
 +
ror tmp3
 +
lsr r9
 +
ror tmp3
 +
nop
 +
ret
 +
 +
;Подпрограмма задержки включения
 +
zader: nop
 +
wdr
 +
clr Mo
 +
clr Yo
 +
ldi Yo,  $AF
 +
ldi Mo, $04
 +
add Mo, tmp3
 +
dm: nop
 +
ldi Xo, $04
 +
add Xo,  tmp2
 +
nop
 +
goq: nop
 +
mov Xo, tmp2
 +
dv: nop
 +
wdr
 +
nop
 +
dx: dec Yo
 +
brpl dx
 +
cln
 +
dec Xo
 +
brpl dv
 +
cln
 +
dec Mo
 +
brne dm
 +
ret
 +
 +
.EXIT
 +
»

Версия 07:19, 3 июля 2010

AVRMicrobot

«. Робоход при передвижении использует спицы колес без внешней дуги. Переднее колесо в виде диска имеет большой диаметр. Большое переднее колесо позволяет преодолевать препятствия. А спицы задних колес будут уверенно толкать платформу робота вперед. Высокий просвет платформы позволит преодолеть любую обочину, забраться на любой тротуар. Робот многофункционален, поэтому его можно эксплуатировать в различных сферах. Для работы, роботу нужна энергия. Энергия солнца, от части, поможет роботу восстанавливать силы. Робот должен иметь солнечную батарею. Пока идея создания такого робота находится на первых этапах развития. Поэтому собрать робота можно на простых доступных деталях. Но когда дизайн робота станет понятен, можно наделить его интеллектом. Научить передвигаться самостоятельно, без вреда для окружающего мира. Заложить в разум робота программу логистики, дать работу в повседневной суете городов.»

Web.jpg
Web2.jpg

«Схема рис 1 разработана для двигателей с встроенным редуктором. Ток двигателя 150 мА. Для двигателей от китайских игрушек необходимо изменить схему драйвера рис 2»

Web3.jpg

« .include "D:\Program Files\Atmel\AVR Studio\Appnotes\tn25def.inc"

Автор
Кравченко А.В.
Дата
18.06.2010
Версия
1.1.1
Проект Робоход
Имя файла
Robohod.asm
Микроконтроллер
AVR tiny25.
Тактовая частота
6,4 мГц
Питание
стабилизированное 5,0 В


.def tmp = r16 .def tmp2 = r17 .def tmp3 = r18 .def tempo = r19 .def adc2 = r22 .def adc1 = r23 .def Yo = r20 .def Xo = r21 .def Mo = r26 .def adr = r0 .def d1 = r24 .def d2 = r25 .def S1 = r27 .def S2 = r28


.cseg .org 0 rjmp RESET nop ;rjmp EXT_INT0 прерывание не используется nop ;rjmp EXT_PCINT прерывание не используется nop ;rjmp TIMER1_COMPA совпадение таймер 1 nop ;rjmp TIMER1_OVF0 прерывание от таймера nop ;rjmp TIMER0_OVF0 прерывание от таймера nop ;rjmp EE_RDY прерывание от таймера nop ;rjmp ANA_COMP прерывание не используется nop ;rjmp ADC прерывание не используется nop ;rjmp TIMER1_COMPB прерывание от таймера nop ;rjmp TIMER0_COMPA прерывание от таймера nop ;rjmp TIMER0_COMPB прерывание от таймера nop ;rjmp WDT тайм аут сторожевой таймен nop ;rjmp USI START состояние START nop ;rjmp USI OVF прерывание не используется .org 20

настройка порта В

RESET: nop clr tmp out DDRB, tmp out PORTB, tmp ;обнулить порт В clr tmp ldi tmp, $0B ;PB0,PB1,PB4-выходы out DDRB, tmp nop nStart: nop

Один шаг левый

clr tmp ldi tmp, $04 out PORTB, tmp ;обнулить порт В rcall zader clr tmp out PORTB, tmp ;обнулить порт В

Один шаг правый

clr tmp ldi tmp, $02 out PORTB, tmp ;обнулить порт В rcall zader clr tmp out PORTB, tmp ;обнулить порт В

Проверка фото датчиков
вход в подпрограмму опроса АЦП1 правые датчики

nop ldi tmp3, $93  ;источник питания, ADC2,ADMUX ldi tmp2, $C6  ;одиночное, запуск, 1/64,ADCSRA ldi tempo, $00  ;ADCSRB

опрос уровня правых датчиков

rcall adcn mov S1, tmp2 ;загрузка младшего разряда mov S2, tmp3 ;загрузка старшего разряда cln clz cls cpi S1, $10 brsh dalee nop cpi S2, $00 brne dalee nop rjmp nazadlevo dalee: nop

вход в подпрограмму опроса АЦП1 левые датчики

nop ldi tmp3, $91  ;источник питания, ADC2,ADMUX ldi tmp2, $C6  ;одиночное, запуск, 1/64,ADCSRA ldi tempo, $00  ;ADCSRB

опрос уровня левых датчиков

rcall adcn mov d1, tmp2 ;загрузка младшего разряда mov d2, tmp3 ;загрузка старшего разряда cln clz cls cpi d1, $10 brsh dalee2 nop cpi d2, $00 brne dalee2 nop rjmp nazadpravo nop dalee2: nop

Вычитаем значения левых датчиков от значения правых

cln cls clz sub d1, S1 ;Вычитание младших байтов

проверка на ноль старшего байта

clr tmp rol tmp sub d2, S2 ;Вычитание старшего байта с заемом sub d2, tmp  ;Вычитание заема brmi npr ;переход если результат отрицательный nop ;Один шаг левый clr tmp ldi tmp, $04 out PORTB, tmp ;обнулить порт В rcall zader clr tmp out PORTB, tmp ;обнулить порт В nop rjmp con npr: nop ;Один шаг правый clr tmp ldi tmp, $02 out PORTB, tmp ;обнулить порт В rcall zader clr tmp out PORTB, tmp ;обнулить порт В nop con: nop rjmp nStart


Подпрограмма назад, влево вперед

nazadlevo: ;назад clr tmp ldi tmp, $01 out PORTB, tmp ;обнулить порт В nop rcall zader nop rcall zader clr tmp out PORTB, tmp ;обнулить порт В ;Один шаг левый clr tmp ldi tmp, $04 out PORTB, tmp ;обнулить порт В nop rcall zader nop rcall zader clr tmp out PORTB, tmp ;обнулить порт В ret

Подпрограмма назад, вправо вперед

nazadpravo: ;назад clr tmp ldi tmp, $01 out PORTB, tmp ;обнулить порт В nop rcall zader nop rcall zader clr tmp out PORTB, tmp ;обнулить порт В ;Один шаг левый clr tmp ldi tmp, $02 out PORTB, tmp ;обнулить порт В nop rcall zader nop rcall zader clr tmp out PORTB, tmp ;обнулить порт В ret

Настройка АЦП

adcn: nop nop clr tmp awe: nop cpi tmp, $04 brsh ass out ADMUX, tmp3 ;коммутация входов АЦП nop out ADCSRA, tmp2 ;запуск АЦП на преобразование nop out ADCSRB, tempo ;запуск АЦП на преобразование

Сохранение данных АЦП

in tmp2, ADCL in tmp3, ADCH mov r2, tmp2 mov r3, tmp3 mov r4, r2 mov r5, r3 mov r6, r4 mov r7, r5 inc tmp rjmp awe

среднее арифметическое действие

ass: nop clr r8 clc add tmp2, r2 adc r9, r8 add tmp2, r4 adc r9, r8 add tmp2, r6 adc r9, r8 clc lsr r9 ror tmp2 lsr r9 ror tmp2 clr r9 clc add tmp3, r3 adc r9, r8 add tmp3, r5 adc r9, r8 add tmp3, r7 adc r9, r8 clc lsr r9 ror tmp3 lsr r9 ror tmp3 nop ret

Подпрограмма задержки включения

zader: nop wdr clr Mo clr Yo ldi Yo, $AF ldi Mo, $04 add Mo, tmp3 dm: nop ldi Xo, $04 add Xo, tmp2 nop goq: nop mov Xo, tmp2 dv: nop wdr nop dx: dec Yo brpl dx cln dec Xo brpl dv cln dec Mo brne dm ret

.EXIT »