Jump to content

Vit@lik

Members
  • Content Count

    430
  • Joined

  • Last visited

Everything posted by Vit@lik

  1. какие-то странные номиналы например 5 V ± 0.5 V ----- 0.047 µF Все таки заработала схема с параллельными каналами, но думаю, что не стоит так делать. поставил С1,С2,С3,С4 - 0,33мкф, питание 5В
  2. Там нет таблицы с номером 9. (возможно я смотрю в другой даташит) https://pdfserv.maximintegrated.com/en/ds/MAX3222-MAX3241.pdf Единственное что нашел это то, что для напряжения 4.5 - 5.5вольт, нужно 0,33мкф. (Table 2. Required Minimum Capacitor Values) Но дело не в этом. Потому что и с 0,1мкф все долго и стабильно работало в других устройствах. Но конденсаторы заменю на 0.33мкф. Спасибо за замечания. Завтра буду резать дорожки и разъединять каналы. Также теперь есть еще и подозрения на кварцевый резонатор.
  3. открывал много раз, смотрел много раз а что не так с ними? по даташиту для мах3232 0.1мкф видел как то такую схему.... для мах232 - 1мкф для мах3232 0,1мкф схема из даташита
  4. Добрый день, сделал конвертер MAX3232 по такой схеме. Не работает. Отправляет в терминал одни нули. Скажите кто знает можно так включать и объединять каналы? В интернете видел такую схему. Поэтому так и сделал.
  5. Здравствуйте, делаю устройство на МК, и столкнулся с проблемой что светодиоды которые подключены к ULN2003 слабо светятся без управляющего сигнала на входах. Думаю, что проблема в том, что вход COM ULN2003 подключен к плюсу с меньшим напряжением чем аноды светодиодов, и тогда диод в внутри ULN2003 открывается и ток течет от плюса большего потенциала (+5V) через резистор и светодиод к плюсу с меньшим потенциалом (+3V...3,7V). Все верно?
  6. @IMXO Здравствуйте. Мне не хватает портов для кнопок и датчиков (работающих как обычная кнопка). Думаю над тем чтобы использовать АЦП входы ADC6 и ADC7 у ATmega8. Но они могут работать только как АЦП вход. Скажите хорошая ли это идея? Как-то раз я заметил что опрос АЦП сильно замедляет работу процессора.
  7. @IMXO А будет ли лучше если тот код что обозначен красным перенести с таймера в главный цикл? чтобы не нагромождать прерывания
  8. да можно. Но тогда новая прошивка не будет работать на старых платах. и нога процессора использована без АЦП. нужна обратная совместимость. да , но надо будет тянуть еще одну дорожку в противоположную сторону платы. А там и так очень тесно. Попробую. Внутренний в процессоре имеете в виду? да можно но у него там номинал вроде большой, для надежности дублирую
  9. Нужно сделать, чтобы при снижении напряжения питания с 12В до какого уровня порт процессора (power_check) встал в лог 1, а при превышении этого же уровня в 0. Нарисовал схему. Можете пожалуйста проверить схему на правильность? R31 і R27 подберу сам. А другие резисторы какого номинала поставить?
  10. потому что эта нога привязана к аппаратному ШИМ, а что порт процессора не справится с IRLR024N? тогда транзистор Дарлингтона взять
  11. @Lexter @andrusha152 Надо именно такой светодиод. Светодиод TSAL6200 или похожий, микроконтроллер управляет очень короткими вспышками. У него прямой ток в таком режиме до 1,5А (100мкс). Для генерации вспышек использована нога микроконтроллера которая привязана к таймеру OC2. И та самая нога используется для внутрисхемного программирования по SPI. И может такое быть, а уже бывало, что во время такого программирования светодиод сгорал. А каждый раз специально его отключать во время прошивки возможности нет. Нужно сделать так, чтобы он автоматически отключался (блокировался) при подключении программатора.
  12. Здравствуйте. Есть светодиод который может работать только в режиме ШИМ. Если включить его по такой схеме, и как бы зашунтировать транзистором с резистором и на базу подать +питания, защитит ли такая цепь его при подаче постоянного безпрерывного сигнала на затвор?
  13. Здравствуйте, подскажите пожалуйста, сколько вблизи одновременно может работать bluetooth модулей HC-05/HC06 и им подобных не мешая друг другу?
  14. уже сделал, работает на 16 кнопок. Дело было не d типах данных, а в другом месте.
  15. @IMXO читал Белов А.В. Микроконтроллеры AVR. Спасибо сохранил закладку читал Б. Керниган, и Д. Ритчи немного, но пока еще не до конца. И статьи в интернете. Только читать скучно. Хочу и еще и делать и работать. Систему типов данных Си знаю, это же основа... да, пробовал unsigned int в первую очередь, а когда не сработало уже и даже unsigned long и другие варианты. ладно, попробую уже завтра разобраться самостоятельно
  16. @IMXO не работает на более чем 8 кнопок. пробовал указывать размерность char ... :16 не работает. мне Атмел Cтудия предлагала указать тип char16_е, я указал но потом выдает ошибку не распознает такой тип. подключал библиотеку stdlib ничего не изменило
  17. @IMXO это устройство почти аналог телевизионного пульта, сюда будет и этого достаточно. Посоветуйте алгоритм а еще лучше и пример, для опроса датчиков типа геркон (или механический концевик), около 10 шт. С защитой от дребезга, помех, важно уловить все срабатывания, (нажимания и отжимания) и последовательность, если два датчика сработали одновременно то тоже должны фиксировать два или три (или больше ) события
  18. я что-то думал что 8 битный процессор не способен нормально выполнять логические операции между 16 битными переменными, хорошо сделаю думал это делается сложнее
  19. @IMXO Только что отредактировал программу и сделал по вашей ссылке. Все заработало. Спасибо Понравилось что в прерывании минимум кода. Только это: ISR(TIMER0_OVF_vect){ send_procc(); timer0_tact+=1; static uint8_t cnt; if(cnt++ >= 10 ){cnt=0;tick_flag=1;} //флаг опроса кнопок }//end of ISR Да еще интересно что все значения задержек подошли для моей частоты процессора и прескалера таймера. дальше надо придумать как сделать на 16-17 кнопок, потому что эта функция только на 8 кнопок. Думаю сделать еще один такой же обработчик на вторую группу кнопок. Еще меня заинтересовала ваша цитата ранее А можете еще показать пример какого-то вашего кода например тот что для опроса пинов работающих в условиях сильных ЭМП. Мне такое пригодится. Или подойдет тот что вы отправляли ранее? Возможно имеется что-то лучше? Не буду задавать вопросов. А буду изучать самостоятельно.
  20. он на 4 вызов функции переполниться и станет 0
  21. Кто-то может ответить как может работать этот код? там черным по белому написано инкремент m_Buttons.ucJitter++; перед условием if. а это значит что m_Buttons.ucJitter++ в любом случае буде больше нуля тоесть - true, а потом скобах условия if делаем Логическое отрицание-НЕ только для одного m_Buttons.ucJitter, тоесть он всегда будет ЛОЖЬ, у нас в if два операнда для Логического умножения-И, и первый всегда ЛОЖЬ, а если у нас хотя бы один операнд ЛОЖЬ все выражение становиться ЛОЖЬ. Тоесть код в скобках после If не выполнится НЕКОГДА! как оно может работать? в чем я не прав? m_Buttons.ucJitter++; ucTemp = s_ucPort ^ m_Buttons.ucPressed;// Маска изменения состояние if (!m_Buttons.ucJitter && ucTemp) // Состояние изменилось, дребезг подавлен { //
  22. @IMXO у меня такое чувство что в коде по ссылке ошибка как выполнится условие if (!m_Buttons.ucJitter && ucTemp) если прямо перед ним мы инкрементируем m_Buttons.ucJitter++; тоесть он будет больше 0 а в скобках инверсия тогоже !m_Buttons.ucJitter значит первый операнд всегда лог0 возможно те две команды (или одну) что после самого первого if нужно в скобки и else перед ними // Можно задать до 8 кнопок #define pin_BUTTON0 RB0 #define pin_BUTTON1 RB1 #define pin_BUTTON2 RB2 #define pin_BUTTON3 RB3 #define pin_BUTTON4 RB4 #define pin_BUTTON5 RB5 #define pin_BUTTON6 RB6 #define pin_BUTTON7 RB7 typedef struct { unsigned char ucPressed; // Состояния кнопок unsigned char ucJitter : 2; // Для подавления дребезга unsigned char ucCounter : 6; // Для проверки удерживания unsigned char ucHold; // Состояние длительного удерживания // События: unsigned char ucShort; // Короткое нажатие и отпускание unsigned char ucJustPressed; // Кнопки только что нажаты unsigned char ucJustReleased; // Кнопки только что отпущены unsigned char ucChanged; // Состояние кнопок изменилось } TBUTTONS; volatile TBUTTONS m_Buttons; void Task_Buttons (void) { static unsigned char s_ucPort; // Предыдущее состояние портов unsigned char ucTemp; ucTemp = 0x00; if (!pin_BUTTON0) ucTemp |= 0x01; if (!pin_BUTTON1) ucTemp |= 0x02; if (!pin_BUTTON2) ucTemp |= 0x04; if (!pin_BUTTON3) ucTemp |= 0x08; if (!pin_BUTTON4) ucTemp |= 0x10; if (!pin_BUTTON5) ucTemp |= 0x20; if (!pin_BUTTON6) ucTemp |= 0x40; if (!pin_BUTTON7) ucTemp |= 0x80; ucTemp ^= s_ucPort; // Изменения с момента последнего выполнения s_ucPort ^= ucTemp; // Текущее состояние портов if (ucTemp) // Подавление дребезга { m_Buttons.ucJitter = 0; return; } //------------------------------------------------------------------------------ m_Buttons.ucJitter++; ucTemp = s_ucPort ^ m_Buttons.ucPressed;// Маска изменения состояние if (!m_Buttons.ucJitter && ucTemp) // Состояние изменилось, дребезг подавлен { //------------------------------------------------------------------------------ // Проверяем отпущенные кнопки //------------------------------------------------------------------------------ if (m_Buttons.ucPressed & ucTemp) // Есть отпущенные { m_Buttons.ucJustReleased |= ucTemp; m_Buttons.ucChanged |= ucTemp; m_Buttons.ucShort |= ucTemp; m_Buttons.ucShort &= ~m_Buttons.ucHold; m_Buttons.ucHold &= ~ucTemp; } // if released //------------------------------------------------------------------------------ // Проверяем нажатые кнопки //------------------------------------------------------------------------------ if ((m_Buttons.ucPressed ^ ucTemp) & ucTemp) // Есть нажатые { m_Buttons.ucChanged |= ucTemp; m_Buttons.ucJustPressed |= ucTemp; m_Buttons.ucShort &= ~ucTemp; } // if pressed m_Buttons.ucPressed = s_ucPort; m_Buttons.ucCounter = 0; } // if changed and debounced m_Buttons.ucCounter++; //------------------------------------------------------------------------------ // Проверяем длительное удерживание //------------------------------------------------------------------------------ if (m_Buttons.ucCounter == 50) { m_Buttons.ucChanged |= m_Buttons.ucHold ^ m_Buttons.ucPressed; m_Buttons.ucHold = m_Buttons.ucPressed; } }
  23. спасибо @IMXO , попробую свой код переписать. хотя для 15-17 кнопок объем будет большой.
  24. понял 11111111 << 1 = 1111110 0XFF 0XFE
×
×
  • Create New...