Например TDA7294

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

Текущее время: Вт мар 24, 2026 15:03:36

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


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



Начать новую тему Ответить на тему  [ Сообщений: 48 ]  1, ,  
Автор Сообщение
 Заголовок сообщения: ШИМ на тини13
СообщениеДобавлено: Чт фев 02, 2012 22:16:23 
Встал на лапы

Зарегистрирован: Пт окт 21, 2011 15:05:18
Сообщений: 110
Рейтинг сообщения: 0
Есть идея сделала ночник которым управляет ATtiny13 с помощью ШИМ одна нога мк является выходом (5) для ШИМ и управляет транзисторным ключом который соответственно регулирует яркость свечения 1Вт светодиода
другой порт (например 2) ступенчато регулирует яркость от 0% до 100% другой порт (например 3) регулирует яркость в меньшую сторону еще один порт (6,7) ресет регулировки яркости хорошо было бы регулировалось 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
Прошу помощи в написании программы на Си и если можно то с комментариями так чтобы я этому научился. :)
Спасибо :)


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Чт фев 02, 2012 22:33:13 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 8
Зарегистрирован: Пт июн 20, 2008 09:38:05
Сообщений: 127
Откуда: Харьков
Рейтинг сообщения: 0
1) Открываем даташит на тини13
2) Находим описание работы ШИМ модуля
3) рисуем печатку, собираем
4) пишем программу: инициализируем порты; инициализируем ШИМ модуль; пишем обработчик для кнопочек; передаём данные в соотвествующий регистр.

Мои вопросы:
1) а не много ли 110 люмен для ночника?
2) Светодиод прибор чувствительный к перегреву. Одноватник радиатор требует
3) у вас питание каким напряжением планируется? небось вольт 5 минимум? - спалите светодиод при Коэффициенте заполнения > ~0.7


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Пт фев 03, 2012 04:31:08 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Shapa писал(а):
Мои вопросы:

1) насколько я знаю 1ватт это вроде всего 40 люмен,более производительные слишком дорого стоят

2) правильно,предлагаю снабдить систему еще и ограничителем тока диода.
3) тут я могу сослаться на 2 пункт,все равно больше,чем нужно не возьмет.а можно и все ограничить( ток и напряжение).

_________________
В поисках истины человек развивается.


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Пт фев 03, 2012 07:38:48 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 2
Рейтинг сообщений: 11
Зарегистрирован: Пт май 23, 2008 19:32:22
Сообщений: 2401
Откуда: Россия, Волгоград
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
а еще можно задействовать АЦП и крутилку

_________________
Чем дальше, тем больше становлюсь занудой...
Изображение


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Пт фев 03, 2012 08:47:48 
Нашел транзистор. Понюхал.

Зарегистрирован: Чт май 05, 2011 12:58:32
Сообщений: 176
Откуда: Екатеринбург
Рейтинг сообщения: 0
GP1 писал(а):
а еще можно задействовать АЦП и крутилку

Ага, вы правы. Я сейчас делаю то же самое, только на тини25 +2 крутилки +2 нагрузки: светолента вместо лампы и вентилятор в форточку.
Только на асме.


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Пт фев 03, 2012 14:28:59 
Встал на лапы

Зарегистрирован: Пт окт 21, 2011 15:05:18
Сообщений: 110
Рейтинг сообщения: 0
здесь http://we.easyelectronics.ru/dcoder/upr ... iodom.html
управление 3вт светодиодом давайте переделаєм под етот проект


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Пт фев 03, 2012 19:47:48 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Вот переделал:Не знаю уж что там получится.Не разбирал подробно что там в алгоритме.Компилируется без запинок.
Вложение:
Tiny_led_buttons.rar [23.3 KiB]
Скачиваний: 550

