Jump to content

Recommended Posts

Posted (edited)

Играюсь с микросхемой CD4026B от Texas Instruments - десятичный счётчик с выводом на семисегментный дисплей. Экспериментальная установка собрана на беспаечной макетке, за тактовую ножку дёргает ардуина. Есть у этой микросхемы интересная возможность - ножкой DISPLAY ENABLE IN включать и выключать дисплей (то есть вывод питания на элементы семисегментника). С ней-то странность работы и связана.

Код прост и незатейлив:

void loop() {
  for (i = 10; i>0; i--){//внешний цикл - задаём значение j, то есть докуда считаем
  //digitalWrite(_disp_en,0);//выключили дисплей
  digitalWrite(_rst,1);//дёрнули ресет - сбросили счётчик
  digitalWrite(_rst,0);
  for (j = 0; j<i; j++){//внутренний цикл - считаем до j
  digitalWrite(_clk, 1);
  digitalWrite(_clk, 0);
  }//в этом месте на счётчике установлено j
  //digitalWrite(_disp_en,1);//включаем дисплей
  delay(2000);//любуемся результатом
  }
  while(1);
}

В таком виде, с закомментированными строками выключения и включения дисплея, всё работает адекватно. Дисплей показывает сначала 0, потом 9, потом 8 и так до единицы. Если поставить соответствующие задержки, будет видно весь процесс отсчёта.

Если же раскомментировать включение и выключение дисплея, на выходе начинает отображаться хаотичная ерунда - при этом программные счётчики работают правильно (смотрел выводом в порт). Пробовал разные варианты кода - результат тот же.

У меня на эту тему одна версия: в момент включения дисплея, то есть при подаче счётчиком питания на несколько сегментов индикатора, возникают наводки в проводах макетки (они достаточно плотно скучились), и это вызывает хаотичные дополнительные срабатывания счётчика, из-за чего в итоге выводится случайное значение. Но сам себе возражаю: напряжение-то всего пять вольт, токи шуточные (общий коллектор семисегментника через резистор 1,3 кОм подключен), включаются сегменты за один такт (вроде бы) - ну откуда тут множественные наводки на провод CLK?

Прав ли я в таком  предположении? Или причина кроется в ином месте?

Edited by Огонёк

Share this post


Link to post
Share on other sites

Проверьте подключение питания и земли микросхемы. КМОП логика при их обрыве может питаться через входы, творя "чудеса".

Share this post


Link to post
Share on other sites

Переткнул провода питания, дополнительно заменил провода на тактовую ножку и включение дисплея, поставил подлиннее, чтобы они не шли вплотную параллельно друг другу - всё заработало.

Share this post


Link to post
Share on other sites

Приглашаем на вебинар «Экономичные решения МЕAN WELL для надежных разработок» (30.09.2021)

Вебинар поможет в выборе недорогих источников питания оптимальных для систем охраны, промышленных и телекоммуникационных приложений, а также для широкого применения. Будут представлены основные группы источников питания по конструктивным признакам и по областям применения в контексте их стоимости или их особенностей, позволяющих снизить затраты на электропитание конечного устройства.
Подробнее

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Последний наверное вопрос: дребезг нужно как-то отслеживать или приемлемый для моей задачи результат можно достигнуть без фильтрации?
    • Ну вот, теперь уже всё есть. Сохранять - сохраняет, печатать - печатает.  
    • Хочу уточнить , на какую  мощность  R3  ? По моему про OUT  я  нашёл верно  на рисунке ...  
    • в прерывании таймера только инкрементируется переменная системного времени SysTime. больше там ничего делать не нужно. в главном цикле уже все "вычисления": Изменилось состояние ноги с 0 на 1 пишем myPinHigh = SysTime Изменилось состояние ноги с 1 до 0 пишем myPinLow= SysTime HighLevelDuration =  myPinHigh - myPinLow LowLevelDuration =  myPinLow - myPinHigh Теперь имеется все что нужно, что бы "принять решение" и затем обнулить переменные для последующего: если промежуток между импульсами больше 20 (LowLevelDuration > 20) то делается что нужно и все обнуляется   Если ног несколько, то все тоже только переменных больше.   NB вобще то это не для мк задача, достаточно "LC-интегратора" с детектором  и усилителем. мк нужен когда цифровые сигналы на входе нужно как то различить\сравнить\декодировать  например если пауза между импульсами от 20 до 50 сидим ничего не делаем, от 51 до 65 - открываем кран, от 66 до 100 - открываем два крана, выше 101 включаем сирену. 
    • От чего слушаются наушники? Если от компа, то можно попробовать включить тест наушников, с ютуба, на каких частотах пик громкости

  • Датчики движения (PIR): HC-SR501, HC-SR505, AM312, SR602

×
×
  • Create New...