roboforum.ru

Технический форум по робототехнике.
Текущее время: 22 май 2025, 06:58

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: 6 каналов ШИМ на ATMega128.
СообщениеДобавлено: 11 янв 2011, 15:01 
Не в сети

Зарегистрирован: 11 янв 2011, 14:24
Сообщения: 7
Задача: запустить 6 каналов ШИМ АППАРАТНО! (а не программно с прерываниями, потому что в моём случае МК слишком загружен другими делами). Речь идёт о ATMega128. Самое странное то что в симуляции компилятора AVR Studio всё работает. Протеус тоже одобряет. А на деле (на реальном железе) работают только 2 ШИМ-а из 6. :O: Ножки НЕ горелые, проверял несколько раз. Тестовый код программы прозрачнее льда:
;какие надо ножки делаем выходами....(эт понятно)
; ВКЛЮЧАЕМ НЕБХОДИМЫЕ УСТРОЙСТВА
; 3 канала ШИМ, на таймере 3
ldi r16,0x7F
sts OCR3AL,r16 ;записать значение 0x007F в число A
ldi r16,0x00
sts OCR3BH,r16
ldi r16,0x7F
sts OCR3BL,r16 ;записать значение 0x007F в число B
ldi r16,0x00
sts OCR3CH,r16
ldi r16,0x7F
sts OCR3CL,r16 ;записать значение 0x007F в число C
ldi r16,0b01010101
sts TCCR3A,r16 ;работает все каналы, 8-разрядный ШИМ
ldi r16,0b00001001
sts TCCR3B,r16 ;частота работы счётчика f/1, ускоренный ШИМ
; 3 канала ШИМ, на таймере 1
ldi temp,0x00
out OCR1AH,temp
ldi temp,0x7F
out OCR1AL,temp ;записать значение 0x007F в число A
ldi temp,0x00
out OCR1BH,temp
ldi temp,0x7F
out OCR1BL,temp ;записать значение 0x007F в число B
ldi temp,0x00
sts OCR1CH,temp
ldi temp,0x7F
sts OCR1CL,temp ;записать значение 0x000F в число C
ldi r16,0b01010101
out TCCR1A,r16 ;работает все каналы, 8-разрядный ШИМ
ldi r16,0b00001001
out TCCR1B,r16 ;частота работы счётчика f/1, ускоренный ШИМ
... Дальше идёт основная программа

Зашиваю....и что получаю:
ШИМ_1А - работает
ШИМ_1В - работает
ШИМ_1С - НЕ работает
ШИМ_3А - НЕ работает
ШИМ_3В - НЕ работает
ШИМ_3С - НЕ работает

Как вы можете заметить, собака зарыта под командой STS. С командами OUT прокатывает. Как обойти эту проблему мне совершенно не понятно. Может кто спотыкался на таких камнях.
Перед тем как создать тему, я хорошенько погуглил: в далёком 2005-м у одного чела была такая же неувязочка, но его проигнорили. Вообщем выслушаю любые предложения. Заранее спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 6 каналов ШИМ на ATMega128.
СообщениеДобавлено: 11 янв 2011, 15:36 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Сделать тоже на Си в CVAVR или WinAVR и посмотреть АСМ код. Научиться у разработчиков компилеров :D Ножки ШИМ надо назначить выходами и это не должен быть включеный JTAG.

_________________
Читайте !


Последний раз редактировалось avr123.nm.ru 11 янв 2011, 15:40, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 6 каналов ШИМ на ATMega128.
СообщениеДобавлено: 11 янв 2011, 15:39 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2005, 12:03
Сообщения: 3340
Откуда: Литва
прог. языки: asm
Не помню когда, но встречал подобную проблему... Тонкостей проблемы не помню (за давностью), но запомнил решение: разделил РОН, т.е. записывал в разные регистры.
ladvip писал(а):
Вообщем выслушаю любые предложения.

Если не попал - извиняйте, но, как и Вы, косяков не нахожу :oops:

_________________
_________
Sincerely,
Vovan


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 6 каналов ШИМ на ATMega128.
СообщениеДобавлено: 11 янв 2011, 16:25 
У меня как-то было чёрти что если писать в старшие и младшие регистры раздельно. Но тут вероятней всего JTAG. Если он как раз на этих портах, то 100%.


Вернуться к началу
  
 
 Заголовок сообщения: Re: 6 каналов ШИМ на ATMega128.
СообщениеДобавлено: 11 янв 2011, 17:07 
Не в сети
Аватара пользователя