_________________
В поисках истины человек развивается.


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Пт мар 09, 2012 17:05:46 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пн окт 25, 2010 18:01:12
Сообщений: 35
Рейтинг сообщения: 0
Всем привет, прошу помощи, решил на Attiny13 сделать плавную регулировку яркости диода с помощью аппаратного ШИМ.
Пожалуйста укажите на мои ошибки, я вроде как написал программу и протестировал в протеусе, но диод не плавно загорается, а просто моргает. Регулировка осуществляется двумя кнопками.
Вот код:
Код:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Project : Shim_4
Version :
Date    : 10.02.2012
Author  : NeVaDa
Chip type               : ATtiny13
AVR Core Clock frequency: 8,000000 MHz
Memory model            : Tiny
External RAM size       : 0
Data Stack size         : 16
*****************************************************/

#include <tiny13.h>
#include <delay.h>

 interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
}
int i=0; //инициализируем переменную i нулем
void main(void)
{
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
PORTB=0x3C;
DDRB=0x03;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: Fast PWM top=0xFF
// OC0A output: Non-Inverted PWM
// OC0B output: Non-Inverted PWM
TCCR0A=0xA3;
TCCR0B=0x03;
TCNT0=0;
//OCR0A=i;  //Отключаем управление ШИМ и переносим его в программу
OCR0B=0;
GIMSK=0x00;
MCUCR=0x00;
TIMSK0=0x02;
ACSR=0x80;
ADCSRB=0x00;
DIDR0=0x00;
ADCSRA=0x00;
#asm("sei")

while (1)
      { 
      OCR0A=i;          //инициализируем регулировку ШИМ переменной i
      if (PINB.3==0 && i<255)   //если на входе 3 ноль и переменная меньше  255 то
         {
         i++;                //увеличиваем переменную i на единицу
         delay_ms(3);   //делаем паузу в милисикундах
         }
         else           //если же на 3 входе еденица то
         {
                          //ничего не делаем
         }
       if (PINB.4==0 && i>0)   //если на входе 4 ноль и переменная больше нуля то
         {
         i--;                  //уменьшаем переменную i на еденицу
         delay_ms(3);   //делаем паузу в миллисекундах
         }
         else                //если же на входе 4 единица то
         {
                               //ничего не делаем
         } 
     }
}



Пожалуйста опишите подробно мои ошибки, так как я еще не полностью понял принцип работы ШИМ в этом микроконтроллере.

Вот видео моих испытаний YouTube

_________________
Практически все схемы усилителей низкой частоты!!!


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Пт мар 09, 2012 21:44:39 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Можно изменить частоту таймера, а возможно прот не успевает так быстро моргать:)
По видео понятно, что все правильно генерируется.
Так что собирайте в железе.

По коду могу сказать,что прерывание по переполнению можно убрать:)
Также можно убрать пустые else{}

А еще можно в форуме пользоваться командами
Код:
[spoiler]  [/spoiler] [code=php][/code]

СпойлерБольшой фрагмент текста

Код:
ADCSRA=0x00;

while (1)//Код си
      {
      }
  

_________________
В поисках истины человек развивается.


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Вс мар 11, 2012 00:28:56 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 8
Зарегистрирован: Пт июн 20, 2008 09:38:05
Сообщений: 127
Откуда: Харьков
Рейтинг сообщения: 0
hishko писал(а):
Вот код:
Код:

while (1)
      { 
      OCR0A=i;          //инициализируем регулировку ШИМ переменной i
      if (PINB.3==0 && i<255)   //если на входе 3 ноль и переменная меньше  255 то
         {
         i++;                //увеличиваем переменную i на единицу
         delay_ms(3);   //делаем паузу в милисикундах
         }
     }
}



