Jump to content
SigmA

ШИМ и Delay не работают вместе

Recommended Posts

Доброго времени суток всем. Для своей новой жены захотелось мне сделать сердечко на atmega8, с кучей эффектов и т.д. Так вот, разные мигалки-переключалки св-диодов я написал, использовал delay. Но мне этого стало мало и я решил подключить шим программный. Отдельно от всей программы шим работает как нужно, так же и переключалки работают отдельно от шим, но вот когда я соединяю это всё воедино то работает только шим и не переходит дальше по коду.Я так понимаю, что таймеры и delay вместе работать не могут? Но если могут, то как?

    #include <mega8.h>
    #include <delay.h>
    #define GREEN PORTC.1=PORTC.2=PORTC.3=PORTC.0
   
    unsigned char i, s,;
    unsigned char  green=255;
    unsigned char  green_b;     //переменные, для буферизации значений скважности ШИМ
    unsigned char count;                            //переменная- счетчик вызовов обработчика прерываний
    unsigned char temp=1; 
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    count++;
    if (count == 0){                                //если счетчик переполнился и принял значение 0
       green_b = green; 
       GREEN = 1; 
      }

    if (green_b == count) { GREEN = 0;}
    }

    void main(void)

    {  
    PORTC=0x0F;                                     //конфигурируем порт
    DDRC=0x0F;
    TCCR0=0x01;                                     //настраиваем таймер
    TCNT0=0x00;
    TIMSK=0x01;                                     //разрешаем генерацию прерывания по переполнению таймера T0

    #asm("sei")                                     //глобально разрешаем прерывания

            


    while (1)
        {  
        for (i=0;i<3;i++)
                    
        {
        if (temp==1) {if (green < 255)   green += 1; else temp = 2;}                                                
        if (temp==2) {if (green   >   0)   green   -= 1; else temp = 1;}
                
        delay_ms(1000);   

        };
       
        s=7;
        for (i=0;i<=s;i++)
        { 
        PORTC.0=1;
        delay_ms(200);
        PORTC.0=0;
                
        PORTC.1=1;
        delay_ms(200);
        PORTC.1=0;
                
        PORTC.2=1;
        delay_ms(200);
        PORTC.2=0;
                
        PORTC.3=1;
        delay_ms(200);
        PORTC.3=0;
                
        }        
                
        for (i=0;i<=s;i++)
        { 
        PORTC.3=1;
        delay_ms(200);
        PORTC.3=0;
                
        PORTC.2=1;
        delay_ms(200);
        PORTC.2=0;
                
        PORTC.1=1;
        delay_ms(200);
        PORTC.1=0;
                
        PORTC.0=1;
        delay_ms(200);
        PORTC.0=0;
                
        }
                 
        for (i=0;i<=s;i++)
        { 
        PORTC.3=1;
        delay_ms(200);
                
                
        PORTC.2=1;
        delay_ms(200);
        ;
                
        PORTC.1=1;
        delay_ms(200);
                
                
        PORTC.0=1;
        delay_ms(200);
                
         PORTC.3=0;
        delay_ms(200);
                
                
        PORTC.2=0;
        delay_ms(200);
                
                
        PORTC.1=0;
        delay_ms(200);
                
                
        PORTC.0=0;
        delay_ms(200);
                
                
        }  
         for (i=0;i<=s;i++)
        { 
        PORTC.0=1;
        delay_ms(200);
                
                
        PORTC.1=1;
        delay_ms(200);
        ;
                
        PORTC.2=1;
        delay_ms(200);
                
                
        PORTC.3=1;
        delay_ms(200);
                
        PORTC.0=0;
        delay_ms(200);
                
                
        PORTC.1=0;
        delay_ms(200);
                
                
        PORTC.2=0;
        delay_ms(200);
                
                
        PORTC.3=0;
        delay_ms(200);
        }              
        for (i=0;i<=s;i++)
        { 
       PORTC=0x01;
       delay_ms(200);
       PORTC=0x02;
       delay_ms(200);
       PORTC=0x04;
       delay_ms(200);
        PORTC=0x08;
       delay_ms(200);
       PORTC=0x09;
       delay_ms(200);
        PORTC=0x0A;
       delay_ms(200);
       PORTC=0x0C;
       delay_ms(200);
        PORTC=0x0D;
       delay_ms(200);
       PORTC=0x0E;
        delay_ms(200);
       PORTC=0x0F; 
               
       delay_ms(200);
        PORTC=0x07;
       delay_ms(150);
       PORTC=0x0B;
       delay_ms(200);
       PORTC=0x03;
       delay_ms(250);
       PORTC=0x05;
       delay_ms(300);
        PORTC=0x09;
       delay_ms(350);
       PORTC=0x01;
       delay_ms(400);
        PORTC=0x02;
       delay_ms(200);
       PORTC=0x04;
       delay_ms(200);
        PORTC=0x08;
       delay_ms(200);
       PORTC=0x00;
        delay_ms(200);
        }
        for (i=0;i<=5;i++)
            {
             PORTC=0x0f;
             delay_ms(100);
             PORTC=0x00; 
             delay_ms(100);
             PORTC=0x0f;
             delay_ms(100);
             PORTC=0x00; 
             delay_ms(100);
             PORTC=0x0f;
             delay_ms(100);
             PORTC=0x00; 
             delay_ms(150);
             PORTC=0x0f;
             delay_ms(300);
             PORTC=0x00; 
             delay_ms(100);
              PORTC=0x0f;
             delay_ms(300);
             PORTC=0x00; 
             delay_ms(100);
              PORTC=0x0f;
             delay_ms(300);
             PORTC=0x00; 
             delay_ms(150); 
              PORTC=0x0f;
             delay_ms(100);
             PORTC=0x00; 
             delay_ms(100);
             PORTC=0x0f;
             delay_ms(100);
             PORTC=0x00; 
             delay_ms(100);
             PORTC=0x0f;
             delay_ms(100);
             PORTC=0x00; 
             delay_ms(1000);
                     
            }        
                
                
        }        
     }

 

