Например TDA7294

Форум РадиоКот • Просмотр темы - Не работает ШИМ на ATMEGA168
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 00:45:13

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Не работает ШИМ на ATMEGA168
СообщениеДобавлено: Вт мар 06, 2018 22:32:15 
Встал на лапы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Вс дек 28, 2008 18:07:28
Сообщений: 134
Откуда: Москва
Рейтинг сообщения: 0
Привет, коллеги!
Есть проект на ATMEGA8, ШИМ которого удачного работал. Сейчас появилась другая задумка, взял другой МК, а именно ATMEGA168P, взял кусок кода с ШИМом, поправил регистры и опа, а он не работает. Точнее прерывание по переполнению таймера есть, а вот то что в прерывании находится, выполняться не хочет. Вот весь код, который должен включить RGB светодиод:
Код:

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "type_var.h"
#define RED PORTB1
#define GREEN PORTB2
#define BLUE PORTB3
uint8_t counter=0;
uint8_t lev_red, lev_green, lev_blue;
uint8_t buf_lev_ch1, buf_lev_ch2, buf_lev_ch3;

int main(void)
{
   PORTB = 0x00;
   DDRB=0b00001110; // установка PortB пины 0,1,2 выходы
   TIMSK0 |= (1 << TOIE0); // включить прерывание по переполнению таймера
   TIMSK0 |= (1 << OCIE0A);
   TCCR0B = 0b00000001; // настройка таймера, делитель выкл
   
   sei();               // разрешить прерывания
   
   

   while (1)       
   {
   lev_red=255;lev_green=200;lev_blue=20;   //яркость каждого светодиода в RGB
      
   }
}

ISR (TIMER0_OVF_vect)  //обработка прерывания по переполнению таймера
{
   //PORTB = 0x02;
   
      if (++counter==0) //счетчик перехода таймера через ноль
      {
         buf_lev_ch1=lev_red; //значения длительности ШИМ
         buf_lev_ch2=lev_green;
         buf_lev_ch3=lev_blue;
         PORTB |=(1<<RED)|(1<<GREEN)|(1<<BLUE); //подаем 1 на все каналы
      }
       if (counter==buf_lev_ch1) PORTB&=~(1<<RED); //подаем 0 на канал
       if (counter==buf_lev_ch2) PORTB&=~(1<<GREEN); //по достижении
       if (counter==buf_lev_ch3) PORTB&=~(1<<BLUE); //заданной длительности.
   
}


Если раскомментировать PORTB = 0x02, то светодиод включается, но оставшийся кусок кода не работает, хотя этот же кусок кода в Атмега8 норм работает, а в нём никаких регистров и прочего несовместимого с Атмега168 не вижу


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не работает ШИМ на ATMEGA168
СообщениеДобавлено: Ср мар 07, 2018 08:28:49 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Происходил сброс контроллера.
Таймер не верно инициализирован.
Строку
Код:
TIMSK0 |= (1 << OCIE0A);
удалить.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не работает ШИМ на ATMEGA168
СообщениеДобавлено: Ср мар 07, 2018 10:48:43 
Встал на лапы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Вс дек 28, 2008 18:07:28
Сообщений: 134
Откуда: Москва
Рейтинг сообщения: 0
Цитата:
удалить.

странно, а в коде для Атмега8 данная строка есть и работать не мешает. Вечером проверю в железе, хотя в симуляторе переменная "counter" начала увеличиваться.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Не работает ШИМ на ATMEGA168
СообщениеДобавлено: Ср мар 07, 2018 11:36:20 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Алексей bird писал(а):
странно, а в коде для Атмега8 данная строка есть и работать не мешает.
Этого бита в меги8 физически нет. При компиляции вылетит ошибка.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Не работает ШИМ на ATMEGA168
СообщениеДобавлено: Ср мар 07, 2018 13:25:07 
Встал на лапы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Вс дек 28, 2008 18:07:28
Сообщений: 134
Откуда: Москва
Рейтинг сообщения: 0
Алексей bird писал(а):
странно, а в коде для Атмега8 данная строка есть и работать не мешает.
Этого бита в меги8 физически нет. При компиляции вылетит ошибка.

несовсем так, бит есть, но относится он к таймеру1(четвёртый бит регистра TIMSK), вот я и по не внимательности и не заметил этого, когда переносил код на другой МК


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Не работает ШИМ на ATMEGA168
СообщениеДобавлено: Ср мар 07, 2018 15:39:46 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2808
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18093
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
в Атмега8 нет регистра TIMSK0, а есть просто TIMSK.
и бита OCIE0A в Атмега8 нет.
поэтому обязательно компилятор будет ругаться.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не работает ШИМ на ATMEGA168
СообщениеДобавлено: Ср мар 07, 2018 21:25:29 
Встал на лапы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Вс дек 28, 2008 18:07:28
Сообщений: 134
Откуда: Москва
Рейтинг сообщения: 0
в Атмега8 нет регистра TIMSK0, а есть просто TIMSK.
и бита OCIE0A в Атмега8 нет.
поэтому обязательно компилятор будет ругаться.

а кто-то утверждает, что он там есть?
Написал же в первом и последующий постах, что делал перенос кода на другой МК, из-за невнимательности взял из кода лишний "настроечный бит" регистра. Ведь регистр TIMSK в меге8 он один, сразу на все таймеры.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не работает ШИМ на ATMEGA168
СообщениеДобавлено: Чт мар 08, 2018 10:27:35 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2808
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18093
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
ладно, с регистром и битом разобрались.

если у тебя не используется прерывание по сравнению, его НЕЛЬЗЯ разрешать.
даже если обработчика прерывания нет, сравнение все равно происходит, и делается переход на соответствующий вектор, а дальше делался фактически рестарт всей прошивки.
поэтому строку
TIMSK0 |= (1 << OCIE0A);
следует удалить.
Алексей bird писал(а):
в коде для Атмега8 данная строка есть и работать не мешает.
значит, для АТМеги8 у тебя был обработчик прерывания по сравнению, поэтому строка и не мешала работать...

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y