Ну, вы батенька даёте... Итак, что ВЫ делаете, преверяете нажата ли кнопка, если нажата то инкементируете и, потом поять проверяете если нажата(а она то всё ещё нажата, задержка всего-то 3 мс) и пошло поехало... 255* 3 = 765 мс. значит за 765 мс удержания кнопочки, в OCR будет 255....а чтоб светодиод засветился "на полную" как глазу кажется, достаточно и 50% заполенеия импульса. Вобщем исправлйте вашу работу с кнопками:)


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Вс мар 11, 2012 11:47:44 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пн окт 25, 2010 18:01:12
Сообщений: 35
Рейтинг сообщения: 0
Спасибо!
Сейчас проверю и отпишу результат, получается, что протеус не показал это, в нем как то все на много медленнее происходит .
На сколько я понимаю, для времени загорания в пять секунд мне нужно выставить 20миллисекунд. Буду экспериментировать.
******************************************************************************************************************


Ура, заработало, даже не пойму что именно было причиной, т.к. изменив время между циклами я просто увеличил время плавного возгорания диода, а проблема была в том, что диод просто моргал при включении, и кнопки ни как не влияли на него.

Но появилась еще одна проблема, диод загорается плавно как положено, но тухнет раз в десять дольше, и тоже не могу понять в чем причина...
вот код
Код:
OCR0A=i;          //инициализируем регулировку ШИМ переменной i
               
       if (PINB.3==0 && i<255)   //если на входе 3 ноль то
         {
         i++;           //увеличиваем переменную i на единицу
         delay_ms(20);  //делаем паузу в милисикундах
         }
       
       if (PINB.4==0 && i>0)   //если на входе 4 ноль то
         {
         i--;           //уменьшаем переменную i на еденицу
         delay_ms(20);  //делаем паузу в милисикундах
         }


Может причина в кроется не в микросхеме и не в коде, а в IRF44N (у меня такой в сборке, а в протеусе другой), мне кажется, что нужно еще что нибудь добавить в схему или я ошибаюсь?
Изображение


Вложения:
Схема.jpg [130.18 KiB]
Скачиваний: 4495

_________________
Практически все схемы усилителей низкой частоты!!!
Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Вс мар 11, 2012 14:12:55 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пн окт 25, 2010 18:01:12
Сообщений: 35
Рейтинг сообщения: 0
Может и в самом деле микросхема не успевала все просчитать, установил по 50 миллисекунд и все заработало нормально.
Код:
if (PINB.3==0 && i<255)   //если на входе 3 ноль то
         {
         i++;           //увеличиваем переменную i на единицу
         delay_ms(50);  //делаем паузу в милисикундах
         }
       
       if (PINB.4==0 && i>0)   //если на входе 4 ноль то
         {
         i--;           //уменьшаем переменную i на еденицу
         delay_ms(50);  //делаем паузу в милисикундах
         } 
         PORTB.2=1; 


теперь планирую сделать регулировку скорости двигателя )))))))

_________________
Практически все схемы усилителей низкой частоты!!!


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Вс мар 11, 2012 15:33:32 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 8
Зарегистрирован: Пт июн 20, 2008 09:38:05
Сообщений: 127
Откуда: Харьков
Рейтинг сообщения: 0
hishko писал(а):
Может и в самом деле микросхема не успевала все просчитать, установил по 50 миллисекунд и все заработало нормально.

Искренне рад, что у вас получилось!
На будущие рекомендую делать так:
Код:
if (PINB.3==0)   
         {
                while(!PINB.3); // ждём пока кнупер нажат, кстати тут же можно реализовать повтор
                delay_ms(5); // избегаем дребезга контактов
                // делаем что хотели
         }     

Прелестей сей констукции в том, что при 1 нажатии, действие выполняется 1 раз.


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Вс мар 11, 2012 15:46:13 
Поставщик валерьянки для Кота

Карма: 1
Рейтинг сообщений: 5
Зарегистрирован: Ср май 11, 2011 21:37:45
Сообщений: 1995
Откуда: Цветочный город
Рейтинг сообщения: 0
Shapa писал(а):
На будущие рекомендую делать так:
Код:
if (PINB.3==0)   
         {
                while(!PINB.3); // ждём пока кнупер нажат, кстати тут же можно реализовать повтор
                delay_ms(5); // избегаем дребезга контактов
                // делаем что хотели
         }     