Share this post


Link to post
Share on other sites

Конечно программный ШИМ работать не будет. Примените аппаратный . 

 


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites
Только что, artos5 сказал:

Конечно программный ШИМ работать не будет. 

 

Это почему же? Два часа усиленного штудирования публикаций о таймерах/счетчиках, прерываниях и т.д, привело к результату.

Для меня было открытием, что помимо глобального разрешения прерываний #asm("sei") , есть еще и запрет #asm("cli") , теперь все прекрасно работает)))


    #include <mega8.h>
    #include <delay.h> 
    #define GREEN PORTC.1=PORTC.2=PORTC.3=PORTC.0 
    
     unsigned char i, s, t=5, tt=200;
    unsigned char  green=255;
unsigned char  green_b;     //переменные, для буферизации значений скважности ШИМ
unsigned char count;                            //переменная- счетчик вызовов обработчика прерываний
unsigned char temp=1;
     interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
count++;
if (count == 0){                                //если счетчик переполнился и принял значение 0
        
                                 //сохранием значения в буфер
        green_b = green; 
        
       
                                   //выставляем ноги, отвечающие за ШИМ в логическую 1
        GREEN = 1; 
                         
       
        }

             //по достижении заданной скважности выводим логический 0 в ножку МК
if (green_b == count) { GREEN = 0;}
}

    void main(void)

    {  
     PORTC=0x0F;                                     //конфигурируем порт
DDRC=0x0F;

TCCR0=0x01;                                     //настраиваем таймер
TCNT0=0x00;

TIMSK=0x01;                                     //разрешаем генерацию прерывания по переполнению таймера T0

                                    //глобально разрешаем прерывания

    


    while (1)
        {      
            #asm("sei") 
            if (temp==1) {if (green < 255)   green += 1; else temp = 2;}
            if (temp==2) {if (green   >   0)   green   -= 1; else temp = 3;}
        if (temp==3) {if (green < 255)   green += 1; else temp = 4;}  
        if (temp==4) {if (green   >   0)   green   -= 1; else temp = 5;}
        if (temp==5) {if (green < 255)   green += 1; else temp = 6;}
        if (temp==6) {if (green   >   0)   green   -= 1; else temp = 7;}
        if (temp==7) {if (green < 255)   green += 1; else temp = 8;}
        if (temp==8) {if (green   >   0)   green   -= 1; else temp = 9;}
        if (temp==9) {if (green   <   255)    #asm("cli"); temp = 10; }
         delay_ms(t); 
        
        if (temp==10) {if (green   == 0) 
         
          s=2;
   for (i=0;i<=s;i++)
        { 
        PORTC.0=1;
        delay_ms(tt);
        PORTC.0=0;
        
        PORTC.1=1;
        delay_ms(tt);
        PORTC.1=0;
        
        PORTC.2=1;
        delay_ms(tt);
        PORTC.2=0;
        
        PORTC.3=1;
        delay_ms(tt);
        PORTC.3=0;
        
        }        
        
             for (i=0;i<=s;i++)
        { 
        PORTC.3=1;
        delay_ms(tt);
        PORTC.3=0;
        
        PORTC.2=1;
        delay_ms(tt);
        PORTC.2=0;
        
        PORTC.1=1;
        delay_ms(tt);
        PORTC.1=0;
        
        PORTC.0=1;
        delay_ms(tt);
        PORTC.0=0;
        
        }
         
              for (i=0;i<=s;i++)
        { 
        PORTC.3=1;
        delay_ms(tt);
        
        
        PORTC.2=1;
        delay_ms(tt);
        ;
        
        PORTC.1=1;
        delay_ms(tt);
        
        
        PORTC.0=1;
        delay_ms(tt);
        
         PORTC.3=0;
        delay_ms(tt);
        
        
        PORTC.2=0;
        delay_ms(tt);
        
        
        PORTC.1=0;
        delay_ms(tt);
        
        
        PORTC.0=0;
        delay_ms(tt);
        
        
        }  
         for (i=0;i<=s;i++)
        { 
        PORTC.0=1;
        delay_ms(tt);
        
        
        PORTC.1=1;
        delay_ms(tt);
        ;
        
        PORTC.2=1;
        delay_ms(tt);
        
        
        PORTC.3=1;
        delay_ms(tt);
        
         PORTC.0=0;
        delay_ms(tt);
        
        
        PORTC.1=0;
        delay_ms(tt);
        
        
        PORTC.2=0;
        delay_ms(tt);
        
        
        PORTC.3=0;
        delay_ms(tt);
        }              
            for (i=0;i<=s;i++)
        { 
       PORTC=0x01;
       delay_ms(tt);
       PORTC=0x02;
       delay_ms(tt);
       PORTC=0x04;
       delay_ms(tt);
        PORTC=0x08;
       delay_ms(tt);
       PORTC=0x09;
       delay_ms(tt);
        PORTC=0x0A;
       delay_ms(tt);
       PORTC=0x0C;
       delay_ms(tt);
        PORTC=0x0D;
       delay_ms(tt);
       PORTC=0x0E;
        delay_ms(tt);
       PORTC=0x0F; 
       
       delay_ms(tt);
        PORTC=0x07;
       delay_ms(150);
       PORTC=0x0B;
       delay_ms(tt);
       PORTC=0x03;
       delay_ms(250);
       PORTC=0x05;
       delay_ms(300);
        PORTC=0x09;
       delay_ms(350);
       PORTC=0x01;
       delay_ms(400);
        PORTC=0x02;
       delay_ms(tt);
       PORTC=0x04;
       delay_ms(tt);
        PORTC=0x08;
       delay_ms(tt);
       PORTC=0x00;
        delay_ms(tt);
        }
        for (i=0;i<=5;i++)
            {
             PORTC=0x0f;
             delay_ms(100);
             PORTC=0x00; 
             delay_ms(100);
             PORTC=0x0f;
             delay_ms(100);
             PORTC=0x00; 
             delay_ms(100);
             PORTC=0x0f;
             delay_ms(100);
             PORTC=0x00; 
             delay_ms(150);
             PORTC=0x0f;
             delay_ms(300);
             PORTC=0x00; 
             delay_ms(100);
              PORTC=0x0f;
             delay_ms(300);
             PORTC=0x00; 
             delay_ms(100);
              PORTC=0x0f;
             delay_ms(300);
             PORTC=0x00; 
             delay_ms(150); 
              PORTC=0x0f;
             delay_ms(100);
             PORTC=0x00; 
             delay_ms(100);
             PORTC=0x0f;
             delay_ms(100);
             PORTC=0x00; 
             delay_ms(100);
             PORTC=0x0f;
             delay_ms(100);
             PORTC=0x00; 
             delay_ms(1000); temp=1;
             
            }  
        
            #asm("sei") 
        
           
           
        }        
     }
       }

 

Share this post


Link to post
Share on other sites

Быстро и просто. Разработка бюджетного неизолированного источника питания на контроллере VIPer122

С помощью VIPer122 можно создавать как изолированные, так и неизолированные сетевые источники питания. Разберем самый простой и бюджетный вариант – разработку неизолированного понижающего источника питания с выходным током в несколько сотен миллиампер без трудоемких расчетов трансформаторов и компонентов обвязки.

Подробнее

Ну так вы путаете программный ШИМ с аппаратным . Аппаратный ШИМ будем работать!

 


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites

Пополнение линейки ViperPlus от STMicroelectronics

Компания ST обновила семейство ШИМ-регуляторов со встроенным ключом ViperPlus, выпустив новые бюджетные микросхемы VIPER122 и VIPER222, и микросхемы VIPER265K и VIPER267K, имеющие встроенный ключ MOSFET напряжением 1050 В. С их помощью возможно реализовать топологии: изолированный и неизолированный обратноходовой преобразователь (flyback), понижающий преобразователь (buck), повышающе-понижающий преобразователь (buck-boost).

Подробнее

4 часа назад, SigmA сказал:

Два часа усиленного штудирования публикаций о таймерах/счетчиках, прерываниях и т.д, привело к результату

Я конечно извиняюсь, но Вы пишите про 2 часа усиленного штудирования, а сами используйте delay. В 8 меге ещё 2 таймера есть! Зачем эта куча задержек??? Можно же функцию написать, которая раз в 10 меньше кода будет занимать. 

Edited by WinneR

Share this post


Link to post
Share on other sites

LED-драйверы LCM - бюджетное решение для умного дома!

Для более простого и бюджетного решения по организации управляемого освещения в здании с имеющейся системой KNX компания Mean Well предлагает готовые к использованию LED-драйверы семейства LCM/KN, управляемые по протоколу KNX. По своим техническим возможностям эти изделия похожи на драйверы из популярного семейства LCM/(DA).

Подробнее

1 час назад, WinneR сказал:

 В 8 меге ещё 2 таймера есть! Зачем эта куча задержек??? Можно же функцию написать, которая раз в 10 меньше кода будет занимать. 

Конечно можно. Этим завтра я и буду заниматься. Теперь-то я знаю как это делается. Мне главное было решить задачу, которая образовалась изначально. 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Путя прямо в просак попал - и ведь не зацепиться)) - нациков) нет - ведёшь на помощь своему дружку - настроить против себя народ ещё одной страны - беда). Всё таки врать и подделывают выборы - не хорошо)) 
    • еще можно добавить блок питания, блок индикации - они точно не причем. а вот шифратор пределов надо проверять, делитель и синхронизатор. синхронизатор скорее всего в норме, а из-за делителя могут быть заморочки имеется генератор  -отлично.
    • Внешний осмотр проводил, преключатель смотрел и смазал не много маслом.Есть генератор Г3-111
    • Затем, чтоб разобраться в проблеме. Я например, убрал всё из схемы. Оставил источник переменки, колебательный контур и нагрузку. И того, что имеем. На синусоиде в 100 кГц, всё отрабатывает идеально. Но стоит только добавить третью гармонику в виде ещё одного источника с частотой в 300 кГц и проблема тут же проявляется.
    • Верно) останется последней чудик в СНГ - не считая восточных - Туркменистан и т. д. - с читающий своих людей быдлом) им главное не здаватся - дожмут уб - ка.   
    • Уровень воды (горячей!) в расширительном баке на чердаке(130л) контролирую  точным аналоговым измерителем емкости (https://www.rlocman.ru/shem/schematics.html?di=152477). В удобном месте (подвал) установлен БП  12В и стрелочная измерительная головка. Провод - 3 жилки. Датчик - металлопластиковая труба 16 мм, заплавленная с нижнего конца полиэтиленом. Емкость - около 130 пФ на 10 см. Т.к. ваша емкость не металлическая, то общий провод надо соединить с металлической арматурой(вентиль, труба и т.п.), контактирующей с водой. Можно использовать любой  подходящий измеритель емкости, хоть на МК, их в сети навалом.  Позже продублировал эту систему для накопительной емкости 500л , установленной там же, на чердаке. 
    • это хорошо. значит отсутствует КЗ по питанию и возможно МС рабочие. сейчас надо проверять прохождение сигнала от входа. но сначала надо проверить переключатель  визуально но внимательно. там скорее всего все в порядке, но надо исключить и забыть о нем. он прорисован на кросс плате ну и глазками смотреть. и смазать его, циатим если имеется будет неплохо. а потом самое интересное , имеется какой нибудь генератор на 1 кгц во первых это опыт. во вторых мультиметр и Щ300 приборы из разных весовых категорий. для дома он избыточен, с этим согласен, но иметь такой - это хороший прибор для стационарной лаборатории и никакой мультиметр его не заменит. а вот где то пробежаться - в кармане мультиметр самое то  у тебя есть осцилоскоп с1-94  у него есть сигнал для калибровки прямоугольных импульсов? у меня с1-114 такой сигнал имеется - 1  кГц 1.2 вольта, про твой аппарат не знаю, и лазать по нету лениво...
  • Similar Content

    • By Prozac
      Здравствуйте, уважаемые форумчане! Вообще говоря, не имею такой привычки - донимать людей вопросами, и до всего стараюсь доходить самостоятельно. Но в данном случае без "помощи зала" совсем никак: перепробовал уже все, что только смог придумать - а "воз и ныне там! Поэтому и обращаюсь сюда - возможно, кто-то уже сталкивался с чем-то подобным, и сумел найти решение...
      Суть проблемы в следующем: решил построить ШИМ-контроллер для автомобильного вентилятора охлаждения ("карлсона"), но никак не могу заставить его работать - как только открываются VT2 и VT3, подключая нагрузку, МК уходит в резет или виснет (чаше - первое)!.. Сбросившись, опять пытается подключить нагрузку, и опять резетится, и так - без конца! Причем, изначально решил испытать схему не на индуктивной нагрузке (электромоторе), а на вполне себе пассивной 60Вт (около 3A по току) лампочке из фары - и та же фигня: МК пытается запуститься, сбрасывается, лампа моргает, дергается... Даже не ШИМ, а обычное мигание лампой с частотой 1Гц через несколько вспышек или вешает МК, или резетит его (что видно по сбою ритма моргания). При этом без нагрузки - по осциллографу, подключенному к ноге 5 МК или к нижнему (по схеме) выводу R7 - все отлично: наблюдается ровный и чистенький ШИМ-сигнал, изменяющийся согласно тестовой программе! Однако, стоит подать нагрузку, как осциллограмма начинает прыгать: появляются ШИМ-импульсы, затем ровная линия, затем снова импульсы с тем заполнением, которое должно быть в самом начале программы... Собственно, это наблюдение и позволило сделать вывод о том, что МК перезагружается.
      Естественно, первая мысль - слабый лабораторник (он у меня импульсный, самодельный, где-то на 3А - действительно слабый; но та же петрушка наблюдалась и при попытках питать устройство от трансформаторного ЗУ на 10А). Ну, пригнал машину, снял с нее аккум (100% свежий и не дающий просадок!), запитал от него - однако проблема повторилась... Значит, дело не в питании!.. Пробовал много различных танцев с бубном: отключал внешнюю цепочку сброса R2-C2 (результат - ноль), включал BOD микроконтроллера (стало еще хуже), подвешивал вместо C4 и C6 электролиты большей емкости (не помогло)... Думал, что, возможно, кондеи C4 и C6 разряжаются через R7 - экспериментировал с его сопротивлением (от 100 до 960 Ом), перекидывал его верхний вывод на анод VD1 (чтобы отсечь резистор от фильтрующих C4 и C6) - тщетно... Грешил даже на то, что какие-то проблемы вносит емкость затворов VT2 и VT3 - уменьшал сопротивление R10 и R12, дабы затвор быстрее "разряжался" - безрезультатно...
      Игрался с частотой МК и ШИМ - перебрал частоты ШИМ от 18 до 4687 Гц; пытался запускать нагрузку с разным заполнением ШИМ, от 10 до 40% - как глючило, так и глючит... Т.е., перелопатил, практически, всю схему!
      Удалось заставить устройство нормально работать на лампу, и даже на пару спаралеленных электродвигателей МЭ218 (от "печки") следующим образом: R8 был исключен (вместо него - перемычка), а C7 (изначально - К73-17В всего на 0,47мкФ) был заменен на пару электролитов по 1500мкФ, включенных плюс к плюсу последовательно (для устранения полярности кондеев). Нагрузка стала нормально подключаться, отрабатывать как на повышение, так и на убывание заполнения ШИМ. Двигатели отлично работали как при ступенчатом изменении ШИМ-заполнения, так и при плавном. Единственное, что при попытке подать на двигатели ШИМ с заполнением менее 20%, МК опять начинал дергаться и резетить, а так же резетил при резком отключении движков: если раскрутить их до 100%, а потом снять сигнал, то МК перезагружался; однако, если после 100% плавно понижать обороты где-то до 40%, и лишь потом снимать сигнал, то схема работала нормально. Плюс, очень сильно нагревались электролиты C7...
      Однако, когда принес схему в машину - для отладки непосредственно в "боевых условиях", и подключил мощный двигатель вентилятора, началась старая песня с резетами...
      Сейчас, вроде бы, "осенило" - поменял VD2 на Шоттки 1N5822 - лампочка запустилась на "ура" даже без С7; так же отлично и мягко стартовала спарка из МЭ218 - радостный побежал к машине... Но с "карлсоном" - опять мимо: МК вновь ушел в перезагрузку... Все: я не знаю, что тут делать - каждую деталь уже перелопатил, и кучу вариантов испробовал!!! Но ничего не понятно(( Вот и прошу помочь: может быть, кто-то уже был в такой ситуации, и как-то решил подобную проблему?
      VT2 и VT3 стоят "фирменные", IR-овские (не Китай) - из "Чип и Дипа". ATtiny13 - с Алиэкспресс; чтобы исключить возможность брака конкретной микросхемы, пробовал ставить в схему несколько разных экземпляров МК (из одной посылки). DS18B20 пока еще не подключал (нужно разобраться с ШИМ!). IRF3205 каскадированны для уменьшения нагрева (хотя его и так практически нет), и для дополнительной надежности (чтобы в случае выхода из строя одного транзистора не перегреть машину). Тестовую программу специально написал "китайским стилем", без циклов и т.п. - чтобы она была максимально простой, наглядной и линейной - для уверенности, что не в ней дело.
      Подскажите пожалуйста - откуда эти резеты, и как с ними бороться? Как заставить схему отрабатывать на мощную нагрузку? Заранее благодарю!!!
       
       
      ;*************ТЕСТОВАЯ ПРОГРАММА************* ;============ДИРЕКТИВЫ ТРАНСЛЯТОРУ=========== .device ATtiny13 .include "tn13def.inc" .list ;Обзывательство регистров .def Temp = R16 .cseg .org 0x00 ;=========ТАБЛИЦА ВЕКТОРОВ ПРЕРЫВАНИЙ======== rjmp Begin //Начальный сброс reti //Внешнее прерывание INT0 reti //Изменение состояния любой линии reti //Переполнение T0 reti //Готовность EEPROM reti //Срабатывание компаратора reti //Совпадение в канале A таймера T0 reti //Совпадение в канале B таймера T0 reti //Переполнение сторожевого таймера reti //Завершение преобразования в АЦП ;============МОДУЛЬ ИНИЦИАЛИЗАЦИИ============ Begin: ;-----Инициализация стека ldi Temp, RAMEND out SPL, Temp ;-----Отключение компаратора ldi Temp, 0x80 out ACSR, Temp ;-----Настройка портов ldi Temp, 0b00000111 out DDRB, Temp //PB0 - на вывод ;-----Настройка ШИМ ldi Temp, 0b11000001 out TCCR0A, Temp //Режим - быстрый ШИМ с инверсией ldi Temp, 0b00000010 out TCCR0B, Temp //Делим тактирование таймера на 8 rjmp Start //При старте пропускаем 5-секундную задержку ;===============ТЕСТОВЫЙ ЦИКЛ================ PWM: ldi Temp, 0b00000000 out OCR0A, Temp //ШИМ=0% rcall Delay5sec //Ждем 5 сек ;-----Повышаем скорость Start: ldi Temp, 77 out OCR0A, Temp //ШИМ=30% rcall Delay2sec ldi Temp, 102 out OCR0A, Temp //ШИМ=40% rcall Delay2sec ldi Temp, 128 out OCR0A, Temp //ШИМ=50% rcall Delay2sec ldi Temp, 154 out OCR0A, Temp //ШИМ=60% rcall Delay2sec ldi Temp, 179 out OCR0A, Temp //ШИМ=70% rcall Delay2sec ldi Temp, 205 out OCR0A, Temp //ШИМ=80% rcall Delay2sec ldi Temp, 230 out OCR0A, Temp //ШИМ=90% rcall Delay2sec ldi Temp, 255 out OCR0A, Temp //ШИМ=100% rcall Delay2sec ;-----Понижаем скорость ldi Temp, 230 out OCR0A, Temp //ШИМ=90% rcall Delay2sec ldi Temp, 205 out OCR0A, Temp //ШИМ=80% rcall Delay2sec ldi Temp, 179 out OCR0A, Temp //ШИМ=70% rcall Delay2sec ldi Temp, 154 out OCR0A, Temp //ШИМ=60% rcall Delay2sec ldi Temp, 128 out OCR0A, Temp //ШИМ=50% rcall Delay2sec ldi Temp, 102 out OCR0A, Temp //ШИМ=40% rcall Delay2sec ldi Temp, 77 out OCR0A, Temp //ШИМ=30% rcall Delay2sec rjmp PWM //Возвращаемся, и начинаем с 5 сек "молчания" ;===========ПОДПРОГРАММЫ ЗАДЕРЖКИ============ ;-----Задержка в 2 секунды Delay2sec: ldi R17, 253 ldi R18, 75 ldi R19, 29 L1: subi R17, 1 sbci R18, 0 sbci R19, 0 brcc L1 nop ret ;-----Задержка в 5 секунд Delay5sec: ldi R17, 253 ldi R18, 61 ldi R19, 73 L2: subi R17, 1 sbci R18, 0 sbci R19, 0 brcc L2 nop ret  

    • By Андрей Bragslav
      Здравствуйте, если кто-то знает, подскажите, пожалуйста, какой мосфет(Q3) можно использовать. Еще интересует по каким критериям они подбираються и где это можно сделать(тобишь сайт на котором можно указать нужные параметры/или это как-то по другому подбирается?).

      На счет импульсов генерируемых Arduino Uno на микропроцесоре ATmega328P. Частота в даном примере(вообще она будет перед стартом задаваться в пределах 1-50Гц) 50Гц, период 0,02с, duty cycle 50%.

      Еще такой вопрос, подскажите, пожалуйста, нормальный ли характер графика D на осцилографе? Почему он именно такой, если не нормальный, то что исправить? 

      Если нужна дополнительная информацыя, без проблем, в мерах своих возможностей, добавлю. За любую помощь зарание спасибо.
















    • By Андрей Bragslav
      Здравствуйте, подскажите пожалуйста какой импусный диод (D1) можно использовать в даной схеме, тобишь он должен быть расчитан на ток проходящий через катушку, а собственно как это узнать...буду благодарен за помощь).
      Если кто-то знает, подскажите, пожалуйста, какой мосфет(Q3) можно использовать. Еще интересует по каким критериям они подбираються и где это можно сделать(тобишь сайт на котором можно указать нужные параметры/или это как-то по другому подбирается?).
      На счет импульсов генерируемых Arduino Uno на микропроцесоре ATmega328P. Частота в даном примере(вообще она будет перед стартом задаваться в пределах 1-50Гц) 50Гц, период 0,02с, duty cycle 50%.
      Если нужна дополнительная информацыя, без проблем, в мерах своих возможностей, добавлю. За любую помощь зарание спасибо.



    • By ШколоКлокер
      в крацце. я спалил (не факт что умерли. не знаю как проверить) 4 разных транзистора.
      причина этой писанины. я не смог запустить мосфеты. делал все по схеме. все резисторы. даже диод ставил ибо нагрузка это 2амперный двигатель. подавал шим через ардуино. с разными частотами. не работает НИЧЕГО. я уже купил модуль где точно все распаяно как надо. не работает. он открыт все время. на на всю силу открыт. поставил диод. все равно не управляется ардуиной. код простейший (воид сетап:пинмод(5 аутпут); аналогврайт(5, 255)). но. когда я попровал с другой частотой  
      void setup() { // ШИМ 8 разрядов, 62,5 кГц TCCR1A = TCCR1A & 0xe0 | 1; TCCR1B = TCCR1B & 0xe0 | 0x09; pinMode(5, OUTPUT); analogWrite(5, 0; // на выводе 9 ШИМ=10% } void loop(){ } двигатель начал пищать. я надеюсь мосфет не пробило 5 ампер от аккумулятора когда я пытался грубо его включить.
      а еще я делал уже без резисторв но на крутом каком то мосфете. у которого порог открытия затвора больше ноля(вольт)  ирлб какойто. смотрел видео алекса гавера (заметки ардуинщика)
       
      я реально не знаю что уже делать. руки опускаются, а модель самолета и сервопривод с аппаратурой ждут. 
      доп фото скину по надобностью 
      (не спрашивайте почему я такой глуп и не знаю как запустить элементарный мосфет. мне 15. если поможете, куплю шоколадку) 
    • Guest Ivan2020
      By Guest Ivan2020
      Вопрос такой:
      Какая самая простая схема преобразования
      прямоугольного ШИМ напряжения с 50% заполнением вида:
      ` _ ` _
      _| |_| |_
      на пике 24В, на минимуме 0В, т.е. в среднем получается 12В.
      в 12В DC напряжение  вида:
      -----------------------
      Ну то есть ШИМ сигнал нужно преобразовать в обычный сигнал.
      Схема должна преобразовывать в зависимости от ШИМ, т.е. если ШИМ будет 33% заполнением, т.е. 0.33*24В(на пике)=8В в среднем, то схема должна давать 8В прямую линию (с минимальным разбросом напряжения).
      Если есть готовая микросхема, то можно ее название дать.
×
×
  • Create New...