Jump to content

Bartle96

Members
  • Content Count

    74
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Bartle96

  • Rank
    Осваивающийся

Информация

  • Город
    Саратов

Электроника

  • Стаж в электронике
    1-2 года
  • Сфера радиоэлектроники
    питание, радиосвязь
  1. Всем привет! Есть датчик, У него 3 контакта. Плюс, минус и сигнальный. По схеме сигнальный контакт датчика выдает напряжение от 0 до 5 вольт. Подскажите как сделать схему которая будет выключать реле, когда напряжение с сигнального контакта датчика будет больше 3 вольт? Примерная схема
  2. Ух ты! Классно! Скажите, а как это работает? Как долго будет нажиматься кнопка? (Нужно примерно секунду) как называется транзистор? Откуда будет браться ток при выключении реле, что бы нажать кнопку еще раз?
  3. Мне не нужно ее замыкать, мне надо ее нажать на 1 секунду. Нажать это значит замкнуть на 1 секунду и разомкнуть. На реле подается ток и кнопка нажимается. С реле ток пропадает и кнопка нажимается еще раз
  4. Всем привет! Есть кнопка включения кондиционера. Кнопку нужно именно нажимать. Например на 1 секунду. Что бы включить или выключить кондиционер. Есть термостат, но он работает по другому. Он замыкает реле когда температура ниже уровня. Как сделать что бы это реле нажимало кнопку?
  5. Всем привет! Имеется импульсный блок питания увлажнителя воздуха. Там сгорел полевой транзистор 4N65, в магазине его не было, предложили взять аналог, 6N70. Сказали что он подойдет. И правда, они похоже по характеристикам, но все же есть отличия. Скажите пожалуйста подойдет ли мне он? Спасибо...
  6. Я уверен что с этой sensor_t sensor1; надо что то сделать!
  7. /* * GccApplication3.c * -Сенсорная клавиатура- * Created: 12.02.2014 7:20:02 * Author: Писанец Александр Николаевич * Канал на Youtube - https://www.youtube.com/channel/UCczziZl2-kvBUhzX9awdNEA */ #include <avr/io.h> #include <avr/interrupt.h> //подгружаем прерывание #include <avr/eeprom.h> //=========================// //оптимизация Os3 в Atmel Studio USART 9600bit, 1 стоп бит , 8бит размер слова #define Zvyk_PORTA 3 //для звука назначаем портD, 7 ножка порта #define Indikasia_PORTA 0 //куда подключен светодиод ( #define Kalibrovka_PORTD 7 //кнопка для калибровки клавиотуры #define Knopka_Blok 10 //снятие блока назначте любую действующую кнопку #define Kalibrovka_Sensop 0 //чуствительность клавиотуры (калибровка клавиотуры) #define Koli_Sensorov 12 //количество сенсорных кнопок (макс 20) // ниже перечисляем подключение кнопок сколько указали в Koli_Sensorov // обезательно! назначаем сенсоры подряд Sensor_1 ,Sensor_2,и т.д. #define Sensor_1_PORTB 3 //первый сенсор 3 пин на PORTB #define Kod_Sensora1 1 //в случае нажатия первого сенсора код 1 (макс 255) будет передан USARTOM #define Sensor_2_PORTB 1 #define Kod_Sensora2 2 #define Sensor_3_PORTD 3 #define Kod_Sensora3 3 #define Sensor_4_PORTB 2 #define Kod_Sensora4 4 #define Sensor_5_PORTB 4 #define Kod_Sensora5 5 #define Sensor_6_PORTD 2 #define Kod_Sensora6 6 #define Sensor_7_PORTA 1 #define Kod_Sensora7 7 #define Sensor_8_PORTC 7 #define Kod_Sensora8 8 #define Sensor_9_PORTC 1 #define Kod_Sensora9 9 #define Sensor_10_PORTA 2 #define Kod_Sensora10 10 #define Sensor_11_PORTC 6 #define Kod_Sensora11 11 #define Sensor_12_PORTC 0 #define Kod_Sensora12 12 //=========================// #include "Kalibrovka_Klaviaturi.h" //предынструкции для компилятора volatile unsigned char Sostoania_Knopok[Koli_Sensorov],Kalibrovka_Knopok[Koli_Sensorov]; volatile unsigned char KolProverka_Klava =0,Temp_Klava = 0,Vibor_Klava = 0,Sot_Klava = 0,Da_Klava = 0,No_Klava = 0,Danie_Klava = 0; volatile unsigned char Bit_Klava = 0,Nomer_Klava = 0,Temp2_Klava = 0,Bit2_Klava = 0; unsigned char S = 0,X = 0,Q = 0,Pauza_Klava = 0,Ss = 0,Sa = 0,Ff = 0,Pauza_Vikl1 = 0,Pauza_Vikl2 = 0,AA = 0; unsigned int D = 0,A = 0; ISR(USART_UDRE_vect) // регистра данных на передачю пуст { UCSRB &=~(1 << UDRIE); //прерывания по опусташению регистра данных на передачю запрещаем } //========================// ISR (TIMER0_COMP_vect) //прерывание таймера T0 { Pauza_Klava++; //==================// //время до блока клавиотуры //=================// if (Bit2_Klava & (1<<0)) {} else { if (( Pauza_Vikl1++ ) > 253 ) { Pauza_Vikl1 = 0; if (( Pauza_Vikl2++ ) > 253 ) { Pauza_Vikl2 = 0; Bit2_Klava|=(1<<0); //блок клавиотуры включон Bit_Klava |= (1<<5); //разрешаем мегать светодиодом Ff = 30; } } } //===============// //кнопка калибровки //==============// if ( Bit_Klava & (1<<7) ) // запущен или нет процес калиброки {} else { if ( PIN_Kalibrovka & (1 << Bit_Kalibrovka )) // проверка нажата или нет кнопка { if ( Bit_Klava & (1<<3)) // кнопка была нажата разрешаем сканирование на оджатие { Q--; if (Q == 0) Bit_Klava &=~ (1<< 3); } else Q = 0; } else { if ( Bit_Klava & (1<<3)) //кнопка не была нажата Q = 100; else { Q++; if (Q == 100) Bit_Klava = 136; //разрешаем работу калибровки и фиксируем нажатие кнопки } } } //===============// //работа визера //===============// if (Bit_Klava & (1<<4)) //писк на визер { if ((D++) > A ) { D = 0; if (( X++) > 3 ) { Bit_Klava &=~ (1<<4); X = 0; } else { if ( PIN_Zvuk & (1 << Bit_Zvuk)) { Zvuk_PORT &=~(1<<Bit_Zvuk); } else { Zvuk_PORT |=(1<<Bit_Zvuk); } } } } //==============// //мигание светодирда //==============// if (Bit_Klava & (1<<5)) { if ( (S++) > 200 ) { S = 0; if ((Sa++) > Ff ) { Sa = 0; if ( Indikasia_PIN & (1 << Indikasia_Bit)) Indikasia_PORT &=~(1 << Indikasia_Bit ); else Indikasia_PORT |=(1 << Indikasia_Bit ); } } } } //*****************************// //*****************************// //работа с сенсорными кнопками //*****************************// //*****************************// void Klava_Proverka ( unsigned char Bit_Klava,volatile unsigned char *D_0, unsigned char *D_1) { asm("cli"); Temp_Klava = 0; *D_1 &=~( 1 << Bit_Klava); // while (1) { if (*D_0 & (1<< Bit_Klava)) break; else Temp_Klava ++; } *D_1 |=( 1 << Bit_Klava); //переводим порт на выход if (!( Temp_Klava < Temp2_Klava))//проверка на состояние кнопки сравнение с калибровкой Da_Klava++; //фиксируется нажатие if ((Sot_Klava++ )== 5) //количество проверок кнопки подряд { if ( Da_Klava > 2 ) { Sostoania_Knopok[ Vibor_Klava ] = Sostoania_Knopok[ Vibor_Klava ] + 1; } else { Sostoania_Knopok[ Vibor_Klava ] = 0; } Vibor_Klava ++; Da_Klava = 0; Sot_Klava = 0; } asm("sei"); } //****************************// //****************************// // //*****************************// //*****************************// void PROVERKA_DANIX() { volatile unsigned char Temp_Klava1 = 0,Sot1_Klava = 0; if ((KolProverka_Klava++) > 12 ) //через сколько количество проверок массива { KolProverka_Klava = 0; Vibor_Klava = 0; //==================// //подпрограмма калибровки //==================// if (Bit_Klava & (1<<7)) { Pauza_Vikl1 = 0; //зброс времени блока клавиотуры Pauza_Vikl2 = 0; //зброс времени блока клавиотуры Bit2_Klava &=~(1<<0); //блок клавиотуры выключон if ( Bit_Klava & (1<<6)) {} else { Bit_Klava |=(1<<5); Ff = 3; while (Vibor_Klava < Koli_Sensorov) { Sostoania_Knopok[ Vibor_Klava ] = 0; //очищаем масcив Kalibrovka_Knopok[ Vibor_Klava++ ] = 0; } Bit_Klava |=(1<<6) ; return; } while (Vibor_Klava < Koli_Sensorov) // сканируем 'Koli_Sensorov' раз весь массив { KolProverka_Klava = Sostoania_Knopok [Vibor_Klava]; //считуем состояние кнопок с массива if ( KolProverka_Klava > 1 ) //проверка на наличие данных в масиве больше 5 тогда фиксируем нажатие { Sot1_Klava = 2; //зафексировано высокое состояние кнопки Kalibrovka_Knopok[Vibor_Klava] = Kalibrovka_Knopok[Vibor_Klava] + 1; } Sostoania_Knopok[ Vibor_Klava ] = 0; //очищаем масcив Vibor_Klava ++; } if ( Sot1_Klava == 0 ) { Bit_Klava &=~(1<<7); Bit_Klava &=~(1<<6); Vibor_Klava = 0; while (Vibor_Klava < Koli_Sensorov) { Kalibrovka_Knopok[Vibor_Klava] = Kalibrovka_Knopok[Vibor_Klava] + Kalibrovka_Sensop; //4 eeprom_write_byte(Vibor_Klava, Kalibrovka_Knopok[Vibor_Klava]); //запись в eeprom данных калибровки Vibor_Klava++; } Bit_Klava &=~(1<<5); Indikasia_PORT &=~(1 << Indikasia_Bit ); } KolProverka_Klava = 0; return; } //========================// //подпрограмма считывания кнопки нажата и оджата //========================// while (Vibor_Klava < Koli_Sensorov) // сканируем 'Koli_Sensorov' раз весь массив { KolProverka_Klava = Sostoania_Knopok [Vibor_Klava]; //считуем состояние кнопок с массива // ===========================// if ( Bit_Klava & (1<<0) ) //зафиксировано или нет нажатие кнопки { if (Bit2_Klava != (1<<0) ) // если блок включон то не выполняется { Pauza_Vikl1 = 0; //зброс времени блока клавиотуры Pauza_Vikl2 = 0; //зброс времени блока клавиотуры Bit_Klava &=~(1<<5); } else { if ( Nomer_Klava == Vibor_Klava ) { if ((Knopka_Blok-1) == Vibor_Klava ) { if ( (Pauza_Vikl1++) > 10 ) //пауза на удержание кнопки { Pauza_Vikl1 = 0; //зброс времени блока клавиотуры Pauza_Vikl2 = 0; Bit2_Klava &=~(1<<0); A = 1500; //работа для звука Indikasia_PORT |=(1 << Indikasia_Bit ); Bit_Klava |=(1<<4); } } } } } //==========================// else { if (Bit2_Klava & (1<<0) ) // если блок включон то выполняется Pauza_Vikl1 = 0; if (KolProverka_Klava > 7 ) //проверка на наличие данных в масиве больше 5 тогда фиксируем нажатие { if ( Temp_Klava1 == 0 ) //обнаружено нажатие первое { Temp_Klava1 = KolProverka_Klava; //сохраняем первое значение Nomer_Klava = Vibor_Klava; //сохраняем номер ячейки с масива Bit_Klava |= (1<<2); //зафиксировано нажатие } else { if ( KolProverka_Klava > 1 ) // проверка на третее нажатие Bit_Klava &=~ (1<<2); //была обнаружена ошибка } } } Sostoania_Knopok[ Vibor_Klava ] = 0; //очищаем масcив Vibor_Klava ++; } } //========================================// if ( Bit_Klava & (1<<1) ) //кнопка оджата { if (Bit2_Klava != (1<<0) ) //если блок то невыполняется Indikasia_PORT &=~(1 << Indikasia_Bit ); Bit_Klava &=~ ((1<<0)|(1<<1)); AA &=~(1<<0); } if ( Bit_Klava & (1 << 2)) //зафексировано нажатие или нет { if ( Temp_Klava1 < 7 ) //на правельное нажатие { Pauza_Vikl1 = 0; //зброс времени блока клавиотуры Pauza_Vikl2 = 0; //зброс времени блока клавиотуры Bit_Klava &=~ (1<<2); //не зафиксировано нажатие return; } A = 100; //работа для звука if (Bit2_Klava != (1<<0) ) //если блок то невыполняется { Bit_Klava &=~(1<<5); switch ( Nomer_Klava + 1) { case 1 : UDR = Kod_Sensora1; break; case 2 : UDR = Kod_Sensora2; break; case 3 : UDR = Kod_Sensora3; break; case 4 : UDR = Kod_Sensora4; break; case 5 : UDR = Kod_Sensora5; break; case 6 : UDR = Kod_Sensora6; break; case 7 : UDR = Kod_Sensora7; break; case 8 : UDR = Kod_Sensora8; break; case 9 : UDR = Kod_Sensora9; break; case 10 : UDR = Kod_Sensora10; break; case 11 : UDR = Kod_Sensora11; break; case 12 : UDR = Kod_Sensora12; break; case 13 : UDR = Kod_Sensora13; break; case 14 : UDR = Kod_Sensora14; break; case 15 : UDR = Kod_Sensora15; break; case 16 : UDR = Kod_Sensora16; break; case 17 : UDR = Kod_Sensora17; break; case 18 : UDR = Kod_Sensora18; break; case 19 : UDR = Kod_Sensora19; break; case 20 : UDR = Kod_Sensora20; break; } UCSRB |=(1 << UDRIE); //передача по USART Indikasia_PORT |=(1 << Indikasia_Bit ); Bit_Klava |=(1<<4); } Bit_Klava &=~(1<<2); Bit_Klava |=(1<<0); } } //**********************************// int main(void) { Bit_Klava = 0; PORTA = Bit_Klava; PORTB = 0; PORTC = 0; PORTD = 0; //==========// DDRD |=(1<<1); //вывода USART (TXD) DDRB |=(1<<0); //вывода USART (RXD) UBRRH = 0; UBRRL = 103; //9600 бит. UCSRB |= (1 << RXCIE)|(1<<TXEN);//|(1<<UDRIE);// //разрешаем прерывание завершение приема (RXCIE),регистр данных чист(UDRIE),разрешаем прием (RXEN),разрешение передачи(TXEN) UCSRC |= (1 << URSEL)|(1 << UCSZ1)|(1 << UCSZ0); //выбор регистра (URSEL),1 стоп бит (USBS), 8бит размер слова //==========// DDR_Zvuk |= (1 << Bit_Zvuk ); Indikasia_DDR |=(1 << Indikasia_Bit); Kalibrovka_PORT |=(1 << Bit_Kalibrovka ); DDR_Kalibrovka &=~(1 << Bit_Kalibrovka ); Sensor_1_DDR |=(1 << Sensor_1_Bit); Sensor_2_DDR |=(1 << Sensor_2_Bit); Sensor_3_DDR |=(1 << Sensor_3_Bit); Sensor_4_DDR |=(1 << Sensor_4_Bit); Sensor_5_DDR |=(1 << Sensor_5_Bit); Sensor_6_DDR |=(1 << Sensor_6_Bit); Sensor_7_DDR |=(1 << Sensor_7_Bit); Sensor_8_DDR |=(1 << Sensor_8_Bit); Sensor_9_DDR |=(1 << Sensor_9_Bit); Sensor_10_DDR |=(1 << Sensor_10_Bit); Sensor_11_DDR |=(1 << Sensor_11_Bit); Sensor_12_DDR |=(1 << Sensor_12_Bit); Sensor_13_DDR |=(1 << Sensor_13_Bit); Sensor_14_DDR |=(1 << Sensor_14_Bit); Sensor_15_DDR |=(1 << Sensor_15_Bit); Sensor_16_DDR |=(1 << Sensor_16_Bit); Sensor_17_DDR |=(1 << Sensor_17_Bit); Sensor_18_DDR |=(1 << Sensor_18_Bit); Sensor_19_DDR |=(1 << Sensor_19_Bit); Sensor_20_DDR |=(1 << Sensor_20_Bit); Ss = 20 - Koli_Sensorov ; Real_EEPROM(); OCR0=1; TCCR0=0b00001101; TIMSK|=(1<<1); //=============// while (1) { Temp2_Klava = Kalibrovka_Knopok[ Vibor_Klava ]; if ( Vibor_Klava == Koli_Sensorov ) Vibor_Klava = 100; if (Bit_Klava & (1<<0) ) { if ( Nomer_Klava == Vibor_Klava ) { if ( Sostoania_Knopok [Nomer_Klava] == 0 ) { AA++; if ( AA == 200 ) { Bit_Klava |=(1<<1); AA = 0; } } else { AA = 0; } } } switch (Vibor_Klava) { case 0 : //номер ячейки в масиве онже номер кнопки "0" Klava_Proverka(Sensor_1_Bit,&Sensor_1_PIN,&Sensor_1_DDR); break; case 1 : //номер ячейки в масиве онже номер кнопки "1" Klava_Proverka(Sensor_2_Bit,&Sensor_2_PIN,&Sensor_2_DDR); break; case 2 : //номер ячейки в масиве онже номер кнопки "2" Klava_Proverka(Sensor_3_Bit,&Sensor_3_PIN,&Sensor_3_DDR); break; case 3 : //номер ячейки в масиве онже номер кнопки "3" Klava_Proverka(Sensor_4_Bit,&Sensor_4_PIN,&Sensor_4_DDR); break; case 4 : //номер ячейки в масиве онже номер кнопки "4" Klava_Proverka(Sensor_5_Bit,&Sensor_5_PIN,&Sensor_5_DDR); break; case 5 : //номер ячейки в масиве онже номер кнопки "5" Klava_Proverka(Sensor_6_Bit,&Sensor_6_PIN,&Sensor_6_DDR); break; case 6 : //номер ячейки в масиве онже номер кнопки "6" Klava_Proverka(Sensor_7_Bit,&Sensor_7_PIN,&Sensor_7_DDR); break; case 7 : //номер ячейки в масиве онже номер кнопки "7" Klava_Proverka(Sensor_8_Bit,&Sensor_8_PIN,&Sensor_8_DDR); break; case 8 : //номер ячейки в масиве онже номер кнопки "0" Klava_Proverka(Sensor_9_Bit,&Sensor_9_PIN,&Sensor_9_DDR); break; case 9 : //номер ячейки в масиве онже номер кнопки "1" Klava_Proverka(Sensor_10_Bit,&Sensor_10_PIN,&Sensor_10_DDR); break; case 10 : //номер ячейки в масиве онже номер кнопки "2" Klava_Proverka(Sensor_11_Bit,&Sensor_11_PIN,&Sensor_11_DDR); break; case 11 : //номер ячейки в масиве онже номер кнопки "3" Klava_Proverka(Sensor_12_Bit,&Sensor_12_PIN,&Sensor_12_DDR); break; case 12 : //номер ячейки в масиве онже номер кнопки "4" Klava_Proverka(Sensor_13_Bit,&Sensor_13_PIN,&Sensor_13_DDR); break; case 13 : //номер ячейки в масиве онже номер кнопки "5" Klava_Proverka(Sensor_14_Bit,&Sensor_14_PIN,&Sensor_14_DDR); break; case 14 : //номер ячейки в масиве онже номер кнопки "6" Klava_Proverka(Sensor_15_Bit,&Sensor_15_PIN,&Sensor_15_DDR); break; case 15 : //номер ячейки в масиве онже номер кнопки "7" Klava_Proverka(Sensor_16_Bit,&Sensor_16_PIN,&Sensor_16_DDR); break; case 16 : //номер ячейки в масиве онже номер кнопки "4" Klava_Proverka(Sensor_17_Bit,&Sensor_17_PIN,&Sensor_17_DDR); break; case 17 : //номер ячейки в масиве онже номер кнопки "5" Klava_Proverka(Sensor_18_Bit,&Sensor_18_PIN,&Sensor_18_DDR); break; case 18 : //номер ячейки в масиве онже номер кнопки "6" Klava_Proverka(Sensor_19_Bit,&Sensor_19_PIN,&Sensor_19_DDR); break; case 19 : //номер ячейки в масиве онже номер кнопки "7" Klava_Proverka(Sensor_20_Bit,&Sensor_20_PIN,&Sensor_20_DDR); break; case 100 : //кнопки все просканированые PROVERKA_DANIX(); Vibor_Klava = 101; Pauza_Klava = 0; break; case 101 : //кнопки все просканированые if (Pauza_Klava > Ss) //пауза Vibor_Klava = 0; break; } } } //***************************// //считуем с eeproma //***************************// void Real_EEPROM() { unsigned R,W; R = 1 + Koli_Sensorov; W = 0 + Koli_Sensorov ; while (R ) { Kalibrovka_Knopok[W] = eeprom_read_byte(W); //считуем с памяти данные калибровки W --; R-- ; } } А можно по подробнее где именно тут отслеживание нажатия? И можно ли доработать программу которую выложил я?
  8. Всем привет! Вот тут хорошая статья о том, как сделать сенсорную кнопку (http://chipenable.ru...aya-knopka.html) Это я сделал и даже собрал в реале. Но одной кнопкой я не ограничился. Написал такой код: #include <avr/io.h> #include "sensor.h" #include <util/delay.h> #define F_CPU 8000000 volatile uint8_t tim_flag = 0; uint8_t count1 = 0; sensor_t sensor1; sensor_t sensor2; int main(void) { DDRB = (1<<3); PORTB = (0<<3); SENS_Init(&sensor1, 0, &PORTB, 40); SENS_Init(&sensor2, 4, &PORTB, 40); while(1){ SENS_Poll(&sensor1); if (SENS_GetState(&sensor1) == SENS_PRESSED) { PORTB |= (1 << PB3); // зажигаем светодиод _delay_ms(200); // задержка 200мс PORTB &= ~(1 << PB3); // гасим светодиод } else { PORTB &= ~(1 << PB3); // гасим светодиод } SENS_Poll(&sensor2); if (SENS_GetState(&sensor2) == SENS_PRESSED) { PORTB |= (1 << PB3); // зажигаем светодиод _delay_ms(200); // задержка 200мс PORTB &= ~(1 << PB3); // гасим светодиод } else { PORTB &= ~(1 << PB3); // гасим светодиод } } return 0; } Одна кнопка работает, вторая нет. Там какая-то переменная sensor_t Я так понял она хранит настройки об одной кнопки, как можно переделать, что бы можно было работать с 12 кнопками? (циферблат)
  9. Люди! Пришлите пожалуйста библиотеку delay.h Он находится по адресу: C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\avr\include\util\delay.h
  10. В Atmel Studio 6, да конечно http://avr-start.ru/?p=1814 Я открыл эту библиотеку, а она у меня пустая И подключает саму себя. Я конечно не уверен, но что то тут не так Может ыть сините мне этот файл? Он находится по адресу: C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\avr\include\util\delay.h Заранее спасибо!
  11. Всем привет! Небольшой вопрос... Создал простую программку, а atmel studio 6 ругается на _delay_ms(200); Библиотека подключена, не знаю что и делать((
  12. Alex, все люди разные Я читал, но мало что понял, сейчас сижу и делаю... Если вам не нравятся мои вопросы не отвечайте. Все люди разные, есть преподаватели у которых спросишь они тебе ответят: "Читай конспект там все написано". А есть которые скажут "Давай я тебе еще раз объясню..." Насчет опыта я и так его получаю, методом проб и ошибок. Сейчас я все сделал и у меня получилось. =)
  13. Rhime. спасибо! Скажите а в каком диапазоне может меняться data в моей программе?
  14. При +25 градусах сопротивление: 2к2
×
×
  • Create New...