Зарегистрирован: 01 июл 2009, 08:59
Сообщения: 2254
Откуда: Екатеринбург
прог. языки: асемблер AVR
К сожалению, это не джитаг :( .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 6 каналов ШИМ на ATMega128.
СообщениеДобавлено: 11 янв 2011, 17:34 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Вы их выходами назначили ?

Приложите прожект в Студии PROTEUS

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 6 каналов ШИМ на ATMega128.
СообщениеДобавлено: 11 янв 2011, 18:10 
Не в сети
Аватара пользователя

Зарегистрирован: 05 окт 2005, 12:03
Сообщения: 3340
Откуда: Литва
прог. языки: asm
avr123.nm.ru: в первом посте читаем
ladvip писал(а):
;какие надо ножки делаем выходами....(эт понятно)

_________________
_________
Sincerely,
Vovan


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 6 каналов ШИМ на ATMega128.
СообщениеДобавлено: 11 янв 2011, 20:53 
Не в сети

Зарегистрирован: 23 сен 2010, 00:07
Сообщения: 6
Вообще, надо сначала писать в старший байт, потом в младший. Хотя тут наверное все равно, так как значения везде одинаковые пишутся.
Я бы на вашем месте попробывал что-то типа такого:
ldi r16,0x00
ldi r17,0x7F
sts OCR3AH,r16
sts OCR3AL,r17
sts OCR3BL,r17
sts OCR3СL,r17
но не утверждаю что это поможет


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 6 каналов ШИМ на ATMega128.
СообщениеДобавлено: 11 янв 2011, 20:55 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
А я бы глянул в листинг ассемблера - какие адреса сгенерились в командах out и sts? Вообще, как аврстудийный ассемблер умеет понимать что sts OCR1AL, r16 это sts $4B, r16, а out OCR1AL, r16 это out $2B, r16? Может эти имена можно использовать только в out, а в sts надо еще двадцатку как-нить ручками или макросом добавлять?

А вообще ИМХО забросить этот асм куда подальше, написать вместо это 10 строчек на С и не задумываться, что там потом получится, out или sts...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 6 каналов ШИМ на ATMega128.
СообщениеДобавлено: 11 янв 2011, 20:59 
Не в сети

Зарегистрирован: 11 янв 2011, 14:24
Сообщения: 7
JTAG не оказывает влияния. Косвенная запись также не оправдала надежд. Через пару часиков скину весь проект с протеусом вдогонку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 6 каналов ШИМ на ATMega128.
СообщениеДобавлено: 11 янв 2011, 21:00 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
boez писал(а):
Вообще, как аврстудийный ассемблер умеет понимать что sts OCR1AL, r16 это sts $4B, r16, а out OCR1AL, r16 это out $2B, r16?

+1 никак


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 6 каналов ШИМ на ATMega128.
СообщениеДобавлено: 11 янв 2011, 21:41 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Ааа, вон они там какую засаду придумали:

Код:
.equ   OCR3AL   = 0x86   ; MEMORY MAPPED
.equ   OCR3AH   = 0x87   ; MEMORY MAPPED
.equ   OCR3BL   = 0x84   ; MEMORY MAPPED
.equ   OCR3BH   = 0x85   ; MEMORY MAPPED
.equ   OCR3CL   = 0x82   ; MEMORY MAPPED
.equ   OCR3CH   = 0x83   ; MEMORY MAPPED
...
.equ   OCR1AL   = 0x2a
.equ   OCR1AH   = 0x2b
.equ   OCR1BL   = 0x28
.equ   OCR1BH   = 0x29


То есть юзер обязан писать out для регистров, попадающих в IO Space, и sts для не попадающих. Тогда нифига непонятно, что не так, ну кроме конечно порядка записи - обязательно нужно старший, потом младший.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 6 каналов ШИМ на ATMega128.
СообщениеДобавлено: 11 янв 2011, 21:52 
Не в сети

Зарегистрирован: 11 янв 2011, 14:24
Сообщения: 7
Проблема решена (или задача)!! Нужно просто убрать галку в понипрог: фьюс совместимости с ATMega103. После чего вышеуказанный код оживит ножки камня.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 6 каналов ШИМ на ATMega128.
СообщениеДобавлено: 11 янв 2011, 22:31 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Ааа, точно, сам 2 раза на это натыкался, хотя и не с таймером, а с другими различиями.

Так что - вот два обязательных действия над фьюзами свежекупленной меги128: снять совместимость с м103 и выключить jtag (если нужна вторая половина порта F)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 6 каналов ШИМ на ATMega128.
СообщениеДобавлено: 11 янв 2011, 22:57 
Не в сети

Зарегистрирован: 11 янв 2011, 14:24
Сообщения: 7
Кидаю вам исходник (asm для AVR Studio) с протеуснёй в комплекте. И ещё раз, всем спасиба!


Вложения:
Комментарий к файлу: проект
m128_pwm тест 6 каналов ШИМ.rar [48.26 КиБ]
Скачиваний: 0
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO