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


 Страниц (1): [1]   

> Описание: а
beam Post Id



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


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



Привет!Извиняюсь за КРАКОЗЯБРИКОВ =))))..Проблема состоит в следующем: -Зашол в тупик! Надо управлять сервоприводами,но заранее записав сценарий их поворотов на разные углы в массив и вызывая прерыванием каждую секунду новую строку, .DB оттуда мне надо их считать и подать на регистры сравнения OCRxx. ШИМ настроен на работу с сервоприводами..и работает безотказно!!..а вот вывести из массива числа длинный импульсов я немогу((( Буду благодарен любой помощи)))спс

.include "m1280def.inc"
.equ I=2500


;Векторы прерываний
.dseg
.cseg
.org 0x0000
rjmp RESET ; Reset Handler
.org 0x0002 ; IRQ0 Handler
reti
.org 0x0004; IRQ1 Handler
reti
.org 0x0006 ; IRQ2 Handler
reti
.org 0x0008 ; IRQ3 Handler
reti
.org 0x000A ; IRQ4 Handler
reti
.org 0x000C ; IRQ5 Handler
reti
.org 0x000E ; IRQ6 Handler
reti
.org 0x0010 ; IRQ7 Handler
reti
.org 0x0012 ; PCINT0 Handler
reti
.org 0x0014 ; PCINT1 Handler
reti
.org 0x0016 ; PCINT2 Handler
reti
.org 0X0018 ; Watchdog Timeout Handler
reti
.org 0x001A ; Timer2 CompareA Handler
reti
.org 0x001C ; Timer2 CompareB Handler
reti
.org 0x001E ; Timer2 Overflow Handler
rjmp DELAY1
.org 0x0020 ; Timer1 Capture Handler
reti
.org 0x0022 ; Timer1 CompareA Handler
reti
.org 0x0024 ; Timer1 CompareB Handler
reti
.org 0x0026 ; Timer1 CompareC Handler
reti
.org 0x0028 ; Timer1 Overflow Handler
reti
.org 0x002A ; Timer0 CompareA Handler
reti
.org 0x002C ; Timer0 CompareB Handler
reti
.org 0x002E ; Timer0 Overflow Handler
reti
.org 0x0030 ; SPI Transfer Complete Handler
reti
.org 0x0032 ; USART0 RX Complete Handler
reti
.org 0x0034 ; USART0,UDR Empty Handler
reti
.org 0x0036 ; USART0 TX Complete Handler
reti
.org 0x0038 ; Analog Comparator Handler
reti
.org 0x003A ; ADC Conversion Complete Handler
reti
.org 0x003C ; EEPROM Ready Handler
reti
.org 0x003E ; Timer3 Capture Handler
reti
.org 0x0040 ; Timer3 CompareA Handler
reti
.org 0x0042 ; Timer3 CompareB Handler
reti
.org 0x0044 ; Timer3 CompareC Handler
reti
.org 0x0046 ; Timer3 Overflow Handler
reti
.org 0x0048 ; USART1 RX Complete Handler
reti
.org 0x004A ; USART1,UDR Empty Handler
reti
.org 0x004C ; USART1 TX Complete Handler
reti
.org 0x004E ; 2-wire Serial Handler
reti
.org 0x0050 ; SPM Ready Handler
reti
.org 0x0052 ; Timer4 Capture Handler
reti
.org 0x0054 ; Timer4 CompareA Handler
reti
.org 0x0056 ; Timer4 CompareB Handler
reti
.org 0x0058 ; Timer4 CompareC Handler
reti
.org 0x005A ; Timer4 Overflow Handler
reti
.org 0x005C ; Timer5 Capture Handler
reti
.org 0x005E ; Timer5 CompareA Handler
reti
.org 0x0060 ; Timer5 CompareB Handler
reti
.org 0x0062 ; Timer5 CompareC Handler
reti
.org 0x0064 ; Timer5 Overflow Handler
reti
.org 0x0066 ; USART2 RX Complete Handler
reti
.org 0x0068 ; USART2,UDR Empty Handler
reti
.org 0x006A ; USART2 TX Complete Handler
reti
.org 0x006C ; USART3 RX Complete Handler
reti
.org 0x006E ; USART3,UDR Empty Handler
reti
.org 0x0070 ; USART3 TX Complete Handler

