Например TDA7294

Форум РадиоКот • Просмотр темы - Регулятор скважности на Atmega8
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт фев 10, 2026 21:29:08

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


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



Начать новую тему Ответить на тему  [ Сообщений: 26 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Регулятор скважности на Atmega8
СообщениеДобавлено: Пн янв 19, 2026 20:38:14 
Родился

Зарегистрирован: Ср авг 28, 2024 12:50:05
Сообщений: 8
Рейтинг сообщения: 0
Запрограммировал Atmega8 на регулирование скважности используя два прерывания 1 по старту от PD2 и 2 от таймера Т2 .
скважность меняется от 0 до 255 и обратно до 0.
И еще меряет напряжение на PC0 и PC1 и отображает на 1602.
Проблема в том идут сбои вместо плавного изменения скважности сигнал сжимается или расширяется вдруг сплошная линия потом восстанавливается и так 5 или 6 раз.
Думал протеус не справляется запрограммировал Atmega8 в живую тоже самое.
Что не так протеусе пробовал Atmega16 тоже самое.

Может я слишком многого от этой серии хочу?
Подскажите.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Пн янв 19, 2026 21:46:53 
Держит паяльник хвостом

Карма: 2
Рейтинг сообщений: 120
Зарегистрирован: Пт ноя 22, 2024 14:08:43
Сообщений: 996
Рейтинг сообщения: 0
раз сам писал, то у себя и ищи....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Вт янв 20, 2026 11:21:58 
Первый раз сказал Мяу!

Зарегистрирован: Пн дек 15, 2025 13:29:04
Сообщений: 23
Рейтинг сообщения: 0
В вопросе практически отсутствует информация, оперившись на которую можно было бы что-то подсказать.
Самый лучший вариант - скачайте даташит именно на ваш MCU. И очень-очень внимательно посмотрите что именно вы записываете в регистры конфигурации таймеров.
Поймите, что именно означает каждый бит и какие сочетания битов регистра на что влияют.

Добавлено after 45 seconds:
Две самые частые ошибки в таймерах - использование кода от другого MCU и банальная невнимательность.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Ср янв 21, 2026 16:27:10 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8958
Откуда: .ru
Рейтинг сообщения: 0
Запрограммировал Atmega8 на регулирование скважности используя два прерывания 1 по старту от PD2 и 2 от таймера Т2 .

зачем два таймера ?
:dont_know:
всё делается на одном таймере...
:roll:


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Ср янв 21, 2026 19:46:03 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2931
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18943
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
roman.com писал(а):
зачем два таймера ?
это ещё "семечки". а вот для создания мультивибратора требуется взять даже два МК...

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Ср янв 21, 2026 21:49:49 
Родился

Зарегистрирован: Ср авг 28, 2024 12:50:05
Сообщений: 8
Рейтинг сообщения: 0
Таймер Т2 один это прерываний двя
убрал всё ситуация не изменилась


Вложения:
Комментарий к файлу: поправить в свойствах Atmega8 путь к hex файлу
Reguliator Ckvajnocty

Регулятор скважности.7z [15.44 KiB]
Скачиваний: 59
Комментарий к файлу: проект Atmel Studio 6.2
Reguliator Ckvajnocty.7z [13.37 KiB]
Скачиваний: 60


Последний раз редактировалось vda67 Ср янв 21, 2026 22:21:04, всего редактировалось 7 раз(а).
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Ср янв 21, 2026 21:53:32 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1502
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15445
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
:oops:


Последний раз редактировалось BOB51 Ср янв 21, 2026 22:25:22, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Ср янв 21, 2026 22:06:53 
Родился

Зарегистрирован: Ср авг 28, 2024 12:50:05
Сообщений: 8
Рейтинг сообщения: 0
Есть
три таймера Т0, Т1 и Т2


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Чт янв 22, 2026 23:49:07 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8958
Откуда: .ru
Рейтинг сообщения: 0
Atmel Studio... никада не работал с ней))
:roll:
зачем весь проект... достаточно одного исходника...
Вложение:
Reguliator Ckvajnocty.c [3.58 KiB]
Скачиваний: 65

:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Пт янв 23, 2026 12:35:09 
Это не хвост, это антенна

