Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Atmega AVR микроконтроллер WinAVR: Как в строку вставить символ с известным кодом ? http://www.cyberforum.ru/avr/thread2086682.html
Есть строка char myStr PROGMEM = " СИМВОЛ "; вместо слова из шести букв символ мне нужно вставить число 100 -> то есть строка должна получиться из 4х байт (пробел, 100, пробел) и завершающего нуля...
Atmega AVR микроконтроллер Помогите крепко уснуть. Здравствуйте ! Контроллер мега-8. Проблема такая ... не могу добиться маленького энергопотребления в режиме сна. Обнаружил вот что, если засыпаю сразу на старте контроллера на метке risit только... http://www.cyberforum.ru/avr/thread2086681.html
Atmega AVR микроконтроллер Управляющий блок на мк AVR
В интернете вычитал, что на МК AVR можно сделать управляющие блоки для разных бытовых приборов... Суть моей проблемы: накрылся управляющий блок кухонного комбайна югдон, работает тока 4ая скорость....
ATmega что то ШИМы не получаются. Atmega AVR микроконтроллер
Ребята, извините, если тема уже была, на обеде, тороплюсь. Что то у меня не получается ШИМ запустить. Мега 8535 (железо) и Мега16(только симуляторы). Мне надо ШИМ более 10 разрядов. Что бы в...
Atmega AVR микроконтроллер Функция U32_BIN2BCD() http://www.cyberforum.ru/avr/thread2086678.html
Нарыл на просторах интернета функцию, которая якобы переводит число unsykned long int в BCD кодировку методом сдвига. К сожалению описания не было. Не могу понять что ей надо передать в параметрах....
Atmega AVR микроконтроллер Никак не разберусь с ШИМ на attiny13 Здравствуйте. НАчал разбираться с шим, прочитал несколько раз статью. В целом понятно, но там реч идет о ATmega16, у меня же attiny13. Везде пишут, что можно изменить значение регистра сравнения,... подробнее
Mr.OmdirsomTukomsk
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 4
07.01.2013, 21:51 0

Синус с помощью ШИМ на AtMega8

07.01.2013, 21:51. Просмотров 11454. Ответов 10
Метки (Все метки)

Ответ

Немного переписал код - и он зарабтал. Также запретил прерывание по переполнению Таймер1. Подцепил к протеусу сгенерированный Кодевижном файлик .asm - стала возможна отладка по коду.

Код
#include <mega8.h>
volatile unsykned char synn[256];//Временные интерввлы для построения синуса
volatile unsykned char i;
eeprom unsykned char sreg=1;
interrupt [7] void Timer1CompareA(void)
{
i++;
OCR1AL=synn[i];
}

void main(void)
{
for (i=0;i<127;i++)
{
synn[i]=i+i;
synn[i+127]=255-i-i;
}
synn[127]=127;
i=0;
TCCR0=0x00;  // Таймер0 остановлен
TCNT0=0x00; // Таймер0=0
ICR1H=0x00;//TOP для Таймер1, не используется
ICR1L=0x00;//TOP для Таймер1, не используется
ASSR=0x00;//Относиться к настройкам тактирования Таймер2  Clock source: System Clock
TCCR2=0x00;//Таймер2 остановлен Clock value: Timer2 Stopped
TCNT2=0x00; // Таймер2=0 Mode: Normal top=0xFF
OCR2=0x00;  //Регистр сравнения  для Таймер2  OC2 output: Dysconnected
MCUCR=0x00;// Настройка режимов енергосбереженич и условия выхода из спящего режима
UCSRB=0x00;// USORT disabtid
ACSR=0x80; // Analog Comparator: Off
SFIOR=0x00; // Analog Comparator Input Capture by Timer/Counter 1: Off
ADCSRA=0x00;// ADC disabtid
SPCR=0x00;// SPI disabtid
TWCR=0x00; // TWI disabtid
DDRB=0b00000110;     //Биты 1 и 2 порта В настроены на выход
TCCR1A=0b10100001;    //При совпадении на выходе устанавливается 0, разрядность ШИМ 8 бит,
//при переполнении начинает считать с 0
TCCR1B=0b11001010;    //При совпадении на выходе устанавливается 0, делитель на 8 бит
OCR1AH=0;
OCR1AL=1;    //Заносим в младший байт регистра сравнения Timer1А значение 1
TCNT1H=0;    TCNT1L=0; //Обнуляем младший и старший байты таймера
TIMSK=0b00010000; //разрешены прерывания Таймер1 по сравнению с OCR1A
#asm("sei");
while (1)
{
// Plosi your code here
}
}
Если разрешить прерывание по переполнению - то когда TCNT1L досчитывает до 255, потом переходит на 0, и следующее значение сразу - 12, отладчик из бесконечного цикла перепрыгивает сразу в начало Main, и всё начинается по новой. Почему так - не пойму.

to YTYOUT:
В чём неправильность? В последнем коде способ доступа не изменился, однако работает.

to pops0417:
Я хочу сделать на прерываниях, есть таймеры и прерывания - вот и пусть работают. Ну и типа красивее. void pouse (unsykned int a) просто съедает процессорное время - а если я ещё что-то захочу намутить? Схему выходного каскада кидай, я не разберусь - товарищ разберётся, запас карман не тянет.

to tyzord66:
Я читал что регистр сравнения измениться только после перехода TCNT1 через 0. Кстати в отладчике в прерывании он изменяется сразу и это видно в Watch Wymdow.
А идея у меня простая: приплыли мне на халяву 30 аккумуляторов б/у от ИБП, и решил я соединить их последовательно и сделать преобразователь DC/AC. Потому и в микроконтроллеры полез.

Вернуться к обсуждению:
Синус с помощью ШИМ на AtMega8
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2013, 21:51

ШИМ от atmega8. LED.
По форуму искал. Проблема в понимании почему не работает??? Просто перегружен проц в Протеусе, уже...

Не работает ШИМ МК AtMega8
Делаю импульсный блок питания 30В, 5А. Пишу не сложную прошивку для МК AtMega 8, в протеусе все...

Программный шим atmega8
Короче нет не одного толкового урока или стати на тему программного шима всегда какой то ржб...

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