1. Уважаемый Гость! При написании вопросов в раздел форума [ArduCopter] Вопросы, проблемы и решения обязательно придерживаться шаблона сообщения, оговоренного в правилах раздела! Если сообщение не будет оформлено должным образом, то и ответ на вопрос будет с наименьшим приоритетом. Старайтесь дать максимально полную информацию по вашей проблеме, чтобы можно было более детально рассматривать вопрос!
    Скрыть объявление
  2. Уважаемый Гость! Хотите получать кэшбэк с покупок в online-магазинах? Сервис "Zozi.ru" дает такую возможность!
    Скрыть объявление
  3. Друзья! Для нашего ресурса необходим дополнительный объем пространства в облаке Dropbox. Подробнее.
    Скрыть объявление

RC-Switch - три разных переключателя для радиоуправления

Тема в разделе "Оборудование и комплектующие", создана пользователем cap_Nemo, 28 май 2020.

Реклама. Купить это место.
  1. cap_Nemo

    cap_Nemo Студент

    Регистрация:
    27 апр 2020
    Сообщения:
    50
    Город:
    Апатиты
    Имя:
    Игорь
    RC Switch logotip.JPG
    RC SWitch 3х поз перекл Servo на AtTiny13

    Servo переключатель на 2-3 позиции (в 2х позиционном срабатывают только крайние положения).
    Во фьюзах при прошивке выставить 9,6 Mhz внутренний генератор,
    остальные по умолчанию (не трогаем).

    3х RС Switch.JPG

    RC SWitch 6и поз перекл Servo на AtTiny13
    Servo переключатель на 6 позиций (первая позиция - все выключено и 5 переключений).
    Во фьюзах при прошивке выставить 9,6 Mhz внутренний генератор,
    и RSTDISBL=0. ВНИМАНИЕ !!! при программировании этого фьюза перестанет работать
    последовательное программирование (перепрограммировать можно только
    на параллельном программаторе).
    RS-Switch 6 позиций.JPG


    LED и Писк - 3x поз перекл Servo на AtTiny13
    Servo переключатель освещения квадрокоптера. Имеет три режима:
    Первый - выключено.
    Второй - Включено мерцание LED.
    Третий - Включено мерцание LED и поисковый писк.
    Если используется 2х позиционный тумблер, то два режима - первый (выкл.) и третий (все вкл.)
    "AtTiny13 Зуммер LED для Квадрика.lay6" печатная плата.
    Во фьюзах при прошивке выставить 9,6 Mhz внутренний генератор,
    остальные по умолчанию (не трогаем).

    RS-Switch LED.JPG

    Демонстрация работы:
    https://www.youtube.com/watch?v=jNNY-U0g66Y

    Файлы схем и прошивки:
    http://forum.apmcopter.ru/attachments/rs-switch-zip.8466/
     

    Вложения:

    • RС-Switch.zip
      Размер файла:
      300,7 КБ
      Просмотров:
      3
    Последнее редактирование модератором: 3 июн 2020
    5yoda5 нравится это.
  2. 5yoda5

    5yoda5 Master Команда форума

    Регистрация:
    29 янв 2015
    Сообщения:
    7.137
    Город:
    Реж
    Имя:
    Тимур
    А исходников случайненько нету?
    Вдруг кому-то понадобится...
    И я правильно понял, на выход серво подается уже тактированный сигнал? Сколько us?
     
  3. cap_Nemo

    cap_Nemo Студент

    Регистрация:
    27 апр 2020
    Сообщения:
    50
    Город:
    Апатиты
    Имя:
    Игорь
    Если надо дам и исходники. Сигнал гонял с Servo тестера от 1 до 2 mS. На видео видно.
     
  4. polovichok

    polovichok Абитуриент

    Регистрация:
    13 июл 2019
    Сообщения:
    2
    Город:
    Белгород, Белгородская область, Россия
    Имя:
    Герман
    Добрый день! Мне бы тоже пригодились исходники. Если возможно.
     
  5. cap_Nemo

    cap_Nemo Студент

    Регистрация:
    27 апр 2020
    Сообщения:
    50
    Город:
    Апатиты
    Имя:
    Игорь
    Date : 01.04.2020
    Author : Кузенков
    Company : Home
    Comments: Режимы: Off - Led (плавное разгорание-затухание) - Led+Писк
    3х позиционный тумблер на RS Switch
    Chip type : ATtiny13
    AVR Core Clock frequency: 9,600000 MHz
    Memory model : Tiny
    External RAM size : 0
    Data Stack size : 16
    *****************************************************/
    //--------------------------------------------------------------
    //----------------Библиотеки------------------------------------
    //--------------------------------------------------------------
    #include <tiny13.h>
    #include <sleep.h> // здесь описаны режимы сна
    #include <io.h>
    #include <delay.h>

    #define F_CPU 960000UL // частота процессора
    // #define LED_1 170 // LED яркость = 50% 170
    // #define LED_2 89 // LED яркость = 70%
    #define Ms 8 // 2 сек загорания Мы=8
    #define interrval_3 280 // 200 длинна писка (0,2 сек)
    #define interrval_1 250 // 500 длинна писка (0,5 сек)
    #define interrval_2 300 // 3000 пауза писка (2,5 сек)
    #define dlinna2 520
    #define dlinna3 680
    //--------------------------------------------------------------
    //----------------Переменные------------------------------------
    //--------------------------------------------------------------
    volatile unsigned char ee_ON; // RAM состояние фонарика при включении (меняется при пропадании питания)
    volatile unsigned char ram_OCR0A=255; // Ram переменная изменения яркости
    //volatile unsigned char flag_ON=0;
    volatile unsigned char Regim=1; // LED яркость 70% =0, 50% =1
    //volatile unsigned char timer=0;
    volatile unsigned int ACP_Schetchik; // переменные АЦП
    volatile unsigned long ACP_Summa; // переменные АЦП
    unsigned long ADCdata; // Буферная переменная для. хранения
    volatile unsigned int interrval=0;
    volatile unsigned int dlinna=0; // длинна импульса внешнего прерывания
    __eeprom volatile unsigned int dlinna1; // для проверки
    //--------------------------------------------------------------
    //----------------Прерывание внешнее----------------------------
    //--------------------------------------------------------------
    interrupt [EXT_INT0] void ext_int0_isr(void)
    { //Обработака нажатия кнопки
    if ((PINB.1==1)&&(ee_ON|=2)) //Опять проверяем нажатие
    {// unsigned int r;
    dlinna=0;
    for (;PINB.1==1;)
    { dlinna++;
    // for (r=0;r<255;r++) {}
    }
    if (dlinna>dlinna3) ee_ON = 3;
    if ((dlinna<dlinna3)&&(dlinna>dlinna2)) ee_ON = 0; //Включаем режим пищания и моргания
    if (dlinna<dlinna2) ee_ON = 1;

    dlinna1=dlinna;
    }
    }
    //--------------------------------------------------------------
    //----------------Прерывание АЦП--------------------------------
    //--------------------------------------------------------------
    //interrupt (ADC_vect)
    interrupt [ADC_INT] void adc_isr(void) // Обработчик прерывания от интегрированного АЦП
    {
    // unsigned long ADCdata; // Буферная переменная для. хранения
    ADCdata = ADCW; // результата преобразования
    if (ACP_Schetchik>=999) // програмка складывает 1000 значений измерений АЦП
    { // для вычисления среднего значения и исключения импульсних помех
    // if (ACP_Summa>= 900000) Regim=0;
    if (ACP_Summa< 900000) // 900*1000 если АЦП меньше 900 уходим в спячку
    { // если только что не была нажата клавиша (включено питание)
    ee_ON=2;
    }
    ACP_Summa=0;
    ACP_Schetchik=0;
    }
    else {ACP_Schetchik++; ACP_Summa+=ADCdata;}
    ADCSRA = ADCSRA | 0x40; // Устанавливаем разряд ADSC в регистре ADCSR, чтобы начать новое преобразование
    }
    //=============================================================
    //=============Start программы (Reset)=========================
    //=============================================================
    void main(void)
    {
    // Crystal Oscillator division factor: 1
    #pragma optsize-
    CLKPR=0x80;
    CLKPR=0x00;
    #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
    #endif
    //-------------------------------------------------------
    //---------Настроййка порта B----------------------------
    //-------------------------------------------------------
    // Func5=In Func4=In Func3=In Func2=In Func1=In Func0=Out
    // State5=T State4=T State3=T State2=T State1=T State0=0
    PORTB=0b00000100; // подтяжка=0 (=1)
    DDRB=0b00001001; // ввод=0 вывод=1
    //------------------------------------------------------
    //---------Настроййка Таймера 0-------------------------
    //-------------------------------------------------------
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=0xFF
    // OC0A output: Disconnected
    // OC0B output: Disconnected
    TCCR0A = 0b11000001; // управление выходом, ШИМ (только шим) Для N-канальлного транзистора
    TCCR0B = 0b00000001; // делитель N = 1 (только шим) Таблица выше
    //TCNT0=0x00;
    // OCR0A = 128; // Значение регистра определяет яркость светодиода
    //OCR0B=0x00;
    /*
    Это делается с помощью битов CS02 CS01 CS00 регистра TCCR0B.
    CS02 | CS01 | CS00
    0 | 0 | 0 - таймер/счетчик остановлен
    0 | 0 | 1 - нет предделителя *
    0 | 1 | 0 - предделитель 8 **
    0 | 1 | 1 - предделитель 64 **
    1 | 0 | 0 - предделитель 256 **
    1 | 0 | 1 - предделитель 1024 **
    */
    //-------------------------------------------------------------
    //---------Настройка Внешних прерываний------------------------
    //-------------------------------------------------------------
    // INT0: On
    // INT0 Mode: Low level
    // Инициализация прерываний по INT0
    //GIMSK = 0b01000000; // Разрешение прерываний INT0 на входе PB1
    //MCUCR = 0b00000000; // при перепаде низком уровне на PB1
    GIMSK = ( 1 << INT0 );
    MCUCR = (1<<ISC01) | (1<<ISC00); // по фронту
    //------------------------------------------------------
    // Timer/Counter 0 Interrupt(s) initialization
    TIMSK0=0x00;
    //------------------------------------------------------
    //----------Настройка Аналогового компаратора-----------
    //-------------------------------------------------------
    // Analog Comparator: On
    // The Analog Comparator's positive input is
    // connected to the Bandgap Voltage Reference
    ADMUX = 0b01000010; // Назначаем в качестве аналогового входа РB4 ;
    ADCSRA = 0b11001110; // * 0b11001110 - активизируем АЦП с коэффициентом деления 128,
    // разрешаем прерывание от АЦП и начинаем преобразование */
    ACP_Schetchik=0;
    //------------------------------------------------------
    // Digital input buffer on AIN0: On
    // Digital input buffer on AIN1: On
    DIDR0=0x00;
    //------------------------------------------------------
    // ADC initialization
    //ADCSRA=0x00; // ADC disabled
    ADCSRA = 0b11001110; // включаем ацп после сна
    //------------------------------------------------------
    ram_OCR0A = OCR0A = 255; // выкл. LED
    //------------------------------------------------------
    //PORTB.3 = 1;
    PORTB.2 = 0;
    Regim=0;
    #asm("sei") // разрешаем прерывания
    //=======================================================
    while (1)
    {volatile unsigned char p;
    interrval++;
    delay_ms (Ms);

    if((ee_ON==0)||(ee_ON==3))
    {
    if(Regim==0) // вкл.LED после сна при разяж.батарее (плавное уменьш.яркости до 0%)
    {
    if(ram_OCR0A<255)
    {
    ram_OCR0A++;
    OCR0A = ram_OCR0A;
    // delay_ms (Ms);
    }
    else
    {
    Regim=1;
    // delay_ms (Ms);
    }
    }
    if(Regim==1)
    {
    if(ram_OCR0A>0)
    {
    ram_OCR0A--;
    OCR0A = ram_OCR0A;
    // delay_ms (Ms);
    }
    else
    {
    Regim=0;
    delay_ms (Ms);
    }
    }
    if ((interrval>=interrval_1)&&(interrval<=interrval_2)&&(ee_ON==3))
    {
    PORTB.3 = 1; // включаем писк
    }
    }
    if (interrval>interrval_2)
    {
    PORTB.3 = 0; // выключаем писк
    interrval=0;
    }



    if (ee_ON==1)
    {
    for (p=OCR0A; p<255; p++) // плавно гасим LED
    { OCR0A=p; delay_ms (Ms); }
    ram_OCR0A = OCR0A = 255;
    }

    if (ee_ON==2) // Программа засыпания
    { volatile unsigned char p;
    ADCSRA = 0x00; // выключаем АЦП
    for (p=OCR0A; p<254; p++) // плавно гасим LED
    { OCR0A=p; delay_ms (Ms); }
    PORTB.3 = 0; // выключаем вывод измерения АЦП
    ram_OCR0A = OCR0A = 255; // ШИМ ставим на ноль ( быстро выключаем LED )
    sleep_enable(); // разрешение режима сна
    // while (PINB.1==0) {} //Все ждем отпускание кнопки
    idle(); // активация режима сна (прерывания и таймеры работают)
    }
    }
    }
     
  6. polovichok

    polovichok Абитуриент

    Регистрация:
    13 июл 2019
    Сообщения:
    2
    Город:
    Белгород, Белгородская область, Россия
    Имя:
    Герман
Реклама. Купить это место.