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

Вебинар STM32G0 – новый лидер бюджетных 32-битных микроконтроллеров от STMicroelectronics

Компания Компэл приглашает вас 25 сентября принять участие в вебинаре, который посвящен новому семейству микроконтроллеров STM32G0. Вебинар рассчитан на технических специалистов и тех, кто хорошо знаком с семейством STM32. На вебинаре будут освоены современные методы тестирования производительности микроконтроллеров на примере самых бюджетных 32-битных семейств общего назначения STM32G0 и STM32F0 и проведено их подробное сравнение.

Подробнее

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

 

Share this post


Link to post
Share on other sites
Posted (edited)
4 часа назад, SigmA сказал:

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

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

Edited by WinneR

Share this post


Link to post
Share on other sites
                     

Литиевые батарейки Fanso в беспроводных датчиках пожарно-охранной сигнализации

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

Подробнее...

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...

  • Similar Content

    • By Павел Лопатин
      Добрый день!
      Подскажите, пожалуйста, можно ли вынести переменный резистор 16K1-B10K, L20KC, 10 кОм с ШИМ регулятора на отдельную плату? 
      Какие провода лучше использовать? На какое расстояние можно вынести (длина провода) и изменятся ли от этого характеристики? (все-таки, как я понимаю, появится дополнительное сопротивление от провода)
      ШИМ покупной в RDC2-0024 - фото и схема в аттаче
      DOC002726141.pdf
    • By Kirillius Labutin
      Добрый день!
      Имеется готовый лазерный модуль с драйвером (стабилизатор тока и, наверное, напряжения). 
      Хочу регулировать яркость лазера с помощью ШИМ с МК, гугл сказал что лучший вариант - шунтирование лазера. Но драйвер устроен таким образом, что в нём с питанием напрямую не связан ни "+" ни земля лазера. Набросал такую схемку, чтобы реализовать это через оптопару.

      Внимание, вопрос)
      1. Заработает ли такая схема?
      2. Какой посоветуете транзистор Q1 и оптопару? Макс. напряжение в цепи - 5В, ток - 0.5А Я думаю что-нибудь вроде IRLL014TRPBF
      3. Какой выбрать номинал резистора R1 для разряда Q1? Частота ШИМ планируется в районе 1кгц.
    • By mr_smit
      Вынес то что не получается в упрощенной форме в отдельный проект. Среда разработки CooCox 1.7.8, микроконтроллер STM32F103C8T6.
      Нужно раз в ~100 мсек формировать на ножке МК, например,такую последовательность:

      Стартовую длительность формирует таймер, в первом же своем прерывании по совпадению активирует DMA и дальше уже DMA по запросу таймера загружает значение CCR из массива. Что то похожее на управление светодиодами WS2812B. То что я сочинил выдает на пин:

      Но только один раз при первом вызове. При последующих вызовах данные из массива выдаются без первоначальной длительности в 150 мкс.
      Не могу найти ошибку. 
       
      #include <stm32f10x.h> #include <stm32f10x_conf.h> #include <stm32f10x_gpio.h> #include <stm32f10x_rcc.h> #include <stm32f10x_tim.h> #include <stm32f10x_dma.h> GPIO_InitTypeDef PIN; TIM_TimeBaseInitTypeDef TIM_Config; TIM_OCInitTypeDef TIM_OCConfig; DMA_InitTypeDef DMA_Setting; uint8_t Test_Buf[] = {15,30,30,30,15}; void delay_ms(uint32_t ms) { volatile uint32_t nCount; RCC_ClocksTypeDef RCC_Clocks; RCC_GetClocksFreq (&RCC_Clocks); nCount = (RCC_Clocks.HCLK_Frequency/10000)*ms; for (; nCount != 0; nCount--); } void Init_GPIO(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); PIN.GPIO_Pin = GPIO_Pin_11; // PA11 -> TIM1 Channel4 PIN.GPIO_Mode = GPIO_Mode_AF_PP; PIN.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &PIN); } void Init_TIM_Transmit(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); TIM_TimeBaseStructInit(&TIM_Config); // настройки по дефолту TIM_Config.TIM_Prescaler = 72-1; // Запускаем таймер на тактовой частоте 1 MHz (72000000/(72-1)) TIM_Config.TIM_Period = 150-1; // Период - 150 мкс TIM_Config.TIM_ClockDivision = 0; // частоту дополнительно не делим TIM_Config.TIM_CounterMode = TIM_CounterMode_Up; // считаем вверх TIM_TimeBaseInit(TIM1, &TIM_Config); // Инициализируем TIM1 TIM_OCStructInit(&TIM_OCConfig); // настройки по дефолту TIM_OCConfig.TIM_OCMode = TIM_OCMode_PWM1; // Конфигурируем как ШИМ (выравнивание по границе) TIM_OCConfig.TIM_OutputState = TIM_OutputState_Enable; // Включаем выход TIM_OCConfig.TIM_Pulse = 0; // CCR до старта пока нулевой TIM_OCConfig.TIM_OCPolarity = TIM_OCPolarity_High; // Полярность TIM_OCConfig.TIM_OCIdleState = TIM_OCIdleState_Reset; // состояние выхода по совпадению CCR (сброс) TIM_OC4Init(TIM1, &TIM_OCConfig); // Инициализируем 4-й выход таймера, это PA11 TIM_ARRPreloadConfig(TIM1,ENABLE); // Предзагрузка периода (ARR) TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable); // Предзагрузка длины импульса CCR 4-го канала // (даем досчитать до конца и только потом значение меняется на новое) TIM_DMACmd(TIM1,TIM_DMA_CC4,DISABLE); // выключаем пока запрос к DMA от таймера TIM1 по достижении CCR) TIM_CtrlPWMOutputs(TIM1, ENABLE); // включаем выходы (это только для TIM1) TIM_CCxCmd(TIM1,TIM_Channel_4,TIM_CCx_Enable); // разрешаем таймеру управлять выводом PA11 TIM_ITConfig(TIM1, TIM_IT_CC4, DISABLE); // запрещаем пока таймеру генерировать прерывание по совпадению NVIC_EnableIRQ(TIM1_CC_IRQn); // разрешаем прерывания TIM_Cmd(TIM1, DISABLE); // Выключаем таймер (пока ждем) } void TIM1_CC_IRQHandler(void) // прошло 130 мкс { if (TIM_GetITStatus(TIM1, TIM_IT_CC4) != RESET) { // по совпадению TIM_ClearITPendingBit(TIM1,TIM_IT_CC4); // сбрасываем флаг прерывания TIM1 по совпадению } NVIC_EnableIRQ(TIM1_CC_IRQn); // выключаем прерывания от таймера TIM_ITConfig(TIM1, TIM_IT_CC4, DISABLE); // TIM1->ARR = 40-1; // устанавливаем период 40 мкс TIM1->CCR4 = Test_Buf[0]; // ширину из массива для следующего импульса DMA1_Channel4->CNDTR = 4; // длина данных для DMA на 1 меньше т.к. уже установили выше 1 элемент TIM_DMACmd(TIM1,TIM_DMA_CC4,ENABLE); // разрешаем таймеру делать запрос к DMA по совпадению CCR DMA_Cmd(DMA1_Channel4, ENABLE); // включаем DMA } void Init_DMA(void) { RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); // включаем тактирование DMA1 DMA_Setting.DMA_PeripheralBaseAddr = (uint32_t) &TIM1->CCR4; // куда копировать DMA_Setting.DMA_MemoryBaseAddr = (uint32_t) &Test_Buf[1]; // что копировать DMA_Setting.DMA_DIR = DMA_DIR_PeripheralDST; // копируем в периферию (Peripheral Destination, точка назначения - периферия) DMA_Setting.DMA_BufferSize = 0; // количество передаваемых данных DMA_Setting.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // адрес периферии постоянный DMA_Setting.DMA_MemoryInc = DMA_MemoryInc_Enable; // адрес в памяти увеличиваем DMA_Setting.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; // периферия 16 бит DMA_Setting.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; // массив 8 бит DMA_Setting.DMA_Mode = DMA_Mode_Normal; // режим обычный DMA_Setting.DMA_Priority = DMA_Priority_Medium; // приоритет средний DMA_Setting.DMA_M2M = DMA_M2M_Disable; // MemoryToMemory откл. DMA_Init(DMA1_Channel4, &DMA_Setting); // TIM1_CH4 относится к 4-му каналу DMA1 DMA_ITConfig(DMA1_Channel4, DMA_IT_TC, ENABLE); // настраиваем прерывание по окончанию передачи NVIC_EnableIRQ(DMA1_Channel4_IRQn); // включаем прерывания от 4-го канала DMA1 DMA_Cmd(DMA1_Channel4, DISABLE); // пока выключаем 4-ый канал DMA1 } void DMA1_Channel4_IRQHandler(void) // закончили передавать { if (DMA_GetITStatus(DMA1_IT_TC4) != RESET) { // по совпадению DMA_ClearITPendingBit(DMA1_IT_TC4); // сбрасываем флаг прерывания DMA1 Channel4 transfer complete } if (TIM_GetITStatus(TIM1, TIM_IT_CC4) != RESET) { // по совпадению TIM_ClearITPendingBit(TIM1,TIM_IT_CC4); // сбрасываем флаг прерывания TIM1 на всякий случай } TIM1->ARR = 150-1; // вновь настраиваем на период 150 мкс TIM1->CCR4 = 0; // и ждем следующею передачу TIM1->CNT = 0; // TIM_DMACmd(TIM1,TIM_DMA_CC4,DISABLE); // всё выключаем DMA_Cmd(DMA1_Channel4, DISABLE); // TIM_Cmd(TIM1, DISABLE); // TIM_ITConfig(TIM1, TIM_IT_CC4, DISABLE); // TIM_CCxCmd(TIM1,TIM_Channel_4,TIM_CCx_Disable); } int main(void) { Init_GPIO(); Init_TIM_Transmit(); Init_DMA(); delay_ms(1000); while(1) { TIM1->CCR4 = 130-1; // до включения линия удерживается в 0 (CCR=0) TIM_ITConfig(TIM1, TIM_IT_CC4, ENABLE); TIM_CCxCmd(TIM1,TIM_Channel_4,TIM_CCx_Enable); TIM_Cmd(TIM1, ENABLE); delay_ms(100); } }  
      TEST_TIM_DMA.zip
    • By Юра Махович
      Доброго времени суток!
      Друг попросил сделать эму некий аппарат: пищалку, которая издает звук с определенным периодом.
      Пример работы: сигнал 2 секунды, тишина 1 минуту, потом опять по новой.

      Так вот, программу написал, и вроде как даже работает, но как-то не стабильно..
      Иногда пропустит один цикл, иногда (почти всегда) после нескольких минут вообще перестает работать.
      Использую сон ради экономии батареи, т.к. устройство автономно.
      Генерирую ШИМ на ноге PB0. переключатели подсоединены к PB3 PB4.
      Прошу помогите найти ошибку, а то я уже не знаю что тут не так..
    • By Serega4789
      Добрый день всем помогите разобраться со схемой сварочного инвертора , горят транзисторы на максимальном токе !!! Imma-315 инвертор трёх фазный...


      Управляющие импульсы шим приходят на полевые транзисторы затем с них на первый и второй трансформаторы , далее на комплиментарные пары 8050 и 8550
      Импульсы приходят на затворы igbt с 2ух выходов  2 плеча ,задействованы 2 выхода и 4 igbt транзистора fgl40, на мертвое время sg3525 стоит 100 ом резистор , трансформаторы, я так понял нужны для гальванической развязки осциллограммы сброшу позже , без силы 
      Исправны только 2 транзистора ..
      Хочу изменить максимальный выходной  ток , уменьшить...
  • Сообщения

    • Сколько написали. ) По щупам - их нет родных, в описании присутствуют действительно по недогляду.  Отсутствие всего остального просто объясняется. Прибор стоял на витрине (в стеклянном шкафчике). В результате коробка со всем прилагающимся была торжественно утеряна.   Цена 10. Без торга.
    • спасибо, а с материнской платы подойдёт для этого?
    • Ну дак дросель на вакууме(в данном случае воздух) наверно не хуже феррита по потерям на гистерезис,ёмкость- но это ещё надо измерить Ну понятно такие воздушные дросселя нежелательны для ибп,от них дикие наводки на ОС,но если они уже есть по монтажным причинам Кстати какой у них материал? типо магнитного усилителя с прямоугольной петлёй?
    • А кто верил, Котэйко? Так он и сам от этого шамана недалеко... Так и предполагалось, что что то эдакое всплывёт. А продолжение видится такое - "шаман" сядет (не знаю, в какое учреждение), Ворон это исчезнет (скорей всего), а самую близкую группу "единомышленников" - кого куда, кто успеет удрать - удерёт, а кто менее проворный - пожалте бриться...   Я про Москву и не думал... дойдёт он там куда то... ага, таких ходоков... молчу, молчу...
    • Дело не только в индуктивности, а в материале бусины.
    • Нет, это обычный UART. К прошивке никакого отношения не имеет. Понятное дело, что даташиты для лохов.   Эта хрень обычный USB-UART адаптер, никакого отношения к программаторам оно не имеет. Прошить через него можно лишь тот чип, который имеет бутлоадер. Сюда производитель его 100% не делал, ибо прошивка простейшая и памяти мизер.   Да и что-то мне подсказывает, что производитель далеко не из вредности сделал блокировку по времени. А как раз таки для того, чтобы различные жопошники не продолжали использовать их бесконечно долго, и не нажрались какой-нибудь заразы, которая отлично плодится в этих самых фильтрах.
×
×
  • Create New...