Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ШИМ в ATmega 128
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
MMP
В Apllication Builder инециализирую Таймер 1, для меги 128 выбираю режим PWM 10-bit fast. Пытаюсь отсимулить в VMLAB, подключив к осцилографу порты PB5, PB6, PB7 b ничего не вижу. Вопрос в том надо ли что-то еще писать дополнительно или этот режим должен заработать???
KRS
А вы исходник на С или asm получившийся покажите
MMP
Примерно так:
//ICC-AVR application builder : 07.11.2005 14:49:30
// Target : M128
// Crystal: 16.000Mhz

#include <iom128v.h>
#include <macros.h>

void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0xE0;
DDRB = 0xE0;
PORTC = 0x00; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
PORTE = 0x00;
DDRE = 0x00;
PORTF = 0x00;
DDRF = 0x00;
PORTG = 0x00;
DDRG = 0x00;
}

//TIMER1 initialize - prescale:Stop
// WGM: 7) PWM 10bit fast, TOP=0x03FF
// desired value: 16KHz
// actual value: out of range
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xFC; //setup
TCNT1L = 0x01;
OCR1AH = 0x03;
OCR1AL = 0xFF;
OCR1BH = 0x03;
OCR1BL = 0xFF;
OCR1CH = 0x03;
OCR1CL = 0xFF;
ICR1H = 0x03;
ICR1L = 0xFF;
TCCR1A = 0x03;
TCCR1B = 0x08; //start Timer
}

//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
XDIV = 0x00; //xtal divider
XMCRA = 0x00; //external memory
port_init();
timer1_init();

MCUCR = 0x00;
EICRA = 0x00; //extended ext ints
EICRB = 0x00; //extended ext ints
EIMSK = 0x00;
TIMSK = 0x00; //timer interrupt sources
ETIMSK = 0x00; //extended timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
KRS
Так там ноги к таймеру не подключены
старшие биты TCCR1A по два на каждую ногу
00 отключена а у вас как раз все 0
MMP
Спасибо подключил, только опять глюк!
OCR1A, OCR1B генерят отлично, а OCR1C не выдает сигнала, пробовал и на третьем таймере. Бит 7 TCCR1A установлен в 1. В чем может быть проблемма?
И еще вопрос можно ли программно изменять частоту ШИМ, ну скажем например с OCR1A=0х00 до OCR1A=0хFF. Пишу цикл чего-то не выходит.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.