Карма: 12
Рейтинг сообщений: 136
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1341
Рейтинг сообщения: 0
Достаточно названия файла. Дальше можно не смотреть. Наверняка быдлокод на суржике.(


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Пт янв 23, 2026 16:55:05 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8958
Откуда: .ru
Рейтинг сообщения: 0
нет.
названия мало. надо видеть что внутри.
а внутри у нас вот что...
Спойлер
Код:
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>// подключаем библиотеку

void init_interrupt(char YROVEN) // настройка прерывания
{
   GICR|=(1<<INT0); // включаем прерывания
   MCUCR|=((YROVEN & 1)<<ISC00)|((YROVEN >>1 & 1)<<ISC01);//устанавливаем тип срабатывания
   // 1-Любое изменение уровня на выводе INT0, 2-Нисходящий фронт сигнала (смена 1 на 0) на выводе INT0
   //3-Восходящий фронт сигнала (смена 0 на 1) на выводе INT0, 0- Нижний уровень на выводе INT0
}
void int_StopTimerT2(void)
{
   TCCR2 = 0b00000000;
}

void int_TimerT2(char delitel, char rejim_taim,char rejim_OC2,char rejim_foc2)
// Настройка таймера

{
   TCNT2 = 0x00;//обнуляем счетчик таймера Т2
   TCCR2 = 0x00; // Сброс регистра конфигурации таймера Т2
   TCCR2|=((delitel >>2 & 1)<<CS22)|((delitel >>1 & 1)<<CS21)|((delitel & 1)<<CS20)
   // Установка делителя: 0-Источника тактирования нет таймер остановлен,
   // 1-Тактовая частота МК, 2-Тактовая частота МК/8, 3-тактовая частота МК/32,
   // 4-Тактовая частота МК/64, 5-Тактовая частота МК/128, 6-Тактовая частота МК/256,
   // 7-Тактовая частота МК/1024.
   |((rejim_taim >>1 & 1)<<WGM21)|((rejim_taim & 1)<<WGM20)//Режим работы таймера/счётчика
   // 0-Нормальный режим счётчика, 1-ШИМ с коррекцией фазы,
   //2- Сброс таймера при совпадении регистров OCR2 и TCNT2 (CTC) и 3-Быстрая ШИМ (Fast PWM).
   |((rejim_OC2 >>1 & 1)<<COM21)|((rejim_OC2 & 1)<<COM20)
   // Режим работы вывода OC2: 0-Вывод ОС2 отключён от таймера/счётчика,
   //1- Состояние вывода меняется на противоположное при совпадении TCNT2 и OCR2
   //(только в режимах Normal и CTC)
   //2-На OC2 устанавливается "0" при совпадении TCNT2 и OCR2
   // и устанавливается "1" при сбросе счётчика,
   //3-На OC2 устанавливается "1" при совпадении TCNT2 и OCR2
   //и устанавливается "0" при сбросе счётчика.
   |((rejim_foc2 & 1)<<FOC2);//устанавливаем тип срабатывания
   // предназначен для принудительной установки логического уровня на выходе OC2.
   // Он работает только для режимов Normal и CTC. При установке бита FOC2 в единицу
   //состояние выхода меняется в соответствии со значениями битов COM21 и COM20.
}
void int_RazPrerT2(char Kakoe)//разрешения прерываний
{
   TIMSK &=0b00111111;// сброс прерываний таймера Т2
   TIMSK|=((Kakoe >>1 & 1)<<OCIE2)|((Kakoe & 1)<<TOIE2);
   //0-Все прерывания запрещены, 1-Разрешает прерывание по событию переполнение,
   //2-Разрешает прерывание по событию совпадение, 3-Разрешает прерывания по обоим событиям
   // sei();// Разрешение работу прерываниям
}


void int_pcb(void)
{
   DDRD = 0b11110011;//PD0 PD1  PD4 PD5 PD6 PD7  — настраиваем ножки на выход PD2 PD3 - Вход
   PORTD = 0b00001100;//РD2 PD3 — подключаем подтягивающие резисторы
   DDRC = 0b00110000;   // Конфигурируем вывод порта PC0-PC3 как вход и PC4 PC5 как выход
}

ISR(INT0_vect)// прерывание по ножке PD2
{
   PORTC &= ~(1 << PC4);// Устанавливаем 0 на его выходе на линии 4 порта C
   _delay_ms(0.6);
   int_TimerT2(6,2,0,0);//запукаем таймер Т2
   OCR2 -=1;
   
}

ISR (TIMER2_COMP_vect) // Если произошло прерывание по совпадению таймера Т2
{
   
   if(OCR2 <1)
   {
      PORTC &= ~(1 << PC4);// Устанавливаем 0 на его выходе на линии 4 порта C
   }
   else
   {
      PORTC |=_BV (PC4); //Устанавливаем 1 на  выходе PC4
   }
}






int main(void)
{   
   int_pcb(); //Настройка портов
   sei();// Разрешение работу прерываниям
   init_interrupt(3); // Включение прерывания по входу PD2
   int_RazPrerT2(2);//разрешения прерываний от таймера Т2

 
    while(1)
    {
     _delay_ms(50); // ждем 0.005 сек.

    }
}

:roll:
очень интересно...
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Пт янв 23, 2026 18:29:54 
Это не хвост, это антенна

Карма: 12
Рейтинг сообщений: 136
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1341
Рейтинг сообщения: 0
Воот. "void int_RazPrerT2(char Kakoe)//разрешения прерываний" разве не достаточно. О чём ЕЩЁ можно говорить!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Пт янв 23, 2026 19:48:25 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1502
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15445
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Ну ладно, таймерТ2 я как то не досмотрел (старческий невнимательность)... Обычно до него без особой надобности не доходило...
Но сама постановка задачи чей то никак не соображаю - автор измерять скважность по прерываниям собирался или чего там вылавливать то?...
Или регулировать выходной ШИМ сигнал в соответствии с напряжением, снимаемым с переменного резистора?
Или еще какой задачей озаботился, но сформулировать не сумел?
:shock:
Скорее всего от такого подхода и хаос результата...
:roll:
Глянул повнимательнее в исходник...
Это "тонкий троллинг" автора или .... ??
как сие компилятор без матюков вообще пропустить смог?
или в СИ допускается разрыв строки на несколько автономных кусков через пакеты однострочных комментариев?
:dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Сб янв 24, 2026 14:15:08 
Это не хвост, это антенна

Карма: 12
Рейтинг сообщений: 136
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1341
Рейтинг сообщения: 0
BOB, где очки?) (смайлик!)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Сб янв 24, 2026 15:59:29 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1502
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15445
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Я в СИ начинающий (и то из-под адурино) - может чего таки не понимаю...
Да и атмеги 8е несколько не мои базовые (детально не разбирались), могу чего и упустить...
:roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Сб янв 24, 2026 17:29:32 
Друг Кота

Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8958
Откуда: .ru
Рейтинг сообщения: 0
в СИ допускается разрыв строки на несколько автономных кусков через пакеты однострочных комментариев?

ну это легко проверить))
:tea:

Изображение

да.
в СИ допускается разрыв строки на несколько автономных кусков через пакеты однострочных комментариев.
:tea:


Вложения:
Screenshot_1.jpg [67.86 KiB]
Скачиваний: 214
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Пн янв 26, 2026 14:21:56 
Родился

Зарегистрирован: Ср авг 28, 2024 12:50:05
Сообщений: 8
Рейтинг сообщения: 0
Проблема оказалась в _delay_ms(0.6);
Убрал пошло равномерно но как задержать реакцию на входной сигнал?


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Пн янв 26, 2026 20:45:46 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 889
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6269
Откуда: Minsk
Рейтинг сообщения: 0
Написать функцию задержки самостоятельно, На асме, через прерывание.

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Пн янв 26, 2026 21:40:36 
Друг Кота
Аватар пользователя

Карма: 96
Рейтинг сообщений: 1502
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15445
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Спойлер
Код:
ISR(INT0_vect)// прерывание по ножке PD2
{
   PORTC &= ~(1 << PC4);// Устанавливаем 0 на его выходе на линии 4 порта C
   _delay_ms(0.6);
   int_TimerT2(6,2,0,0);//запукаем таймер Т2
   OCR2 -=1;
   
}

даже если убрать задержку (внутри обработчика прерывания оная!!!)...
на кой ... делать в каждом прерывании инициализацию режимов таймера то?
При том,что в начале ее вообще нет ( да и с разрешением/запретом прерываний бардак - обычно их сначала запретить надо, а уж после всякоманипуляций разрешать)
Спойлер
Код:
int main(void)
{   
   int_pcb(); //Настройка портов
   sei();// Разрешение работу прерываниям
   init_interrupt(3); // Включение прерывания по входу PD2
   int_RazPrerT2(2);//разрешения прерываний от таймера Т2

 
    while(1)

...........

:tea:
Сначала хотя бы схему да грамотное словесное описание задачи надо изложить.
Тогда возможно чего реально и самому вопрошающему прояснится.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Регулятор скважности на Atmega8
СообщениеДобавлено: Пн янв 26, 2026 22:34:00 
Родился

Зарегистрирован: Ср авг 28, 2024 12:50:05
Сообщений: 8
Рейтинг сообщения: 0
Схема большая меряет два напряжения на PC0 PC1 высвечивает их на ЛСД 1602 в зависимости от PC0 выставляет значение OCR2 для таймера Т2 и включает PC4 и запуск таймера по входу PD2.
Так вот значение OCR2 меняется от 255 до 0 с дискретностью 1. Проблема была в плавности изменения на PC4 хотя значение OCR2 меняется плавно а на
PC4 скачки.
На другом форуме подсказали задержку _delay_ms(0.6); нельзя ставить проверил точно мешает а она мне нужна. через FOR попробовал задержать скачки возобновились.


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

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


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

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


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

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


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