Jump to content

AL_smeu

Members
  • Content Count

    26
  • Joined

  • Last visited

Everything posted by AL_smeu

  1. факт подтвердился, эта переменная не нужна вообще? DI HALT намудрил?!
  2. Расслабьтесь немного! ИМХО Сделали массив из четырех строк (скорее набора символов) в нужном формате вывода, напряжение, время, температура, hello. По командам кнопок выводить нужный уже сформированный с необходимыми символами U, T и др. С необходимой частотой обновления дисплея. А формирование массива производить по соответствующему событию. Потому как каждый раз перед выводом формировать строку неэффективно.
  3. просмотрел весь проект, вообще нигде не нашёл использование этого элемента strNULL.
  4. Здесь возможно ошибка синтаксиса 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 может, что-то прояснит.
  5. Вот пример кода среда 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-ти разрядное.
  6. добавить повторный опрос портов через заданный интервал, если значение не изменилось значит долгое нажатие и изменяем значение 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; ......... };
  7. Это дело вкуса, возможностей и типа индикаторов. Я собирал на макетке динамику мне не понравилось по двум причинам: 1 -я занимает больше времени на выполнение кода 2-я этот код должен постоянно "крутиться", что не везде может быть приемлемо, если нужно больше 7-ми индикаторов к примеру 15 (пример часы(4) + дата(число(2), месяц(2) , год(4)) + день недели(1) + температура(2)) нужно усложнять код, где по очереди ставятся сегменты, а цифры выставляются там, где этот сегмент должен светить, и это ещё предварительно вычислять. Я пробовал оба способа, во втором случае было больше яркости и меньше подсветки (остаточного свечения). Не комментируйте, я понимаю паузой можно все это отрегулировать, задача ставилась определить какой режим лучше. Для опыта не стал покупать индикаторы взял от дохлого спутникового ресивера, там они тоже были в динамическом режиме. И у них оказалась слабое свечение, поэтому не все индикаторы хорошо светят, думаю зависит от марки. И ещё при использовании регистров с последовательным вводом (к примеру sct2026 ), можно освободить при 4-х цифрах как минимум один порт.
  8. Можешь ещё по гулу заведённого двигателя или ловить помехи системы зажигания. {шутка}
  9. @aletuviilo04 Если у тебя есть хоть один свободный пин (по схеме вроде есть РС0) установи его входом с подтяжкой к 0, поставь кнопки к нему и желательно через диоды на выхода для твоих 4-х цыфр (ind1... ind4). Они у тебя работают по очереди если делал классическую динамику. При каждой смене значения ind читай РС0 и будет тебе счастье. Вот как то так: А вообще я соглашусь с @DrobyshevAlex потому как динамика слабо светит при номинальном токе индикаторов а при повышении тока быстро "стареют " сегменты. Она хороша для вакуумно-люминесцентных.
  10. Клёво! по ходу большинство пользователей не пишут на ассемблере. Для вас принципиально использовать асм.
  11. Т.е. если мне захочется задать вопрос не по теме, можно достать тему не связанную с вопросом с прошлого века и это будет просто замечательно?
  12. Косвенно! Измеряй ток по питанию генератора на холостом ходу и под нагрузкой, предварительно поставь ёмкость после амперметра и побольше будет демпфером. Разница и будет ток на выходе. Но это действующее значение тока. Если необходимо мгновенные, то это либо пиковый детектор, либо формулы в книжке найти для прямоугольной формы тока.
  13. Для твоего ноута лучше использовать преобразователь 75В в 28В (или может другое что нужно в ноут) Для уменьшения тепловых потерь желательно ШИМ или ключевой стабилизатор напряжения и скорее всего придётся делать самому, купить такой вряд ли найдётся. интересно получается? БП 50Вт а выдает 100Вт. Может 100Вт не электрическая мощность? И куда смотрят модераторы влез не в свою тему со своим вопросом???
  14. 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&* И при чем тут закон ома, когда просто математика не верна!
  15. Точно Вы правы. 1) (5 / (2000 + 8000) )* 8000 = 4В. 2) 4 = 4. напряжения на входах ОУ 3) J1=(4-1) / 1000 = 0,003А. 4) Jвых+(-0.001)-J1=0 по первому закону Кирхгофа Jвых=J1-(-0.001)=0.003+0.001=0.004А 5) 4 + 0,004* 1000 = 8В. по второму закону Кирхгофа @avv_rem дал верный результат, но что в его первом пункте? какя-то хрень.
  16. Я точно ошибся (второй закон Кирхгофа не применил) с последним 9В. Вот по моему мнению так 1) (5 / (2000 + 8000) )* 8000 = 4в. 2) 4 = 4. напряжения на входах ОУ 3) J1=4 / 1000 = 0,004А. 4) Jвых+(-0.001)-J1=0 по первому закону Кирхгофа Jвых=J1-(-0.001)=0.004+0.001=0.005А 5) 4 + 0,005 * 1000 = 9в. по второму закону Кирхгофа
  17. Да! первоначально у меня вышло 3В, но позже перепроверил и учёл поэтому 5В. И где-же автор???
  18. А Вы товарищ однако хам! 10 мин поисков привели меня сюда! Выбирай на любой вкус! документ word. https://www.google.com/url?sa=i&rct=j&q=&esrc=s&source=imgres&cd=&ved=&url=http%3A%2F%2Ffiles.domcxem.ru%2Finfocenter%2F%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BF%D0%B8%D1%82%D0%B0%D0%BD%D0%B8%D0%B5%2F%D0%98%D0%BC%D0%BF%D1%83%D0%BB%D1%8C%D1%81%D0%BD%D1%8B%D0%B9%20%D1%81%D1%82%D0%B0%D0%B1%20%D0%BD%D0%B0%20%D0%9A%D0%A0%D0%95%D0%9D8.doc&psig=AFQjCNGsdUpDbZLPQIjY6e6AgyWzXCFLDw&ust=1489580644575132
  19. Во втором примере. У меня получилось Uвых = 5В если согласно теории http://de.ifmo.ru/bk_netra/page.php?dir=3&tutindex=36&index=5&layer=1 На обоих входах ОУ потенциал стремится быть равным. И согласно данным сопротивлений это 4В.
  20. Вопрос тогда зачем ? если Или в задаче, для запутывания студентов?
  21. В реале ОУ изучал после в натуральном виде и с осциллографом. Даже схемки придумывал по надобности. И кстати я догадываюсь, что ко второй схеме необходимо помимо формул приведённых выше как-то применить еще законы Кирхгофа, при чём оба, для токов в узле и контурных напряжений.
  22. Уже лет 15 как не студент! Я понимаю, что возможно принимается бесконечно большое питание и бесконечный коэффициент усиления. По моей специальности предмет электроники прошли поверхностно.
  23. Откуда у Вас значения, когда не задано напряжение питания??? может там питание всего +-6В ???
  24. Смотри в сторону ключевых стабилизаторов или ШИМ. Но реально чувак тебе никто за даром схему рисовать не будет, на просторах интернета таких схем валом google.com тебе в помощь.
×
×
  • Create New...