Перейти к содержанию

AL_smeu

Members
  • Постов

    27
  • Зарегистрирован

  • Посещение

Информация

  • Город
    А xpен его знает!??

Электроника

  • Стаж в электронике
    Более 20 лет
  • Сфера радиоэлектроники
    микроконтроллеры
  • Оборудование
    разное

Посетители профиля

1 318 просмотров профиля

Достижения AL_smeu

Новичок

Новичок (1/14)

  • 10 постов на форуме
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. Лазерно-утюжный способ уже не работает???
  2. факт подтвердился, эта переменная не нужна вообще? DI HALT намудрил?!
  3. Расслабьтесь немного! ИМХО Сделали массив из четырех строк (скорее набора символов) в нужном формате вывода, напряжение, время, температура, hello. По командам кнопок выводить нужный уже сформированный с необходимыми символами U, T и др. С необходимой частотой обновления дисплея. А формирование массива производить по соответствующему событию. Потому как каждый раз перед выводом формировать строку неэффективно.
  4. просмотрел весь проект, вообще нигде не нашёл использование этого элемента strNULL.
  5. Здесь возможно ошибка синтаксиса 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 может, что-то прояснит.
  6. Вот пример кода среда 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-ти разрядное.
  7. добавить повторный опрос портов через заданный интервал, если значение не изменилось значит долгое нажатие и изменяем значение 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; ......... };
  8. Это дело вкуса, возможностей и типа индикаторов. Я собирал на макетке динамику мне не понравилось по двум причинам: 1 -я занимает больше времени на выполнение кода 2-я этот код должен постоянно "крутиться", что не везде может быть приемлемо, если нужно больше 7-ми индикаторов к примеру 15 (пример часы(4) + дата(число(2), месяц(2) , год(4)) + день недели(1) + температура(2)) нужно усложнять код, где по очереди ставятся сегменты, а цифры выставляются там, где этот сегмент должен светить, и это ещё предварительно вычислять. Я пробовал оба способа, во втором случае было больше яркости и меньше подсветки (остаточного свечения). Не комментируйте, я понимаю паузой можно все это отрегулировать, задача ставилась определить какой режим лучше. Для опыта не стал покупать индикаторы взял от дохлого спутникового ресивера, там они тоже были в динамическом режиме. И у них оказалась слабое свечение, поэтому не все индикаторы хорошо светят, думаю зависит от марки. И ещё при использовании регистров с последовательным вводом (к примеру sct2026 ), можно освободить при 4-х цифрах как минимум один порт.
  9. Можешь ещё по гулу заведённого двигателя или ловить помехи системы зажигания. {шутка}
  10. @aletuviilo04 Если у тебя есть хоть один свободный пин (по схеме вроде есть РС0) установи его входом с подтяжкой к 0, поставь кнопки к нему и желательно через диоды на выхода для твоих 4-х цыфр (ind1... ind4). Они у тебя работают по очереди если делал классическую динамику. При каждой смене значения ind читай РС0 и будет тебе счастье. Вот как то так: А вообще я соглашусь с @DrobyshevAlex потому как динамика слабо светит при номинальном токе индикаторов а при повышении тока быстро "стареют " сегменты. Она хороша для вакуумно-люминесцентных.
  11. AL_smeu

    Проблема с TWI(I2C)

    Клёво! по ходу большинство пользователей не пишут на ассемблере. Для вас принципиально использовать асм.
  12. Т.е. если мне захочется задать вопрос не по теме, можно достать тему не связанную с вопросом с прошлого века и это будет просто замечательно?
  13. Косвенно! Измеряй ток по питанию генератора на холостом ходу и под нагрузкой, предварительно поставь ёмкость после амперметра и побольше будет демпфером. Разница и будет ток на выходе. Но это действующее значение тока. Если необходимо мгновенные, то это либо пиковый детектор, либо формулы в книжке найти для прямоугольной формы тока.
  14. Для твоего ноута лучше использовать преобразователь 75В в 28В (или может другое что нужно в ноут) Для уменьшения тепловых потерь желательно ШИМ или ключевой стабилизатор напряжения и скорее всего придётся делать самому, купить такой вряд ли найдётся. интересно получается? БП 50Вт а выдает 100Вт. Может 100Вт не электрическая мощность? И куда смотрят модераторы влез не в свою тему со своим вопросом???
  15. 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&* И при чем тут закон ома, когда просто математика не верна!
×
×
  • Создать...