in r16, MCUCR
mov r17, r16
; Enable change of Interrupt Vectors
ori r16, (1<<IVCE)
out MCUCR, r16
; Move interrupts to Boot Flash section
ori r16, (1<<IVSEL)
out MCUCR, r17
ret
ldi r16,0b10000000
sts XMCRA,r16


ldi r16, high(RAMEND) ; Main program start
out SPH,r17 ; Set Stack Pointer to top of RAM
ldi r16, low(RAMEND)
out SPL,r16
clr r16



///////////////////////
ldi XH,High(SC1*2)
ldi XL,low(SC1*2)
movw ZH:ZL,XH:XL

DELAY1:
cli
LPM r16,Z+
sts OCR1AL,r16
LPM r16,Z+
sts OCR1BL,r16
LPM r16,Z+
sts OCR1CL,r16
////
LPM r16,Z+
sts OCR3AL,r16
LPM r16,Z+
sts OCR3BL,r16
LPM r16,Z+
sts OCR3CL,r16
////
LPM r16,Z+
sts OCR4AL,r16
LPM r16,Z+
sts OCR4BL,r16
LPM r16,Z+
sts OCR4CL,r16
////////
LPM r16,Z+
sts OCR5AL,r16
LPM r16,Z+
sts OCR5BL,r16
LPM r16,Z+
sts OCR5CL,r16
sei
reti


RESET:
;КОНФИНУРАЦИЯ ПОРТОВ////////////////////////// //////
ldi r16,0b11111111
out DDRB,r16
ldi r16,0b11101111
out DDRD,r16
ldi r16,0b11111111
out DDRE,r16
ldi r16,0b11111111
sts DDRH,r16
ldi r16,0b11111111
sts DDRL,r16
sei
;НАСТРОЙКА ТАЙМЕРА 2
ldi r16,0b000000101
sts TCCR2B,R16
ldi r16,(1<<TOIE2)
sts TIMSK2,r16
ldi r16,0b000010000
sts ASSR,r16
;НАСТРОЙКА ТАЙМЕРА 1///////////////////////////////

ldi r16,0b10101010
sts TCCR1A,r16
ldi r16,0b10111010
sts TCCR1B,r16
ldi r16,0b00000000
ldi r16,High(I)
sts ICR1H,r16
ldi r17,Low(I)
sts ICR1L,r17

;НАСТРОЙКА ТАЙМЕРА 3/////////////////////////////// /
ldi r16,0b10101010
sts TCCR3A,r16
ldi r16,0b10111010
sts TCCR3B,r16
ldi r16,0b00000000
ldi r16,High(I)
sts ICR3H,r16
ldi r17,Low(I)
sts ICR3L,r17

;НАСТРОЙКА ТАЙМЕРА 4/////////////////////////////// /

ldi r16,0b10101010
sts TCCR4A,r16
ldi r16,0b10111010
sts TCCR4B,r16
ldi r16,0b00000000
ldi r16,High(I)
sts ICR4H,r16
ldi r17,Low(I)
sts ICR4L,r17


;НАСТРОЙКА ТАЙМЕРА 5/////////////////////////////// //
ldi r16,0b10101010
sts TCCR5A,r16
ldi r16,0b10111010
sts TCCR5B,r16
ldi r16,0b00000000
ldi r16,High(I)
sts ICR5H,r16
ldi r17,Low(I)
sts ICR5L,r17
;IANO?IEEA I?A?UAAIEE
ldi r16,(1<<ICIE1)
sts TIMSK3,r16









m10:
rjmp m10
SC1:

.DB 0x10,0x10, 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10
.DB 0x10,0x17, 0x10,0x10,0x10,0x15,0x10,0x10,0x10,0x10,0x1E,0x10
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Таблица векторов прерываний недоделанная. Перехода в конец этой таблицы тоже нет.

Сразу после
CODE:
RESET:
должна быть инициализация стека
CODE:
ldi r16, high(RAMEND)
out SPH, r16
ldi r16, low(RAMEND)
out SPL, r16
Это первое, что привлекло внимание.

Проверяйте каждую строчку кода в симуляторе. Врядли кто станет делать это за Вас просто так.
 
 Top
cjA Post Id



Генерал


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




ну скажем не все "стеком" пользуются, есть и прогмем, и еепром

beam, с вас пиво Майклу. Раз он зацепился за Вашу программу, то как истинный перфекционист, заставит Вас сделать ее идеальной.
(Добавление)
beam пишет:
.а вот вывести из массива числа длинный импульсов я немогу(((
неграмотно со стороны нативного, (русского) языка.
(Добавление)
Ага!

;НАСТРОЙКА ТАЙМЕРА 5/////////////////////////////// //
то есть это не мега8? Ну и славно, умываю руки.
это хорошее решение, сделать нулевой майн и все отдать на откуп прерываниям, но и сам МК не всесилен.
Я подозреваю что AVR просто не может одновременно обрабатывать пять таймеров. ИМНО.
(Добавление)
Должна быть деректива вроде что это данные находящиеся в сегменте программы, но как она пишется Улыбка я уже забыл. Ковыряю Си, но все равно грил и буду- асм своего мога нужно знать.
А чем компилишь?
 
 Top
beam Post Id



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


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



Делаю все в Авр Студио и тестю протеусом..ктото может толком обьяснить принцип обращения к строкам или к жвум массивам ,,,или может ссылку подкинуть?)ато ничего немогу найти
(Добавление)
У меня массив 5 строк на 12 пакетов , при чтени регистр декрементирую от12 до 0и получается конец строчки, потом обнуляю рег счетчик и иду на 2ю строку.. Но ничего невыходит
(Добавление)
Не от 12 до 0 ,,,а от 0 до 5)))
(Добавление)
Может книги какието есть, по аврАМ ,толковые,,?))я читаю щас Мортона
(Добавление)
Кстати насчет одновремменной обработки 5ти таймеров,,?на самом деле мк может непотянуть ???или это догадки..Жду обоснования высказывания cjA))))
(Добавление)
И какое пиво какому Майклу?)))
 
 Top
cjA Post Id



Генерал


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



А чем компилишь, еще раз спрашиваю? студио тебе прогонит конечно и ошибок не выдаст, но нужно указать сборщику где будет находиться эта таблица. Ну и потом прошивщику этот файл подсунуть

(michail не поленился и прочитал весь твой код. Ващет текст уже такой что уже и на Си нужно выходить, это тут не лампочками помигать.).
(Добавление)
На Си это делается дерективой (макрой) PROGMEM. Попробуй, вдруг проскочет.
(Добавление)
пять, да хоть пятьдесят таймеров могут работать как хотят. Логика твоей программы сможет за ней уследить? Таймеры то работают, но пока обработчик одного таймера включен, все остальные обработчики вафлят.
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



beam пишет:
ссылку подкинуть?

http://easyelectronics.ru/avr-uc...e-flash-rom.html
 
 Top
Петр Киселев Post Id



Гуру


Сообщений всего: 2397
Дата рег-ции: Окт. 2012  



Хорошую ссылку mihail привел! Но там говорится и объясняется работа с небольшим объемом ОП. Тогда действительно появляется опасность встречи стековой области с программной. Просто надо это предвидеть при выборе нужного МК.
 
 Top
elmot Post Id



Гуру


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



Прочел статейку по диагонали и понял, что мое предубеждение против AVR вполне оправданно. Устаревшая архитектура, куча костылей, через которые проходили всякие Intel 8080 еще лет 30 назад. Кроме массовой популярности, у этог проца в общем-то нет плюсов.
 
 Top
Страниц (1): [1]
« Программирование микроконтроллеров »


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





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