neid
-
Постов
58 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Блоги
Сообщения, опубликованные neid
-
-
Всем привет народ! я одного своего проекта в машину, учусь обрабатывать калвиатуру матрицу из двух столбцов и трех строк. Вроде бы рабозбрался, но не могу завести работу обработки долго во нажатия клавиши... код приложил, подскажите где не так делаю?
#define rows 3 #define cols 2 // номера кнопок в соответствии со схемой const byte keys[rows][cols] = { {1,4}, {2,5}, {6,3} }; // номера пинов const byte rowPins[rows] = {10, 9, 8}; // строки (желтый10, зеленый9, голубой8) const byte colPins[cols] = {7, 5}; // столбцы (черный7, красный5) // маски для клавиш #define MaskMediaButton 1 #define MaskRadioButton 2 #define MaskVolumeUpButton 4 #define MaskVolumeDownButton 8 #define MaskOkButton 16 #define MaskMuteButton 32 #define MaskScrollDown 64 #define MaskScrollUp 128 #define MaskFastPress 256 #define MaskLongPress 512 unsigned long starttime; bool workkbd; unsigned long startlongpresstime; bool oldpressed; ///////////////////////////////////////////////////////////////// //************************************************************* // Светодиоды для визуального контроля // номера пинов //************************************************************* const int ledPin_1 = 0; const int ledPin_2 = 1; const int ledPin_3 = 2; const int ledPin_4 = 4; const int ledPin_5 = 12; const int ledPin_6 = 13; const int ledPin_7 = 14; const int ledPin_8 = 15; void setup() { Serial.begin(9600); int i; // строки - на выход for (i = 0; i < rows; ++i) { pinMode(rowPins[i], OUTPUT); } // столбцы - на вход for (i = 0; i < cols; ++i) { pinMode(colPins[i], INPUT); digitalWrite(colPins[i], HIGH); // включаем подтягивающий резистор } starttime = millis(); workkbd = false; oldpressed = false; } // сканирование джойстика unsigned int scan(void) { int i, j; unsigned int code = 0; bool pressed = false; for (i = 0; i < rows; ++i) { digitalWrite(rowPins[i], LOW); // кнопки for (j = 0; j < cols; ++j) { if(digitalRead(colPins[j]) == false) { code |= 1 << (keys[i][j] - 1); pressed = true; } } }//конец циклов ///////////////////////долго нажатие//////////////////////////////////////// if (pressed == true) { if (oldpressed == false) { startlongpresstime = millis(); } else { if (millis() - startlongpresstime > 1200 && (code & MaskOkButton)) // значение временного промежутка в мс { startlongpresstime = millis(); // сброс счетчика. иначе признак будет выполняться каждый цикл опроса code |= 512; } if (millis() - startlongpresstime < 1000 && (code & MaskOkButton) ) // значение временного промежутка в мс { startlongpresstime = millis(); // сброс счетчика. иначе признак будет выполняться каждый цикл опроса code |= 256; } } } oldpressed = pressed; ///////////////////////////////////////////////////////////// return code; } // цикл программы void loop() { unsigned int code; code = scan(); if (workkbd == false) { if (millis() - starttime > 3000) workkbd = true; return; } if (code & MaskMediaButton){ Serial.print("Source>"); Serial.println(); digitalWrite(ledPin_1, HIGH); delay(200); digitalWrite(ledPin_1, LOW); } if (code & MaskRadioButton){ Serial.print("Source<"); Serial.println(); digitalWrite(ledPin_2, HIGH); delay(200); digitalWrite(ledPin_2, LOW); } if (code & MaskVolumeUpButton){ Serial.print("VolumeUp"); Serial.println(); digitalWrite(ledPin_3, HIGH); delay(200); digitalWrite(ledPin_3, LOW); } if (code & MaskVolumeDownButton){ Serial.print("volumeDown"); Serial.println(); digitalWrite(ledPin_4, HIGH); delay(200); digitalWrite(ledPin_4, LOW); } if (code & MaskFastPress){ Serial.print("TRFast"); Serial.println(); } if (code & MaskLongPress){ Serial.print("TRLong"); Serial.println(); } if (code & MaskMuteButton){ Serial.print("Mute"); Serial.println(); digitalWrite(ledPin_6, HIGH); delay(200); digitalWrite(ledPin_6, LOW); } if (code & MaskScrollDown){ Serial.print("RotateDown"); Serial.println(); digitalWrite(ledPin_7, HIGH); delay(200); digitalWrite(ledPin_7, LOW); } if (code & MaskScrollUp){ Serial.print("RotateUp"); Serial.println(); digitalWrite(ledPin_8, HIGH); delay(200); digitalWrite(ledPin_8, LOW); } }
0 -
Всем привет! Никто не подскажет код опроса кнопок для моих фукнций работы лампы из Икеа. Алгоритм такой, есть три режима работы. Превый режим: ручной, прибаляем и убавляем яркость свечения лампы. Второй режим: лампа палавно тухнет и снова плавно разгорается и так до бесконечности, ну и третий просто ярко горит. Переход из режим в режим с помошью третий кнопки, вкл-режим1-кнопка3-режим2-кнопка3-режим3, 1-2-3 и так по кругу. Собираюсь делать это через функции. Помогите с идейкой!
вот привет код там уже у меня есть функция опроса кнопок, только я её не могу никак заставить работать. По разному проверял работу кнопок, упрошал код чтобы только сетодиоды горели, проверял нажатие тем самым. Не могу допереть в чем проблема. Как вы поняли я начинающий, можно сказать это первое что то более менее серьезное у меня.
#include <avr/io.h>//библиотека ввода/вывода #include <avr/delay.h> typedef unsigned char u8; #define KEY_UP 1 #define KEY_DN 2 #define KEY_NEXT 4 #define KEY_NONE 0 //Програма инициализации ШИМ void init_pwm (void) { TCCR1A=(1<<COM1A1)|(1<<WGM10); //На выводе OC1A единица, когда OCR1A==TCNT1, восьмибитный ШИМ TCCR1B=(1<<CS10); //Делитель= /1 OCR1A=0x00; //Начальная яркость нулевая } // функция, которая опрашивает кнопки и возвращает код нажатой u8 get_key(void){ u8 temp = ~(PINC & (KEY_UP | KEY_DN | KEY_NEXT)); _delay_ms(15); if(temp != (~(PINC & (KEY_UP | KEY_DN | KEY_NEXT)))) return KEY_NONE; else return temp; } static void mode1(void){ u8 key; while(1){ key = get_key(); switch(key){ case KEY_UP: if(OCR2 < 255) OCR2++; break; case KEY_DN: if(OCR2 > 0) OCR2--; break; case KEY_NEXT: return; } } } static void mode2(void){ u8 key; static signed char reverse; while(1){ key = get_key(); if(key == KEY_NEXT) return; if(OCR1A == 255) reverse = -1; if(OCR1A == 0) reverse = 1; OCR1A += reverse; _delay_ms(100); } } static void mode3(void){ while(get_key() != KEY_NEXT); } //Основная програма int main(void) { PORTC=0x07; //порт 0 1 2 как вход DDRC=0x00; PORTB=0x00; DDRB=0x02; //PB1 как выход init_pwm(); //OCRA1 инициализация while(1){ mode1(); mode2(); mode3(); } }
0 -
в поиске посмотри обозначения и маркировку AVRов
0 -
пока у меня задача стоит собрать устройство и прицепить к машинке, а экраны и все останьное по мере освоения, и познания. К вопросу почему на МК, потому что интерес к МК и программированию на С и опыты моему безгоду неделя. Чем больше в лес, тем больше дров, до ПИКов тоже доберусь)))
с кодом, посторочно я его разобрал давно и понял, но вот протус и правдо не так понимает его чтоли.
думаю пока собрать все на макетке, и посмотреть как в железках работает.
VipAndrey и a_sergeevich хочу поблагодарить вас за то что отозвались и помогли.
0 -
тосол гонится по всей системе в том числе и через радиатор печки, ну и прицепи его прям к нему
Спасибо большое за подсказку с транзисторами
у меня радиатор печки в таком месте, короче спина болит от сегодняшних мучений с машиной(выше писал). как раз потек патрубок на входе в радиатор печки, пол машины надо разобрать чтобы добраться.
0 -
Я с вас туею, вернее с вашей схемы. Да выкиньте вы этот опер и весь огород к нему, поставьте датчик тем-ры DS18b20.
беру сигнал со штатного датчика охлаждающей жидкости, т.к. он расположен посеридине патрудка и меряет непосредственно темп. ОЖ, что и нужно для вкл. печки. Датчик который вы советуете нужно на хомут и к патрубку, но он будет снаружи(((( тоже самое уже у меня с автозапуском, там тоже есть датчик который снаружи, фигня получается, зимой по температуре никогда не завожу, толку от него только узнавать температуру на улице с брелка авто
ОУ применил, чтобы не исказить показания датчика ОЖ, т.к. они нужны ЭБУ машины. По К-линии считывать температуру мне еще не по силам, и занята она бортовым компом.
С ULN2003 не рационально, я не знаю какие транзисторы лучше применить?
0 -
повторюсь - один минус вашей схемы - нереентабильность использования мк. уж если мутите на мк - не поленитесь - добавьте в схему индикатор температуры в салоне + тот же самый датчик температуры салона. и привяжите автоматическое отключ. печки при достижении температуры заданной. этим вообще избавитесь от вкл=выкл печки вручную.
хочу дисплей добавить от нокии 3300, где будут отображаться температура за бортом, в салоне, и вольтметр. Програмирование температуры срабатывания подогрева исдений и печки с кнопок.
0 -
delay_ms(500); //От этой задержки зависит скорость моргания светодиода при темп-ре от 50С до 70С.
не могу понять почему эта строка не в теле цикла while(1). Хотя пробыdал и в тело кинуть? нет мигания светика( а реле отрабатывает как надо. Но когда выполняется следующее условие: if (adc_data[LAST_ADC_INPUT]<21), то горит как задумано.
компилирую CodeVisionAVR, играюсь в Протусе.
0 -
спасибо что подсказали, просто все мое это творчество,я самоучка, и С то недавно изучаю ну месяца 3 может от силы. На вашем примере к моей погремухе видно как правельно строить алгоритм, какие ошибки в моем подходе к алгоритму в целом. По поводу светиков что много, не получалось сделать так, что бы один все дело отображал.
код пока не поверил сам, вот только из гаража пришел, пришли холода потек тосол у бибики(( отпишусь позже.
0 -
многое поменял, вместо меги8 поставил мегу 32, что под рукой оказалось, меги8 вообще нет пока...(( алгоритм вот какой стал:машина заводится с автозапуска(ваз2111), подает питание на устройство, вкл. и ждет пока температура двигателя не поднимится до 50 градусов, после через реле включает подогрев сидений, когда 70С - печку (заведомо подключаем к 1 скорости). Ну и работает до тех пор пока не сяду в машину и не нажму кнопоку. Чтобы потом самому вкл что надо и конролировать.
вот с общими усилиями и советами что получилось по схеме:
http://s014.radikal.ru/i327/1010/36/84eac75a211e.jpg
Есть несколько вопросов по подключению реле к ULN2003A, и питания 12 вольт, правильно организовал?
ну и по коду, какие огрехи, пинайте если чего, я учусь мне полезно.
а вот сам код к этой погремушке:
#include <mega32.h> #include <delay.h> #define FIRST_ADC_INPUT 0 #define LAST_ADC_INPUT 0 unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1]; #define ADC_VREF_TYPE 0x20 interrupt [ADC_INT] void adc_isr(void) //стандартное прерывание по ADC от CVAVR { static unsigned char input_index=0; adc_data[input_index]=ADCH; if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT)) input_index=0; ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index; delay_us(10); ADCSRA|=0x40; } void main(void) { //Порт В настройка PORTC=0x00; DDRC=0xFF; // весь порт на выход // Port D настройка PORTB=0x00; DDRB.0=0x00; // весь порт как вход ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff); ADCSRA=0xCC; #asm("sei") PORTC.4=1; //устройство включено, светодиод горит постоянно while (1) { if(adc_data[LAST_ADC_INPUT]<205) PORTC.0=1; else PORTC.0=0; //Приблизительно 50 град. if(adc_data[LAST_ADC_INPUT]<204) PORTC.2=1; else PORTC.2=0; if(adc_data[0]<21) PORTC.1=1; //Приблизительно 70град. else PORTC.1=0; if(adc_data[0]<21) PORTC.3=1; else PORTC.3=0; if (PINB.0==1) break; }; PORTC.0=0; PORTC.2=0; delay_ms(2000); PORTC.1=0; PORTC.3=0; delay_ms(2000); PORTC.4=0; }
0 -
вот накидал тут кое чего, гляньте правильно ли все, может чего накосячил:
Датчик температуры охлаждающей жидкости (термисторный) устанавливается на впускном патрубке системы охлаждения в потоке охлаждающей жидкости двигателя. Термистор, находящийся внутри датчика, является термистором с "отрицательным температурным коэффициентом" - при нагреве его сопротивление уменьшается. Высокая температура охлаждающей жидкости вызывает низкое сопротивление (70 Ом + 2% при 130 °С), а низкая температура дает высокое сопротивление (100700 Ом ± 2% при -40 °С).
Контроллер подает на датчик температуры охлаждающей жидкости напряжение 5 В через резистор с постоянным сопротивлением, находящимся внутри контроллера. Температуру охлаждающей жидкости контроллер рассчитывает по падению напряжения на датчике, имеющем переменное сопротивление. Падение напряжения большое на холодном двигателе, и низкое - на прогретом.
не знаю можно обойтись без резистивно пары?
0 -
Читаете только слова которые знаете или вообще всю тему целиком? сказал же что новичок, и с МК один раз только общался, я не прошу делать, мне схема приблизительная нужна в каком направлении делать, больше всего как сигнал вести от датчика температуры до МК... а про прошивку и остальное моя головная боль. Как модеру тебе надо себя поскромнее вести. Если зайти на сайт ВАЗовских форумов и посмотреть проблему подключения сигналок, то чуть ли не каждый второй хочет это сделать, и могут только через реле, вот тут точно ХРЕНЬ получается))))
0 -
Всем привет)) вообщем идея такая, хочу сделать чтобы у меня включалась печка в ваз 2110 когда рабочая температура двигатея дойдет до 70 грудусов. Поясняю, к примеру алгоритм работы :
Дополнителный канал настраиваю на сигналке так, чтобы он подавал напряжение и включал устройство (на автозапуске можно так организовать). Далее, устройство включено и ждет пока температура двигателя не поднимится до 70 градусов. После через реле включает двигатель печки (заведомо подключаем к 1 скорости). Ну и работает до тех пор пока: 1) не сработает концевик водительской двери, или 2) у автозапуска не кончится время и двигатель не заглохнет. Все это дело будет отображать светодиод.
Можно проше пойти через две релюхи подключить печку и с брелка её включать тем же доп. каналом, но удобнее всетаки так. Думаю есть тут люди кто так же на отечественном транспорте катается, да и зимой когда машина у дома, хочется в теплую сесть, а не ждать пока салон прогреется.
отсюда несколько вопросов:
1. можно ли это дело организовать на Атмеге 16, т.к. имел дело только с ней, простенькое охранное устройство с моб.телефоном на дачу)
у кого какие схемы и предложения, сам новичок, короме выше сказанного МК не пробывал ни чего и пользовался только 5 поводковым програматором(примитив вообщем)))
0 -
видео работа регулятора в действии, хочу сипользовать в регулировке яркости светодиодной подсветки приборной панели в авто))) ссылка на регулятор: http://masterkit.ru/main/set.php?code_id=1845910
-
Всем привет. Прошу прощения и знаю что тема не раз уже упоминалась в форуме, но ни как не нашел то что мне нужно.
Нужна схема регулировки яркости 28 светодиодов. схема будет применяться в авто, ваз 2110, а точнее для подсветки шкалы приборов. Светики выбрал белые. Схемка нужна простая и безотказная, и деталюшки чтобы редкими не были для нее. Заранее спасибо.
0 -
С тахометра. Датчик давления масла зимой может тупить.
а схемы или распиновки по подключению на ваз десятого семейства нет случаем? просто купил вроде разобрался что куда, но все же... сам подключать хочу, ценник на установку меня не устраивает у установщиков(((
0 -
Всем привет! откуда лучше брать контроль двигателя для сигналки? с тахометра или с датчика давления масла? сигналка tomahawk 9030, машина ваз 2110 1.5 16клапанная
0 -
тогда вопрос есть, сколько ват получится если три спиральки сделать, около 300... у меня просто генератор на 80А, хватит ли его... но как и говорю только для отпотевания стекол на 5-10 мин
0 -
Всем привет! купил себе не так давно ваз 2111, и вот как началась пасмурная погода стала проблема с запотеванием стекол задних, особенно вечером катаюсь много, а если чуть постоишь где нибудь, то начинаются проблемы сдать назад и вообще... печка хоть и нормальная но не спрваляется с задними, есть и подогрев заденего стекла, тоже долго ждать!
хочу сделать что-то на подобии фена в машину назад, воздух будет гнать куллер компьютерный думаю достаточно будет... а вот спираль где взять чтобы от бортовой сети питалась или из чего сделать ума не приложу, может подскажете???? схемка у кого есть, даже самая примитивная! работать он будет не долго ну минут 5-10 от силы, только для распотевания стекол!
0 -
У меня такой вопрос, вся моя компания предпочитает nokia, и вот два моих друга принесли мне по их словам испорченные карты ММС на 1 Гб фирмы Кингстом и микроСД на 512Мб которая шла в комплекте с телефоном... пробовали их вставлять в телефон и форматировать бесполезно, пробовал их форматировать в компе через кард-реадер, explorer.exe начинает виснуть... Можноли их как то возродить или уже все им хана в топку?
0 -
http://pol-sem.narod.ru/polymuson/polymuson.htm
никогда не встречал кварца на три вывода, прошивал мегу 16 там обычный с двумя был? хотя опыт мой мизерный так что помогите, просвятите?
0 -
а что кварц такой не понятный на три вывода? когда я прошивал атмегу 16 там был простой, а таких я еще на своей практике не встречал...?? прошу не пинать я еще учусь?
0 -
наушник никак не может быть т.к. это звонок дверной
0 -
Вот собираюсь собрать схему http://pol-sem.narod.ru/polymuson/polymuson.htm
как думаете CodeVision подойдет? и программатор на 5 поводков(раньше только им прошивал мегу16)....?
0
приставка для автоосциллографа
в Измерительная техника
Опубликовано
Всем привет! Есть схемка, приставка к автоосциллографу, её роль синхронизация по 1 цилиндру авто с системы зажигания. Хочу повторить и добавить подавление холостой искры т.к. не нашел у производителя в продаже, номиналы деталей есть почти все, вопрос по некоторым остался. На рисунке пометил их знаком вопроса. Кто может подсказать хотя бы примерный номинал деталей с учетом схемотехники?