Прелестей сей констукции в том, что при 1 нажатии, действие выполняется 1 раз.

прелесть этой кнострукции в том, что вы всегда сможете надеяться на сюрприз: оно будет срабатывать при каждом нажатии кнопки или 1 раз, или два... или три... и при отпускании тоже иной раз будет срабатывать... как повезет :) будет очень интересно

_________________
битва с дураками проиграна, победители торжествуют. слава победителям!


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Пн мар 12, 2012 19:44:05 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пн окт 25, 2010 18:01:12
Сообщений: 35
Рейтинг сообщения: 0
Shapa писал(а):
Код:
if (PINB.3==0)   
         {
                while(!PINB.3); // ждём пока кнупер нажат, кстати тут же можно реализовать повтор
                delay_ms(5); // избегаем дребезга контактов
                // делаем что хотели
         }     

Прелестей сей констукции в том, что при 1 нажатии, действие выполняется 1 раз.


Мне кажется, что так все же не удобно (неудобно именно для моей цели), это мне нужно будет нажать на кнопку 255 рас, чтобы диод засветился в полную силу. В моей же конструкции просто нажимаешь на кнопку и диод в течении пяти секунд плавно загорается до полной мощности, также и тухнет плавно в течении пяти секунд пока держу кнопку.

_________________
Практически все схемы усилителей низкой частоты!!!


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Вт мар 13, 2012 07:05:31 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 12
Рейтинг сообщений: 67
Зарегистрирован: Пт авг 27, 2010 05:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Код:
while(!PINB.3&&++Up);
 

или
Код:
do (Up=(Up<<1)&0x01;)  while(!PINB.3&&Up); 

_________________
В поисках истины человек развивается.


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Вт авг 07, 2012 07:09:38 
Родился

Зарегистрирован: Вт авг 07, 2012 06:59:34
Сообщений: 9
Рейтинг сообщения: 0
Здравствуйте. Я собрал данную схему, вроде все работает, вот только одна проблема, если отключить МК и включить его вновь, то яркость диодов опять на минимуме. Я так понимаю это из-за того что мы инициируем переменную i нулем. может нужно сохранять ее в память и потом из памяти извлекать ее значение? может кто помочь с этим?


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Вт авг 07, 2012 08:49:12 
Вымогатель припоя
Аватар пользователя

Карма: 5
Рейтинг сообщений: 74
Зарегистрирован: Пн июн 18, 2012 12:01:04
Сообщений: 650
Откуда: Челябинская область, Копейск
Рейтинг сообщения: 0
Дак эта.... проще пареной репы при изменении данной переменной сохраняем её в ЕЕПРОМ, а при инициализации вытаскиваем её оттуда :sleep:


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Вт авг 07, 2012 09:33:43 
Первый раз сказал Мяу!

Зарегистрирован: Пт апр 27, 2012 15:48:35
Сообщений: 21
Рейтинг сообщения: 0
zero648 писал(а):
Дак эта.... проще пареной репы при изменении данной переменной сохраняем её в ЕЕПРОМ, а при инициализации вытаскиваем её оттуда :sleep:

У спросившего не тот уровень, что бы понять это на пальцах.... :))) Просто я сам не очень в теме, осмысливание вашего ответа у меня заняло 4 часа!
В этот раз результат обдумывания был положительным, действительно это делается проще пареной репы. :beer:
У меня подобный вопрос.
Скажите ШИМ регулируется только от 0 до 255. Мне интересен вариант от 0 до 1023, если это возможно , пожалуйста покажите в небольшом примере.
Спасибо.


Вернуться наверх
 
 Заголовок сообщения: Re: ШИМ на тини13
СообщениеДобавлено: Вт авг 07, 2012 11:30:37 
Вымогатель припоя
Аватар пользователя

