roboforum.ru

Технический форум по робототехнике.

PWM на tiny2313

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

PWM на tiny2313

Сообщение Andruha54 » 03 дек 2013, 11:30

Здравствуйте.
Начал осваивать режим PWM В AVR микроконтроллер tiny2313. Запустить сам режим получилось - микронтроллер-полевик-лампочка, горит как надо. Решил добавить плавное изменение яркости на таймере_1 (PWM на таймере_0) и даже вроде бы работает в симуляторе(AVR Studio), но на устройстве просто горит с начальной предустановкой яркости. Взгляните незамыленным глазом где что упустил или не понял... Код прилагаю (делаю на AVR assembler).
F=8МГц, предделитель на 8.


Код: Выделить всёРазвернуть
.include "tn2313Adef.inc" ; C:\Program Files (x86)\Atmel\AVR Tools\AvrAssembler\Appnotes\tn2313Adef.inc

.def temp=r16
.def temp2=r17



.cseg
.org 0

rjmp RESET ; Reset Handler
nop; rjmp INT0 ; External Interrupt0 Handler
nop; rjmp INT1 ; External Interrupt1 Handler
nop; rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIMER1_COMPA ; Timer1 CompareA Handler
nop; rjmp TIM1_OVF ; Timer1 Overflow Handler
reti ;TIM0_OVF ; Timer0 Overflow Handler
nop; rjmp USART0_RXC ; USART0 RX Complete Handler
nop; rjmp USART0_DRE ; USART0,UDR Empty Handler
nop; rjmp USART0_TXC ; USART0 TX Complete Handler
nop; ANA_COMP ; Analog Comparator Handler
nop; rjmp PCINT0 ; PCINT0 Handler
nop; TIMER1_COMPB ; Timer1 Compare B Handler
reti; TIMER0_COMPA ; Timer0 Compare A Handler
nop; rjmp TIMER0_COMPB ; Timer0 Compare B Handler
nop; rjmp USI_START ; USI Start Handler
nop; rjmp USI_OVERFLOW ; USI Overflow Handler
nop; rjmp EE_READY ; EEPROM Ready Handler
nop; rjmp WDT_OVERFLOW ; Watchdog Overflow Handler
nop; rjmp PCINT1 ; PCINT1 Handler
nop; rjmp PCINT2 ; PCINT2 Handler

;-----------инициализация стека-----------
reset:
ldi temp,ramend
out SPL,temp

;------------инициализация портов----------
ser temp
out ddrd,temp ; порт d на вывод

out ddrb,temp ; порт b на вывод   
ser temp
out portd, temp
out portb, temp
;-------------инициализация таймера---------

ldi temp, 0
out OCR1AH, temp
ldi temp, 50
out OCR1AL, temp ;установка времени инкремента кажд 1 сек (4 и 26=)

ldi temp, 240
out OCR0A, temp ;установка начальной точки

ldi temp, 0b11000011
out TCCR0A, temp ;режим fast pwm WGM

clr temp
out tifr, temp ; сбросить флаги прерываний таймеров

ldi temp, 0b01000001 ; разрешаем прерывания канал А и переполнения T0 и A T1
out TIMSK, temp

ldi temp, 0b00000101 ; пуск таймера1 с делением на 1024,
out TCCR1b, temp
ldi temp, 0b00000011 ; пуск таймера0 с делением на 64
out TCCR0b, temp
sei ;Общее разрешение прерываний

;-------------ПРОГРАММА---------------------

main:

rjmp main

TIMER1_COMPA:

in temp, OCR0A
inc temp
out OCR0A, temp
clr temp
out TCNT1H, temp
out TCNT1L, temp
reti
Andruha54
 
Сообщения: 5
Зарегистрирован: 03 дек 2013, 11:25
Откуда: Пермь
прог. языки: AVR_ASM, Pascal
ФИО: Андрей

Re: PWM на tiny2313

Сообщение רגוזין רומאן » 08 дек 2013, 17:47

Пару дней назад столкнулся с похожей ситуацией на АТмега8. На Таймере1 собран генератор ШИМ. Таймер0 переполняется для других целей. Так вот, если оба прерывания разрешены, то переполнение Таймера0 наступает лишь единожды. Выход нашёл переложив нужды с Тамера0 на Таймер2, благо он там есть.
В вашем случае Таймера2 нет, зато есть второе событие Таймера1 - OCIE1B.
רגוזין רומאן
 

Re: PWM на tiny2313

Сообщение Andruha54 » 09 дек 2013, 21:07

Выяснил, что Таймер1 не запускается, почему понять не могу...
Andruha54
 
Сообщения: 5
Зарегистрирован: 03 дек 2013, 11:25
Откуда: Пермь
прог. языки: AVR_ASM, Pascal
ФИО: Андрей

Re: PWM на tiny2313

Сообщение רגוזין רומאן » 10 дек 2013, 00:03

Поиграйтесь со значениями счётных регистров. Мне удалось завести Таймер0. У Таймера0 число тиков до прерывания должно быть больше числа тиков до прерывания Таймера1.
רגוזין רומאן
 

Re: PWM на tiny2313

Сообщение Andruha54 » 10 дек 2013, 21:26

Попробовал, не помогло.
Andruha54
 
Сообщения: 5
Зарегистрирован: 03 дек 2013, 11:25
Откуда: Пермь
прог. языки: AVR_ASM, Pascal
ФИО: Андрей

Re: PWM на tiny2313

Сообщение avr123.nm.ru » 11 дек 2013, 01:30

проверьте выполняется ли код

ldi temp, 0b00000101 ; пуск таймера1 с делением на 1024,
out TCCR1b, temp

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

Re: PWM на tiny2313

Сообщение Andruha54 » 11 дек 2013, 07:49

Вчера откорректировал программу, чтоб проследить из-за чего не работает T1, Как только выставляю биты wgm от T0 , T1 умирает. Причём не важно что я делаю сначала, пускаю T1 или выставляю режим работы T0/

Добавлено спустя 3 минуты 11 секунд:
avr123.nm.ru писал(а):А луче используйте мастер кода CVAVR и посмотрите листинг на ASM

Буду пробовать.
Andruha54
 
Сообщения: 5
Зарегистрирован: 03 дек 2013, 11:25
Откуда: Пермь
прог. языки: AVR_ASM, Pascal
ФИО: Андрей

Re: PWM на tiny2313

Сообщение Andruha54 » 13 фев 2014, 08:10

Если кому интересно будет. Решил я всё-таки свою проблему. А решилось всё установкой емкости на вывод ШИМ, без неё МК зависал, и выглядело как-будто не работает кусок программы (аппаратный ШИМ есть но не регулируется - программа не отвечает). Не думал я что простая лампочка от гирлянды включенная через полевик может повесить МК.
Andruha54
 
Сообщения: 5
Зарегистрирован: 03 дек 2013, 11:25
Откуда: Пермь
прог. языки: AVR_ASM, Pascal
ФИО: Андрей


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

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

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