роботы робототехника микроконтроллеры


 Страниц (7): « 1 2 3 [4] 5 6 7 »   

> Описание: Нужна помощь по программированию
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



ну вот тут можете начать
но там как то ... жидко ...
 
 Top
sibiryak Post Id



Главнокомандующий


Сообщений всего: 248
Дата рег-ции: Февр. 2011  



; ================================ ============
; I N T E R R U P T S E R V I C E S
; ================================ ============
;
; [Add all interrupt service routines here]

EXT_INT0:
cli
ldi flag,00000001b [/color]При компиляции тут ошибка
spi [color=red]
тут может sbi ?
reti
;
; ================================ ============
; M A I N P R O G R A M I N I T
; ================================ ============
;
Main:
; Init stack
ldi rmp, HIGH(RAMEND) ; Init MSB stack
out SPH,rmp
ldi rmp, LOW(RAMEND) ; Init LSB stack
out SPL,rmp
; Init Port c
ldi rmp,00001111b ; Direction Port c [color=red][/color]И везде где ldi встречается
out DDRc,rmp
ldi rmp,11110000b
out portc,rmp
ldi rmp,0b
out ddrd,rmp
ldi rmp,00000100b
out portd,rmp

ldi pos,11110001b
ldi flag,00000000b


ldi rmp, 1<<ISC01 ;po spadu 1-0
out MCUCR,rmp
ldi rmp, 1<<INT0 ;razreschim int0
out GIMSK,rmp
sei

;
; ================================ ============
; P R O G R A M L O O P
; ================================ ============
;
Loop:
cpi flag, 1
brne loop
out portc,pos
nop
nop
ldi rmp,11110000b
out portc,rmp

sbrs pos,0
rjmp m1
ldi pos,11110010b
rjmp ex_loop

m1:
sbrs pos,1
rjmp m2
ldi pos,11110100b
rjmp ex_loop

m2:
sbrs pos,2
rjmp m3
ldi pos,11111000b
rjmp ex_loop

m3:
ldi pos,11110001b

ex_loop:
ldi flag,0h

rjmp loop ; go back to loop
;
; End of source code
;

(Отредактировано автором: 14 Июня, 2011 - 23:05:39)

 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



sibiryak, а этот код вы где взяли?
 
 Top
sibiryak Post Id



Главнокомандующий


Сообщений всего: 248
Дата рег-ции: Февр. 2011  



nest пишет:
sibiryak, а этот код вы где взяли?


На тредтей странице этой темы
(Добавление)
Там везде где ldi встречается ошибку выдаёт может опечатка или чем то заменить ?
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



sibiryak пишет:
Там везде где ldi встречается ошибку выдаёт может опечатка или чем то заменить ?
след. раз пишите, что за ошибку выдаёт.
скорее всего у вас регистр rmp обьявлен ниже R16.
Сделайте его регистром свободного доступа:
.def rmp = r19 ; любым от 16 до 31
 
 Top
sibiryak Post Id



Главнокомандующий


Сообщений всего: 248
Дата рег-ции: Февр. 2011  



E:\AVR\gl,j\gl,j.asm(97): error: b: Unknown instruction or macro

Вот ошибка
(Добавление)
nest пишет:
скорее всего у вас регистр rmp обьявлен ниже R16.


Он у меня равен 20
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



sibiryak, тогда запись байта неверная 00001111b
пишется всё так:
0b00001111 - двоичное
0xXX - 16-тиричное
 
 Top
sibiryak Post Id



Главнокомандующий


Сообщений всего: 248
Дата рег-ции: Февр. 2011  



nest пишет:
sibiryak, тогда запись байта неверная 00001111b
пишется всё так:
0b00001111 - двоичное
0xXX - 16-тиричное


С этим разобрался, осталась одна ошибка - E:\AVR\gl,j\gl,j.asm(98): error: spi: Unknown instruction or macro

spi - помоему нет такой функции. Тогда что там имелось ввиду ?

Вот в этом участке:

; ================================ ============
; I N T E R R U P T S E R V I C E S
; ================================ ============
;
; [Add all interrupt service routines here]

EXT_INT0:
cli
ldi flag,00000001b ;поднимаем флаг
spi
reti
;
; ================================ ============
; M A I N P R O G R A M I N I T
; ================================ ============
 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



sibiryak пишет:
nest пишет:
sibiryak, тогда запись байта неверная 00001111b
пишется всё так:
0b00001111 - двоичное
0xXX - 16-тиричное


С этим разобрался, осталась одна ошибка - E:\AVR\gl,j\gl,j.asm(98): error: spi: Unknown instruction or macro

spi - помоему нет такой функции. Тогда что там имелось ввиду ?

Вот в этом участке:

; ================================ ============
; I N T E R R U P T S E R V I C E S
; ================================ ============
;
; [Add all interrupt service routines here]

EXT_INT0:
cli
ldi flag,00000001b ;поднимаем флаг
spi
reti
;
; ================================ ============
; M A I N P R O G R A M I N I T
; ============================================


Это очепятка
должен быть
CODE:
sei


писал коментарии прямо в сообщении затер эту строчку и написал почему то не то.... 80 .
А c какой стороны ставить b это от компилятора похоже зависит.
В моем как выяснилось после двоичного b, после шестнадцатиричного h, после десятичного ничего.
Видел так же варианты типа $F0 в одном компиляторе.

(Отредактировано автором: 15 Июня, 2011 - 10:00:18)

 
 Top
sibiryak Post Id



Главнокомандующий


Сообщений всего: 248
Дата рег-ции: Февр. 2011  



Теперь компилируется Улыбка
Но останавливается в этом месте
; ================================ ============
; P R O G R A M L O O P
; ================================ ============
;
Loop:
cpi flag, 1
brne loop

out portc,pos
nop
nop
ldi rmp,0b11110000
out portc,rmp

sbrs pos,0
rjmp m1
ldi pos,0b11110010
rjmp ex_loop

m1:
sbrs pos,1
rjmp m2
ldi pos,0b11110100
rjmp ex_loop

m2:
sbrs pos,2
rjmp m3
ldi pos,0b11111000
rjmp ex_loop

m3:
ldi pos,0b11110001

ex_loop:
ldi flag,0b0

rjmp loop ; go back to loop
;
; End of source code
;
 
 Top
sibiryak Post Id



Главнокомандующий


Сообщений всего: 248
Дата рег-ции: Февр. 2011  



А при такой имитации при нажатии кнопки ничего не происходит Замешательство
Прикреплено изображение
Безымянный.jpg

 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



Что значит "компилируется но останавливается" ?

попробуйте закоментировть указанные строки для начала

out portc,pos
nop
nop

; ldi rmp,0b11110000
; out portc,rmp

и посмотреть что будет
вообще то надо нормальную задержку делать вместо nop

и не землю подавать на ногу PD2 а положительный импульс по спаду которого и будет реакцияУлыбка

я не пользовался протеусом и не знаю как там с прерываниями правильно настраивать работу там слишком уж заимитировали реальность

(Отредактировано автором: 15 Июня, 2011 - 11:52:56)

 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



допустим частота контроллера 4М
задержка в 1 милисекунду (вместо nop)

CODE:

; =============================
; delay loop generator
; 4000 cycles:
; -----------------------------
; delaying 3999 cycles:
ldi R17, $1F
WGLOOP0: ldi R18, $2A
WGLOOP1: dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
; -----------------------------
; delaying 1 cycle:
nop
; =============================


при 3000 об\мин частота импульсов датчика холла 200Гц (длительность импульса холла у меня устанвлена 1 мс)

тогда получим такую картину
Прикреплено изображение
holl.png

(Отредактировано автором: 15 Июня, 2011 - 12:58:04)

 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



схема
Прикреплено изображение
с1.png

 
 Top
sibiryak Post Id



Главнокомандующий


Сообщений всего: 248
Дата рег-ции: Февр. 2011  



killgur пишет:
Что значит "компилируется но останавливается" ?


Компилируется как надо.
А при выполнении программы пошагово в АВР студии на этом моменте перескакивает на шаг назад

; ================================ ============
; P R O G R A M L O O P
; ================================ ============
;
Loop:
cpi flag, 1 ; если флаг не установлен
brne loop ; ничего не делаем

out portc,pos ; зажигаем
nop ;ничего умнее не придумал
nop ;снова
ldi rmp,11110000b
out portc,rmp ;гасим

Я конечно не знаю может так и надо.

killgur пишет:
попробуйте закоментировть указанные строки для начала


Комментировал ничего не происходит.

killgur пишет:
и не землю подавать на ногу PD2 а положительный импульс по спаду которого и будет реакция


А как подать положительный импульс если на pd 2 итак висит полож. импульс ?

ldi rmp,0b ; порт д будет входом D
out ddrd,rmp

ldi rmp,00000100b ; просто для очистки совести
out portd,rmp
(Добавление)
killgur пишет:

; =============================
; delay loop generator
; 4000 cycles:
; -----------------------------
; delaying 3999 cycles:
ldi R17, $1F
WGLOOP0: ldi R18, $2A
WGLOOP1: dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
; -----------------------------
; delaying 1 cycle:
nop
; =============================


А как и куда это записать ? И что такое U2 ?
(Добавление)
А можно пример с простой кнопкой, нажал горит PC0, второй раз нажал горит PC1 и так далее ?
 
 Top
Страниц (7): « 1 2 3 [4] 5 6 7 »
« Программирование микроконтроллеров »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru