Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.74/23: Рейтинг темы: голосов - 23, средняя оценка - 4.74
worizzzok
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 138
1

Никак не разберусь с ШИМ на attiny13

11.01.2013, 04:09. Просмотров 4228. Ответов 7
Метки нет (Все метки)

Здравствуйте.
НАчал разбираться с шим, прочитал несколько раз статью. В целом понятно, но там реч идет о ATmega16, у меня же attiny13.
Везде пишут, что можно изменить значение регистра сравнения, однако, у меня не получается. А именно:

Код
.def tmpa   =r16
ldi tmpa,0b00111111
out DDRb,tmpa
out portb, tmpa

ldi tmpa,0b10000011
out tccr0a, tmpa
;-------------------------------------
ldi tmpa, 0x01
out tccr0b,tmpa
ldi tmpa, 0x02
out timsk0, tmpa
ldi tmpa, 0x03
out ocr0a, tmpa
sei
Почему-то, при выполнении куска
Код
ldi tmpa, 0x03
out ocr0a, tmpa
в регистре ни один бит не меняется, а если принудительно выставить руками, то при следующем проходе он снова очищается.
В какой момент нужно изменять значение регистра и, может быть, я как-то не так это делаю?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2013, 04:09
Ответы с готовыми решениями:

Attiny13. Реализация ШИМ
Добрый вечер уважаемые !! В этой теме прошу о помощи программистовAttiny13/ ...

Сбой ШИМ на ATTiny13
Как оно мыслилось: МК выдает ШИМ сигнал с заполнением 10-20-50-100%....

Не получается сделать 36кГц шим на ATtiny13
Добрый день. Стыдно, но уже 2 день ломаю голову. Нужно с тиньки выдать сигнал...

Как отладить ШИМ на ATTiny13 эмулятором?
Здравствуйте, Мне необходимо отладить прошивку, которая выводит сигнал на...

Attiny13+3х канальный програмный шим по сигналу с 3х портов
Доброе утро всем. Пытаюсь повторить сейчас супер-пупер мега таймер...

7
domis
0 / 0 / 0
Регистрация: 04.09.2012
Сообщений: 82
11.01.2013, 16:14 2
Код на корректность не проверял, но биты меняются.

0
BorMys
0 / 0 / 0
Регистрация: 15.01.2012
Сообщений: 100
11.01.2013, 16:39 3
Мыслите вы в правильном направлении,но если это весь код то что то маловато.
Сделали инициализацию ШИМ
Код
ldi tmpa,0b00111111
out DDRb,tmpa
out portb, tmpa

ldi tmpa,0b10000011
out tccr0a, tmpa
ldi tmpa, 0x01
out tccr0b,tmpa
Разрешили прерывание по переполнению, но не понятно где таблица прерываний и нужно ли вам это?
Код
ldi tmpa, 0x02
out timsk0, tmpa
Цитата Сообщение от worizzzok
Почему-то, при выполнении куска в регистре ни один бит не меняется
Код
ldi tmpa, 0x03
out ocr0a, tmpa
Судя по коду он и не должен менятся (то есть он меняется но только один раз) вы грузите туда 0х03 и не изменяете дальше, при первом проходе регистр OCR0A 0x00 при последующих 0х03. Далее всё начинается сначала,а в OCR0A уже загружено 0х03
Здесь всё расписано подробно см. код.

0
worizzzok
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 138
11.01.2013, 20:53 4
Это кусок кода, остального пока толком и нет. Вектора прерываний есть, но пока только по переполнению и ресет.
Все, я понял в чем дело, все было правильно, просто установка 0x03 происходит когда в счетчике уже большее число. После полного прохода до 255 и сброса, все работает как надо.

Однако, возник еще один вопрос - при таком коде, как указано выше, после полного прохода и сброса счетчика, он начинает не с 0x01, а с 0х0А, с чем это может быть связано?
0
BorMys
0 / 0 / 0
Регистрация: 15.01.2012
Сообщений: 100
11.01.2013, 21:42 5
Цитата Сообщение от worizzzok
Это кусок кода, остального пока толком и нет. Вектора прерываний есть, но пока только по переполнению и ресет.
Все, я понял в чем дело, все было правильно, просто установка 0x03 происходит когда в счетчике уже большее число. После полного прохода до 255 и сброса, все работает как надо.

