AL_smeu
Members-
Постов
27 -
Зарегистрирован
-
Посещение
Информация
-
Город
А xpен его знает!??
Электроника
-
Стаж в электронике
Более 20 лет
-
Сфера радиоэлектроники
микроконтроллеры
-
Оборудование
разное
Посетители профиля
1 327 просмотров профиля
Достижения AL_smeu
-
Лазерно-утюжный способ уже не работает???
-
факт подтвердился, эта переменная не нужна вообще? DI HALT намудрил?!
-
Расслабьтесь немного! ИМХО Сделали массив из четырех строк (скорее набора символов) в нужном формате вывода, напряжение, время, температура, hello. По командам кнопок выводить нужный уже сформированный с необходимыми символами U, T и др. С необходимой частотой обновления дисплея. А формирование массива производить по соответствующему событию. Потому как каждый раз перед выводом формировать строку неэффективно.
-
просмотрел весь проект, вообще нигде не нашёл использование этого элемента strNULL.
-
Здесь возможно ошибка синтаксиса strNULL[] похоже на массив каждый элемент которого должен быть типом описанным структурой typedef struct PROGMEM{ void *Next; void *Previous; void *Parent; void *Child; uint8_t Select; const char Text[]; } menuItem; и может быть получится если, как то так..... menuItem strNULL[] PROGMEM=""; хотя как компилятор будет понимать, что такое PROGMEM=""; Я не силён в программировании, поэтому это только домыслы. Может Вам стоит обратиться к автору сего кода в источнике для пояснения этой записи. остальные ошибки вытекающие из непонимания этой записи. http://radio-hobby.org/modules/instruction/winavr-i-avr-studio/struktury-i-obyedineniya может, что-то прояснит.
-
Вот пример кода среда CodeVision 100% рабочий был написан для расшифровки ИК команд от пультов китайских и не очень ДВД кодировка NEC. Здесь применяется захват импульса как по фронту так и по спаду. Старался как можно меньше занимать работу контроллера поэтому не использовал команды типа delay_ms. #include <mega32.h> // F_CPU 8000000 #define Front TCCR1B=0xC2; // запуск таймера1 в ркжиме захвата по фронту сигнала #define Spad TCCR1B=0x82; // переключение таймера на захват по спаду импульса #define StopT1 TCCR1B=0x00; TCNT1H=0x00;TCNT1L=0x00 // остановка таймера1 #define Sbros TCNT1H=0x00; TCNT1L=0x00 // сброс таймера1 register int shetshik @2; volatile unsigned char pu[4]={0, 0, 0, 0}, ur=0, kkomand=0xFF, tik, sobitie, oshibka; // Timer 1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { // Place your code here sobitie=3; } // Timer 1 input capture interrupt service routine interrupt [TIM1_CAPT] void timer1_capt_isr(void) { #asm IN R2,0x26 IN R3,0x27 #endasm if (oshibka==0){sobitie=2;} else {sobitie=0;}; Sbros; } void initializacia (void) { PORTA=0x00; DDRA=0xFF; PORTB=0x00; DDRB=0x0F; PORTC=0x00; DDRC=0x00; PORTD=0xFF; DDRD=0x00; TCCR0=0x00; // 05 TCNT0=0x00; OCR0=0x00; TCCR1A=0x00; StopT1; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; MCUCR=0x00; MCUCSR=0x00; TIMSK=0x24; ACSR=0x80; SFIOR=0x00; // Global enable interrupts #asm("sei") } void main(void) { // Declare your local variables here initializacia(); oshibka=0; tik=10; sobitie=0; while (1) { if ((!(PIND.6))&&(oshibka==0)&&(tik==10)){sobitie=1;}; switch (sobitie) { case 1: Front; Sbros; tik=8; pu[0]=0; pu[1]=0; pu[2]=0; pu[3]=0; ur=0; sobitie=0; break; case 2: switch (tik) { case 8: Spad; if ((8500<shetshik)&&(shetshik<9700)) { tik=9; } else{oshibka=1; tik=10;}; break; case 9: if ((4300<shetshik)&&(shetshik<4800)) //4500 4900 { tik=0; kkomand=0xFF;} else { if ((2000<shetshik)&&(shetshik<2600)) //2100 2500 {oshibka=7;} else {oshibka=2;}; tik=10;}; break; case 10: break; default: if (tik>7){ tik=10;} else { if ((1000<shetshik)&&(shetshik<1280)) //Это "0" {pu[ur] &=(~(1 << (tik)));} else {if((2100<shetshik)&&(shetshik<2500)) //Это "1" {pu[ur] |=(1 << (tik));} else {oshibka=3; tik=10; };}; if (tik==7){ if (ur==3) { tik=10; if ((pu[0]==~pu[1])&&(pu[2]==~pu[3])) { kkomand=pu[2];} else {oshibka=4; kkomand=0xFF;}; } else{ur++; tik=0;};} else {tik++;}; }; }; // конец выборки tik sobitie=0; break; case 3: //установить первоначальный режим tik=10; oshibka=0; sobitie=0; break; }; // конец выборки sobitie PORTA=kkomand; PORTB=oshibka;}; //while вывод в двоичном коде команды - подвешивал светодиоды использовал для отладки. } Если есть сложности с объявлением переменной shetshik можно просто её обьявить как обычную тип int. но при этом необходимо изменить считывание значений таймера согласно даташиту и после соединять два 8-ми байтных числа в одно 16-ти разрядное.
- 759 ответов
-
- AVR
- Микроконтроллер
-
(и ещё 1 )
C тегом:
-
добавить повторный опрос портов через заданный интервал, если значение не изменилось значит долгое нажатие и изменяем значение code простым добавлением какого либо числа большего чем максимальное значение к примеру 0х0F(если используется младшие разряды порта и не больше 4-х), либо 1 при условии НЕ использования 0-го разряда порта. Потом в функции по значению определяете имя команды. Что-то вроде этого (в синтаксисе могут быть ошибки). uint8_t get_button(void) { return PINB; } uint8_t get_code(void) //опрос портов { code=get_button(); _delay_ms(3); if(code!=get_button()){code=ERROR;} else {_delay_ms(10); if(code == get_button()){ code = code + 0xF0; //или code++; }; }; return code; } //***************************************** coDcoM = get_code(); switch (coDcoM) { case 0x01: command=KN1; // короткое нажатие break; case 0xF1: command=KN1L; // долгое нажатие break; ......... };
-
Это дело вкуса, возможностей и типа индикаторов. Я собирал на макетке динамику мне не понравилось по двум причинам: 1 -я занимает больше времени на выполнение кода 2-я этот код должен постоянно "крутиться", что не везде может быть приемлемо, если нужно больше 7-ми индикаторов к примеру 15 (пример часы(4) + дата(число(2), месяц(2) , год(4)) + день недели(1) + температура(2)) нужно усложнять код, где по очереди ставятся сегменты, а цифры выставляются там, где этот сегмент должен светить, и это ещё предварительно вычислять. Я пробовал оба способа, во втором случае было больше яркости и меньше подсветки (остаточного свечения). Не комментируйте, я понимаю паузой можно все это отрегулировать, задача ставилась определить какой режим лучше. Для опыта не стал покупать индикаторы взял от дохлого спутникового ресивера, там они тоже были в динамическом режиме. И у них оказалась слабое свечение, поэтому не все индикаторы хорошо светят, думаю зависит от марки. И ещё при использовании регистров с последовательным вводом (к примеру sct2026 ), можно освободить при 4-х цифрах как минимум один порт.
-
Можешь ещё по гулу заведённого двигателя или ловить помехи системы зажигания. {шутка}
-
@aletuviilo04 Если у тебя есть хоть один свободный пин (по схеме вроде есть РС0) установи его входом с подтяжкой к 0, поставь кнопки к нему и желательно через диоды на выхода для твоих 4-х цыфр (ind1... ind4). Они у тебя работают по очереди если делал классическую динамику. При каждой смене значения ind читай РС0 и будет тебе счастье. Вот как то так: А вообще я соглашусь с @DrobyshevAlex потому как динамика слабо светит при номинальном токе индикаторов а при повышении тока быстро "стареют " сегменты. Она хороша для вакуумно-люминесцентных.
-
Т.е. если мне захочется задать вопрос не по теме, можно достать тему не связанную с вопросом с прошлого века и это будет просто замечательно?
-
Косвенно! Измеряй ток по питанию генератора на холостом ходу и под нагрузкой, предварительно поставь ёмкость после амперметра и побольше будет демпфером. Разница и будет ток на выходе. Но это действующее значение тока. Если необходимо мгновенные, то это либо пиковый детектор, либо формулы в книжке найти для прямоугольной формы тока.
-
Для твоего ноута лучше использовать преобразователь 75В в 28В (или может другое что нужно в ноут) Для уменьшения тепловых потерь желательно ШИМ или ключевой стабилизатор напряжения и скорее всего придётся делать самому, купить такой вряд ли найдётся. интересно получается? БП 50Вт а выдает 100Вт. Может 100Вт не электрическая мощность? И куда смотрят модераторы влез не в свою тему со своим вопросом???
-
https://www.google.com/search?q=схема+сабвуфера+в+авто&client=firefox-b&source=lnms&sa=X&ved=0ahUKEwjvjcPb-d7SAhVD1iwKHdPmA44Q_AUIBygA&biw=1280&bih=866&dpr=1#q=5+/+(2+%2B+8)+*+4+%3D&* И при чем тут закон ома, когда просто математика не верна!