Карма: 5
Рейтинг сообщений: 74
Зарегистрирован: Пн июн 18, 2012 12:01:04
Сообщений: 650
Откуда: Челябинская область, Копейск
Рейтинг сообщения: 0
TovsCat писал(а):
У меня подобный вопрос.
Скажите ШИМ регулируется только от 0 до 255. Мне интересен вариант от 0 до 1023, если это возможно , пожалуйста покажите в небольшом примере.
Спасибо.

Для ШИМа от 0 до 1023 нужен 16 битный счетчик, если реализовать аппаратно, с другой стороны, если делать программно, то можно любой счетчик.

Пример настройки аппаратного ШИМа 0-255 и 0-1023:
Спойлер
Код:
            .include "m8def.inc"     ; Используем ATMega8

; ROM ===============

            .CSEG                     ; ROM

            .org $000
            rjmp RESET                ; External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset
            reti                      ; INT0          Внешнее прерывание 0
            reti                      ; INT1          Внешнее прерывание 1
            reti                      ; TIMER2 COMP   Совпадение таймера/счетчика Т2
            reti                      ; TIMER2 OVF    Переполнение таймера/счетчика Т2
            reti                      ; TIMER1 CAPT   Захват таймера/счетчика Т1
            reti                      ; TIMER1 COMPA  Совпадение «А» таймера/счетчика Т1
            reti                      ; TIMER1 COMPB  Совпадение «В» таймера/счетчика Т1
            reti                      ; TIMER1 OVF    Переполнение таймера/счетчика Т1
            reti                      ; TIMER0 OVF    Переполнение таймера/счетчика Т0
            reti                      ; SPI, STC      Передача по SPI завершена
            reti                      ; USART,RXC     USART, прием завершен
            reti                      ; USART,UDRE    Регистр данных USART пуст
            reti                      ; USART,TXC     USART, передача завершена
            reti                      ; ADC           Преобразование АЦП завершено
            reti                      ; EE_RDY        EEPROM, готово
            reti                      ; ANA_COMP      Аналоговый компаратор
            reti                      ; TWI           Two-wire Serial Interface
            reti                      ; SPM_RDY       Готовность Store Program Memory
           
; ---------- R E S E T ----------

            .ORG   INT_VECTORS_SIZE   ; Конец таблицы прерываний

RESET:
            cli
            ldi     r16, high(RAMEND) ; Set Stack Pointer to top of RAM
            out     SPH, r16          ;
            ldi     r16, low(RAMEND)  ;
            out     SPL, r16          ;

; ---------- M A I N  P R O G R A M M ----------

PORTS_Init:
            ldi   r16, 0b00001010
            out   DDRB, r16
            ldi   r16, 0b00000000
            out   PORTB, r16

PWM_8_Init:
            ldi   r16, 100           ; этим меняем скважность
            out   OCR2, r16
            ldi   r16, (0b11<<WGM20) ; Set Fast PWM mode
            ori   r16, (0b11<<COM20) ; Вкл OC2 при совпадении, сбрасываем OC2 при максимуме
            ori   r16, (0b010<<CS20) ; Prescaler 010=1:8
            out   TCCR2, r16         ; Enable TCNT2
PWM_16_Init:
            ldi   r16, 254           ; этим и
            ldi   r17, 3             ; этим меняем скважность от 0 до 1023
            out   OCR1AH, r17
            out   OCR1AL, r16
            ldi   r16, (0b11<<WGM10) ; Set low Fast PWM mode, 10-bit
            ldi   r17, (0b01<<WGM12) ; Set hig Fast PWM mode, 10-bit
            ori   r16, (0b11<<COM1A0); Вкл OC1A при совпадении, сбрасываем OC1A при максимуме
            ori   r17, (0b010<<CS10) ; Prescaler 010=1:8
            out   TCCR1A, r16        ;
            out   TCCR1B, r17        ; Enable TCNT1
            sei

MAIN_loop:
            in    r16,MCUCR
            ori   r16, 0x80
            out   MCUCR, r16
            sleep                     ; Отдыхаем пока не началось
            rjmp  MAIN_loop           ; Go again               




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

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


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

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


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