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

maxbelyx

Members
  • Постов

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

  • Посещение

Информация

  • Город
    Петербург

Электроника

  • Стаж в электронике
    Менее года
  • Сфера радиоэлектроники
    Микроконтроллеры
  • Оборудование
    UT61A

Достижения maxbelyx

Новичок

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

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

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

-1

Репутация

  1. Всем привет! Даже не ожидал, что тема жива и развивается... Спустя 6 лет я убил второй UT61E, который купил взамен того самого, первого, с помощью которого я измерял сопротивление искры пьезы (до сих пор смешно). Но сейчас проблема по-интереснее - случилось непонятное, а именно, в какой-то момент я заметил, что мультиметр больше не "звенит" в режиме прозвонки (показывает 2.28Ом). А в режиме проверки диодов при замыкании щупов на себя - звенит. Полную картинку из за чего это произошло и что предшествовало не могу восстановить, так как ничего особенного я не делал. Дополнительно стало врать измерение напряжения постоянного - 4.694В при входе 5.0В. При входе 10.0В измеряет 9.77В, при входе 32В показывает 32.14В, при входе 0.25В показывает -0.12В. При том сопротивления измеряет корректно, насколько могу судить. Подскажите, куда смотреть? А то не хочется покупать третий UT61E... Спасибо заранее!
  2. Если память не изменяет, +-25В и еще одна обмотка слаботочная +-18В
  3. Продается в Санкт-Петербурге платы (собранные, спаянные) усилителя мощности ОМ2.5. Продаются 4 платы. На одной плате очень сильно греются транзисторы, -лень разбираться, отдаю в подарок комплект новых транзисторов, думал менять, но и эти работают, надо разбираться, а времени - нет. Так же продается усилитель Т-класса на микросхеме TA2022 двухканальный по 100Вт каждый от МастерКит (тоже собран). Так же бонусом отдам усилитель мощности на микросхемах (оригинальных, заменил на оригинальные) LM1875( плата с китайского набора на 2 канала с выпрямителем). Цены на ОМ2,5 за платку 1500р, Т-класс 1000р, LM1875 500р. еще есть самодельный эквалайзер на LM1036. Бонусом еще есть конденсаторы фильтры 10 000мкф и диодные мосты. Так же есть трансформатор на 100Ватт двуполярный, плюс обмотка низковольтная для эквалайзеров и т.п. И еще один трансформатор ватт на 50 тоже двуполярный. Все что на фото + новые транзисторы (2 NPN 2 PNP для оплеухи) Желательно забрать вообще все разом, будет торг. Чем быстрее - тем дешевле Связь личка или по т. 8 921 633 60 57 (прпосьба сразу говорить что насчет усилителей) Возможна отправка по предоплате. С уважением, Максим.
  4. Благодарен за титаническое терпение PORTB и PORTD, конечно же, опечатался. Условия проверки кнопок переделал по типу if(!(PINB & (1<<0))). Переинициализировал порты кнопок на вход, но с подтягивающим резистором, а общий провод кнопок перепаял на землю, чтобы при замыкании на ножке был ноль. Касательно WIN_PORT пока не трогал, это будет следующей проблемой. (Хотя надеюсь что не будет(Чертов Eclipse ругается почему то на PORTE когда пытаюсь его использовать)) Закомментировал при тестировании, при реальной проверке было раскомментировано. Протеус отказался наотрез запускаться под Wineом к сожалению, потому все тесты проверяю в железе. После всех манипуляций и отключении (пока) функции GameWin вроде все заработало, но, из за дикого дребезга кнопок все перемигивается. Думаю, как избавиться от него, может добавить некоторой задержки после опроса кнопки и снова опросить, и, если нажатие подтвердится, - выполнять условие? (судя по простым примерам из интернета о том как избавиться от дребезга). Что то в роде: if(!(PINB & (1<<0))) { _delay_ms(50); if(!(PINB & (1<<0))) { ...условие } } ********************************* Отвечая самому себе - да, такой способ сработал, кнопки стали стабильно нажиматься и срабатывать. Мало ли кто еще из новичков читает данную тему. Теперь что касается функции выИгрыша, сделал так: if (!(PINA & ((1<<PA0)|(1<<PA1)|(1<<PA2)|(1<<PA3)|(1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7))) && (!(PINC & ((1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4)|(1<<PC5)|(1<<PC6)|(1<<PC7))))) Вроде все заработало. Сейчас все протестирую еще несколько раз конечно, но на первый взгляд. Спасибо всем огромное
  5. Чтож, переделал схему на Atmega8515L. Все светодиоды подключил на PORTA и PORTC, а кнопки на все PORTB и PORTD. Куски кода с инициализацией светодиодов, функциями включения и выключения оставил прежними, так как они работали и в прошлом, кнопки же переделал. Инициализировал PORTB и PORTВ на вход: (Хотя наверное этого можно было и не делать) После чего функцию ButtonState (проверка состояния кнопок) переписал по такому подобию (пример с работой кнопок на хабре): Но программа все же отказалась запускаться. Что может теперь быть не так? Если быть точным, она запускается, и почему то загорается 10 лампа, хотя по логике не должна И на нажатия на кнопки никак не реагирует. Кнопки кстати подключены к пинам, и к +5В. При замыкании на пине устанавливается логическая единица. С уважением, Максим Game.zip
  6. По своей глупости и незнанию выбрал не тот микроконтроллер. Ну что-ж, будет уроком. Наверное тогда переделаю все на него. Сроки так дико затянуты что разбираться, кажется, буду дольше, чем сделать на другом МК. Жаль, что не обратил внимание на совет про "предельно простую схему" в самом начале. Максим.
  7. Используя Atmega8515 с 40 ножками, можно просто все светодиоды повесить на свой пин и кнопки на свой пин. Я верно понимаю? Можно и без кварца сделать, он тут просто ни к чему. Максим
  8. К сожалению идея с АЦП почти отпала. Несмотря на то, что схема собрана, видимо, ее прийдется переделывать. Из за плохих кнопок и плавающих (сильно!) значений ацп на резисторах стабильно настроить не удается, буквально вечером настроив утром можно все заново перенастраивать. Очевидно, прийдется переделывать на один из предложенных вариантов ниже. Есть еще вариант такой, но будет ли он лучше? https://www.terraele...ushki.php?ID=42 Или лучше сразу делать что то подобное, что на картинке ниже?
  9. Понятно. Потыркал программу, видимо я что то снова делаю не так. Каким образом правильно проверить состояние ножки через PORT а не PIN? Максим.
  10. Про функцию считывания АЦП, комментарии и стиль названия переменных писал выше - стащил готовый код с урока на YouTube ничего не меняя. Проверка по PIN реализована в каждой из Button State и все в порядке работает. ( На всякий случай, конечно же я проверил с помощью PORT - не работает все равно) UART используется для того, чтобы узнать значения АЦП, возникающие при нажатии на кнопки. Хотя, по коду это итак видно, что и зачем и куда. Мне нужно не записанное мною значение, а то, которое находится конкретно сейчас в данный момент времени, ведь разные лампочки зависят от разных комбинаций нажатий разных клавиш. Столько критики по поводу кода, отступов, комментариев. Спасибо, конечно, но, в чем все таки может быть проблема? Менять уже 100% рабочую часть кода не вижу смысла. Может быть так правильнее и красивее, я не спорю, но оно работает, и работает хорошо, не работает только одна функция - GameWin, причем, по непонятным мне причинам. Или она не работает из за этого? Максим.
  11. К сожалению ни симуляцию, ни отладку включить не могу (пользую Eclipse под Linux). Пробовал сокращать как Вы указали - программа не выполняется, игра идет, лампочки потухают, но условие не выполняется. В данном примере условием является для проверки просто зажигание первого светодиода на 30 секунд. Архив прикрепляю, спасибо! С уважением, Максим. Game_Lights.zip
  12. Спасибо большое за советы. Интересные способы подключения, а главное более рациональные и правильные. В будущем обязательно буду пользоваться Но, проблема в том, что схема уже была разведена и запаяны компоненты, кроме резисторов АЦП. Насчет АЦП - да, действительно, используется резистивный делитель. Вход АЦП притянут через 47кОм к +5В, и все кнопки подключены так, что замыкаются на землю через разные резисторы (от 1кОм до 47кОм с шагом 3кОм). Все резисторы прецизионные. В программе задал диапазоны для кнопок, и протестировал значения АЦП после нагрева резистора паяльником (знаю, не очень разумно, но, какой никакой результат получил). АЦП считывал по UART. Все в принципе работает, не работает только функция GameWin. В чем может быть проблема? С уважением, Максим.
  13. Здравствуйте ув. форумчане! Обращаюсь к Вам за помощью в разъяснении некоторого вопроса. Существует такая игра, как "лампочки", я хотел реализовать ее в "железе". Имеется панель с 16 кнопками без фиксации и лампочкой внутри каждой кнопки. Кнопки расположены как матрица 4х4. Изначально кнопки светятся в заранее заданной последовательности (не имеет значения какой) и нажимая правильную комбинацию этих кнопок надо заставить их все потухнуть. После того, как это условие выполнено (потухли все) - они все разом зажигаются, и на свободную ножку МК подается импульс, и программа останавливается до Reset`а. Вот простое условие, которое описывает всю суть этой, достаточно простой программы: -При нажатии на горящую клавишу потухают все, что вокруг нее, в том числе и сама нажатая клавиша, а если они были потухшие — загораются. -При нажатии на потухшую клавишу загораются все вокруг нее и сама клавиша. Если до этого горели — потухают. -Необходимо нажимая правильную последовательность кнопок "потушить" все. Написал код. Так как кнопок 16, а выводов не так много, чтобы их все задействовать, я решил использовать АЦП, и, подключив все 16 кнопок через разные резисторы к АЦП "снимаю" показания и вычисляю какая кнопка нажата. Так же написал Инициализацию для всех светодиодов, функции включения и выключения, но код, почему-то не работает. А если я непонятно объяснил суть программы, это, по сути игра. Я ее нашел вот здесь, очень простая и понятная игра "Лампочки". Как вариант она есть на этом сайте: http://flash-yes.ru/lampochki/ (перечитал правила форума, надеюсь можно оставить ссылку здесь). В оригинале игра 5*5, мне необходима именно 4*4, реализованная в коде. Заранее извиняюсь за кривой код, пока только учусь. Уверен его можно написать куда более кратко и прозрачно, но, для начала необходимо добиться, чтобы он хотя бы выполнялся. И заранее извиняюсь за огромный прикрепленный код. Не совсем понял, как его можно было бы свернуть для читаемости. Файл main: #define F_CPU 16000000UL // Atmega 328P with 16MHz crystal #include <avr/io.h> #include <avr/interrupt.h> //подгружаем прерывание #include "keyboard.h" #include "leds.h" #include <util/delay.h> void InitADC(void); void ButtonState(void); void StartGame(void); void GameWin(void); // Прерывание по АЦП ISR (ADC_vect) { Keyboard(); } int main(void) { InitADC(); LedsOutput(); StartGame(); while(1) { if(num_ &(1<<7)) //если 7 бит в 1 то цифра записана { num_ &=~ (1<<7); //cброс 7 бита в регистре num_, остается код кнопки } ButtonState(); GameWin(); } } void StartGame(void) { // Рандомно заданные начальные условия игры LED1_ON(); LED2_ON(); LED3_ON(); LED4_ON(); LED5_ON(); LED6_OFF(); LED7_OFF(); LED8_ON(); LED9_ON(); LED10_OFF(); LED11_OFF(); LED12_ON(); LED13_ON(); LED14_ON(); LED15_ON(); LED16_ON(); } void ButtonState(void) { // Тушить саму кнопку при нажатии или зажигать, если не горела. // Тушить все кнопки вокруг нажатой, если горели, зажигать, если нет. /****BUTTON_1*****/ if (num_ == 1) { if (LED1_PIN & (1<<LED1_BIT)) LED1_OFF(); else LED1_ON(); if (LED2_PIN & (1<<LED2_BIT)) LED2_OFF(); else LED2_ON(); if (LED5_PIN & (1<<LED5_BIT)) LED5_OFF(); else LED5_ON(); } /****BUTTON_2*****/ if (num_== 2) { if (LED2_PIN & (1<<LED2_BIT)) LED2_OFF(); else LED2_ON(); if (LED1_PIN & (1<<LED1_BIT)) LED1_OFF(); else LED1_ON(); if (LED3_PIN & (1<<LED3_BIT)) LED3_OFF(); else LED3_ON(); if (LED6_PIN & (1<<LED6_BIT)) LED6_OFF(); else LED6_ON(); } /****BUTTON_3****/ if (num_ == 3) { if (LED3_PIN & (1<<LED3_BIT)) LED3_OFF(); else LED3_ON(); if (LED2_PIN & (1<<LED2_BIT)) LED2_OFF(); else LED2_ON(); if (LED4_PIN & (1<<LED4_BIT)) LED4_OFF(); else LED4_ON(); if (LED7_PIN & (1<<LED7_BIT)) LED7_OFF(); else LED7_ON(); } /****BUTTON_4****/ if (num_ == 4) { if (LED4_PIN & (1<<LED4_BIT)) LED4_OFF(); else LED4_ON(); if (LED3_PIN & (1<<LED3_BIT)) LED3_OFF(); else LED3_ON(); if (LED8_PIN & (1<<LED8_BIT)) LED8_OFF(); else LED8_ON(); } /****BUTTON_5****/ if (num_ == 5) { if (LED5_PIN & (1<<LED5_BIT)) LED5_OFF(); else LED5_ON(); if (LED1_PIN & (1<<LED1_BIT)) LED1_OFF(); else LED1_ON(); if (LED6_PIN & (1<<LED6_BIT)) LED6_OFF(); else LED6_ON(); if (LED9_PIN & (1<<LED9_BIT)) LED9_OFF(); else LED9_ON(); } /****BUTTON_6****/ if (num_ == 6) { if (LED6_PIN & (1<<LED6_BIT)) LED6_OFF(); else LED6_ON(); if (LED2_PIN & (1<<LED2_BIT)) LED2_OFF(); else LED2_ON(); if (LED5_PIN & (1<<LED5_BIT)) LED5_OFF(); else LED5_ON(); if (LED7_PIN & (1<<LED7_BIT)) LED7_OFF(); else LED7_ON(); if (LED10_PIN & (1<<LED10_BIT)) LED10_OFF(); else LED10_ON(); } /****BUTTON_7****/ if (num_== 7) { if (LED7_PIN & (1<<LED7_BIT)) LED7_OFF(); else LED7_ON(); if (LED3_PIN & (1<<LED3_BIT)) LED3_OFF(); else LED3_ON(); if (LED6_PIN & (1<<LED6_BIT)) LED6_OFF(); else LED6_ON(); if (LED8_PIN & (1<<LED8_BIT)) LED8_OFF(); else LED8_ON(); if (LED11_PIN & (1<<LED11_BIT)) LED11_OFF(); else LED11_ON(); } /****BUTTON_8****/ if (num_== 8) { if (LED8_PIN & (1<<LED8_BIT)) LED8_OFF(); else LED8_ON(); if (LED4_PIN & (1<<LED4_BIT)) LED4_OFF(); else LED4_ON(); if (LED7_PIN & (1<<LED7_BIT)) LED7_OFF(); else LED7_ON(); if (LED12_PIN & (1<<LED12_BIT)) LED12_OFF(); else LED12_ON(); } /****BUTTON_9****/ if (num_== 9) { if (LED9_PIN & (1<<LED9_BIT)) LED9_OFF(); else LED9_ON(); if (LED5_PIN & (1<<LED5_BIT)) LED5_OFF(); else LED5_ON(); if (LED10_PIN & (1<<LED10_BIT)) LED10_OFF(); else LED10_ON(); if (LED13_PIN & (1<<LED13_BIT)) LED13_OFF(); else LED13_ON(); } /****BUTTON_10****/ if (num_ == 10) { if (LED10_PIN & (1<<LED10_BIT)) LED10_OFF(); else LED10_ON(); if (LED6_PIN & (1<<LED6_BIT)) LED6_OFF(); else LED6_ON(); if (LED9_PIN & (1<<LED9_BIT)) LED9_OFF(); else LED9_ON(); if (LED11_PIN & (1<<LED11_BIT)) LED11_OFF(); else LED11_ON(); if (LED14_PIN & (1<<LED14_BIT)) LED14_OFF(); else LED14_ON(); } /****BUTTON_11****/ if (num_ == 11) { if (LED11_PIN & (1<<LED11_BIT)) LED11_OFF(); else LED11_ON(); if (LED7_PIN & (1<<LED7_BIT)) LED7_OFF(); else LED7_ON(); if (LED10_PIN & (1<<LED10_BIT)) LED10_OFF(); else LED10_ON(); if (LED12_PIN & (1<<LED12_BIT)) LED12_OFF(); else LED12_ON(); if (LED15_PIN & (1<<LED15_BIT)) LED15_OFF(); else LED15_ON(); } /****BUTTON_12****/ if (num_ == 12) { if (LED12_PIN & (1<<LED12_BIT)) LED12_OFF(); else LED12_ON(); if (LED8_PIN & (1<<LED8_BIT)) LED8_OFF(); else LED8_ON(); if (LED11_PIN & (1<<LED11_BIT)) LED11_OFF(); else LED11_ON(); if (LED16_PIN & (1<<LED16_BIT)) LED16_OFF(); else LED16_ON(); } /****BUTTON_13****/ if (num_ == 13) { if (LED13_PIN & (1<<LED13_BIT)) LED13_OFF(); else LED13_ON(); if (LED9_PIN & (1<<LED9_BIT)) LED9_OFF(); else LED9_ON(); if (LED14_PIN & (1<<LED14_BIT)) LED14_OFF(); else LED14_ON(); } /****BUTTON_14****/ if (num_ == 14) { if (LED14_PIN & (1<<LED14_BIT)) LED14_OFF(); else LED14_ON(); if (LED10_PIN & (1<<LED10_BIT)) LED10_OFF(); else LED10_ON(); if (LED13_PIN & (1<<LED13_BIT)) LED13_OFF(); else LED13_ON(); if (LED15_PIN & (1<<LED15_BIT)) LED15_OFF(); else LED15_ON(); } /****BUTTON_15****/ if (num_ == 15) { if (LED15_PIN & (1<<LED15_BIT)) LED15_OFF(); else LED15_ON(); if (LED11_PIN & (1<<LED11_BIT)) LED11_OFF(); else LED11_ON(); if (LED14_PIN & (1<<LED14_BIT)) LED14_OFF(); else LED14_ON(); if (LED16_PIN & (1<<LED16_BIT)) LED16_OFF(); else LED16_ON(); } /****BUTTON_16****/ if (num_ == 16) { if (LED16_PIN & (1<<LED16_BIT)) LED16_OFF(); else LED16_ON(); if (LED12_PIN & (1<<LED12_BIT)) LED12_OFF(); else LED12_ON(); if (LED15_PIN & (1<<LED15_BIT)) LED15_OFF(); else LED15_ON(); } } void GameWin() { // Условие выйгрыша - все светодиоды потухли if () { } WIN_PORT |= (1<<WIN_BIT); } void InitADC(void) { // Инициализация АЦП PORTC &=~(1<<PC0); DDRC &=~ (1<<PC0); ADCSRA|=(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADSC)|(1<<ADATE); ADMUX |=(1<<REFS0); asm("sei"); } Функция LED1_ON имеет такой вид: void LED1_ON(void) { LED1_PORT |=(1<<LED1_BIT); } Функцию чтения данных с АЦП стащил с одного видеоурока volatile unsigned char num_; Keyboard() { static unsigned char Deistvie, Kol_Proverok, Temp; unsigned char num; //-----------------// num = NumADC(); if(Deistvie & (1<<0)) { if(num == 100) { if((Kol_Proverok++) < 250) { if(num != Temp) { Temp = num; Kol_Proverok=0; } } else { Kol_Proverok=0; Deistvie &=~(1<<0); } return; } else { Temp =0; Kol_Proverok=0; } } //====================// else { if(num_ != (1<<7)) { if(num != 100) { Deistvie &=~(1<<1); if((Kol_Proverok++) < 150) { if(num!= Temp) { Temp = num; Kol_Proverok=0; } } else { num_ = Temp|(1<<7); Kol_Proverok=0; Deistvie|=(1<<0); } return; } } if(Deistvie != (1<<1)) { Kol_Proverok=0; Temp=100; Deistvie|=(1<<1); } } } NumADC() { unsigned int ACP; ACP = ADCW; if(ACP < 45) return 1; if(ACP < 74) return 2; if(ACP < 94) return 3; if(ACP < 220) return 4; if(ACP < 280) return 5; if(ACP < 340) return 6; if(ACP < 400) return 7; if(ACP < 505) return 8; if(ACP < 580) return 9; if(ACP < 630) return 10; if(ACP < 710) return 11; if(ACP < 790) return 12; if(ACP < 870) return 13; if(ACP < 950) return 14; if(ACP < 1000) return 15; if(ACP <1024) return 16; return 100; } Заранее благодарю за ответ, С уважением, Максим.
×
×
  • Создать...