Однако, возник еще один вопрос - при таком коде, как указано выше, после полного прохода и сброса счетчика, он начинает не с 0x01, а с 0х0А, с чем это может быть связано?
Каков вопрос таков ответ! У вас ещё вектора прерываний есть!
Не махайте руками в воздухе, в каком коде указанном выше, конкретнее. У меня ваш код (кусок кода) принимает только 2 значения 0x03 и 0x00 и связано это с тем, что не видно объективной картины. Задали кусок вопроса, получили кусок ответа, остального пока толком и нет.
0
worizzzok
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 138
12.01.2013, 00:12 6
Дело в том, что есть только это:
Код
 include "tn13def.yms"
.def tmpa   =r16
.cseg

.org 0
rjmp   _risit
.ORG $009
rjmp   TIM0_OVF
;---------
_risit:   tdyr16,ROMEND
out SPL,r16
ldi tmpa,0b00110000
out DDRb,tmpa
out portb, tmpa

ldi tmpa,0b10000011
out tccr0a, tmpa
ldi tmpa, 0x01
out tccr0b,tmpa

ldi tmpa, 0x03
out ocr0a, tmpa

ldi tmpa, 0x02
out timsk0, tmpa
sei

_cycle:
rjmp   _cycle

TIM0_OVF:
nop
nop
TIM0_OVF_end:   reti
Никакого техзадания нет - я пытаюсь запустить шим в холостую, или, например, помигать диодом и посмотреть, как, что и при каких конфигах будет работать.
В принципе, изначально идея была использовать тиньку вместо сгоревшего шим-контроллера в схеме понижающего dc-dc преобразователя. Скорее ради интереса с целью повышения образованности, нежели по большой необходимости.
Однако, для этого мне надо разобраться как его программировать, что я и пытаюсь сделать. Правда пока с переменным успехом, как вы можете заметить :)
0
BorMys
0 / 0 / 0
Регистрация: 15.01.2012
Сообщений: 100
12.01.2013, 02:28 7
Вы крутитесь в пустом цикле!!!
Код
Код
 include "tn13def.yms"
.def tmpa   =r16
.cseg

.org 0
rjmp   _risit
.ORG $009
rjmp   TIM0_OVF
;---------
_risit:   tdyr16,ROMEND   ;Инициализация стека
out SPL,r16
ldi tmpa,0b00110000   ;Инициализация портов
out DDRb,tmpa
out portb, tmpa

ldi tmpa,0b10000011    ;Инициализация ШИМ
out tccr0a, tmpa
ldi tmpa, 0x01
out tccr0b,tmpa

ldi tmpa, 0x03             ;Грузим  0х03 это начальное значение
out ocr0a, tmpa

ldi tmpa, 0x02
out timsk0, tmpa
sei

_cycle:     ;Попадаем в цикл и нихрена у нас не получается! Крутимся здесь вечно не изменяя ничего
rjmp   _cycle

TIM0_OVF:
nop
nop
TIM0_OVF_end:   reti
В цикле нужно изменять значение регистра хотя бы так
Код цикла
Код
_cycle:
cli
out ocr0a,tmpa
yms tmpa              ; увеличиваем значение (можно уменьшать)
sei
;( сюда вставить задержку иначе всё происходит очень быстро)
rjmp   _cycle
0
worizzzok
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 138
12.01.2013, 05:10 8
Понятно вроде. Спасибо :)
0
12.01.2013, 05:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2013, 05:10

ATtiny13. PWM (ШИМ)
прошу знающих пояснить принцип управления аппаратным ШИМом, а именно: 1. как в...

ИК-пульт на Attiny13
Короче делаю ИК-пульт на тиньке 13. Код отлажевал на пинборде атмега16, там все...

ATTiny13 - не "выключается"
Всем привет. Подскажите, плз, совсем сломал себе голову Есть такая простая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru