6 каналов ШИМ на ATMega128.

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

6 каналов ШИМ на ATMega128.

Сообщение ladvip » 11 янв 2011, 15:01

Задача: запустить 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-м у одного чела была такая же неувязочка, но его проигнорили. Вообщем выслушаю любые предложения. Заранее спасибо.
ladvip
 
Сообщения: 7
Зарегистрирован: 11 янв 2011, 14:24

Re: 6 каналов ШИМ на ATMega128.

Сообщение avr123.nm.ru » 11 янв 2011, 15:36

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

Re: 6 каналов ШИМ на ATMega128.

Сообщение Vovan » 11 янв 2011, 15:39

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

Если не попал - извиняйте, но, как и Вы, косяков не нахожу :oops:
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Re: 6 каналов ШИМ на ATMega128.

Сообщение $ilent » 11 янв 2011, 16:25

У меня как-то было чёрти что если писать в старшие и младшие регистры раздельно. Но тут вероятней всего JTAG. Если он как раз на этих портах, то 100%.
$ilent
 

Re: 6 каналов ШИМ на ATMega128.

Сообщение Radist » 11 янв 2011, 17:07

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

Re: 6 каналов ШИМ на ATMega128.

Сообщение avr123.nm.ru » 11 янв 2011, 17:34

Вы их выходами назначили ?

Приложите прожект в Студии PROTEUS
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: 6 каналов ШИМ на ATMega128.

Сообщение Vovan » 11 янв 2011, 18:10

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

Re: 6 каналов ШИМ на ATMega128.

Сообщение mackross » 11 янв 2011, 20:53

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

Re: 6 каналов ШИМ на ATMega128.

Сообщение boez » 11 янв 2011, 20:55

А я бы глянул в листинг ассемблера - какие адреса сгенерились в командах out и sts? Вообще, как аврстудийный ассемблер умеет понимать что sts OCR1AL, r16 это sts $4B, r16, а out OCR1AL, r16 это out $2B, r16? Может эти имена можно использовать только в out, а в sts надо еще двадцатку как-нить ручками или макросом добавлять?

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

Re: 6 каналов ШИМ на ATMega128.

Сообщение ladvip » 11 янв 2011, 20:59

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

Re: 6 каналов ШИМ на ATMega128.

Сообщение Michael_K » 11 янв 2011, 21:00

boez писал(а):Вообще, как аврстудийный ассемблер умеет понимать что sts OCR1AL, r16 это sts $4B, r16, а out OCR1AL, r16 это out $2B, r16?

+1 никак
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: 6 каналов ШИМ на ATMega128.

Сообщение boez » 11 янв 2011, 21:41

Ааа, вон они там какую засаду придумали:

Код: Выделить всё
.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 для не попадающих. Тогда нифига непонятно, что не так, ну кроме конечно порядка записи - обязательно нужно старший, потом младший.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: 6 каналов ШИМ на ATMega128.

Сообщение ladvip » 11 янв 2011, 21:52

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

Re: 6 каналов ШИМ на ATMega128.

Сообщение boez » 11 янв 2011, 22:31

Ааа, точно, сам 2 раза на это натыкался, хотя и не с таймером, а с другими различиями.

Так что - вот два обязательных действия над фьюзами свежекупленной меги128: снять совместимость с м103 и выключить jtag (если нужна вторая половина порта F)
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: 6 каналов ШИМ на ATMega128.

Сообщение ladvip » 11 янв 2011, 22:57

Кидаю вам исходник (asm для AVR Studio) с протеуснёй в комплекте. И ещё раз, всем спасиба!
Вложения
m128_pwm тест 6 каналов ШИМ.rar
проект
(48.26 КиБ) Скачиваний: 0
ladvip
 
Сообщения: 7
Зарегистрирован: 11 янв 2011, 14:24

След.

Вернуться в Микроконтроллеры

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

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