Самоделкин дисплей.

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Ariadna-on-Line, 11 июл 2020.

  1. Ariadna-on-Line

    Ariadna-on-Line Гуру

    • 5.1. Заголовок темы должен быть информативным
    Отрабатываю схему. Наткнулся на тонкость поведения микры 74HC193. Это счетчик, но во время записи данных в память, он является регистром адреса. То есть должен "стоять", хотя на вход UP (счет вперед) молотит тактовый генератор. Хотел использовать вход DN (счет назад). При DN = LOW - счетчик должен бы стоять, и Протеус это подтверждает. В реале - зависит от загруженных (вход параллельной загрузки PL = LOW) в него данных. При PL = LOW - счетчик стоит, как по ДШ и загружается. Если загружено 0 или четное число, то при PL => HIGH и DN = LOW - счетчик остаётся стоять. Если нечетное - то при PL => HIGH и DN = LOW - счетчик стартует. Этот момент не описан в ДШ.
    Кто подскажет ? Это нормально для микры или дохлая попалась ? А то до ближайшего мага переться не близко. Заранее спасибо.
     
    Последнее редактирование: 12 июл 2020
  2. Un_ka

    Un_ka Гуру

    Это точно та? Может после названия затесались небольшая буковка N.
     
  3. Ariadna-on-Line

    Ariadna-on-Line Гуру

    1. Ммм....да. Именно 74HC193N. (dip-16 корпус). А что за засада ?
    2. Нашелся счетчик 74HC161N. Заменил им. Всё заработало.

    Можно включить СД матрицу , 7-сегментный индикатор, свето-диоды. Микросхемы памяти имеют емкость 16 байт, поэтому доступны 16х8 сегментов.
    Из тонкостей только пары C1R2 и С2R5. Подбираются под скорость обмена.
    Перевел в код Ардуины.
    Код (C++):
    #define DataPin 5
    #define ShiftPin 6
    #define StrobePin 7

    int M;
    int N;

    boolean PICSEL;
    boolean SCAN[16][8];       //Сюда должны быть помещены данные. 1 пиксель - 1 байт. Согласен - не экономно.
    boolean ADDRESS[][4] = {{0,0,0,0}, {0,0,0,1}, {0,0,1,0}, {0,0,1,1}, {0,1,0,0}, {0,1,0,1}, {0,1,1,0}, {0,1,1,1},
                              {1,0,0,0}, {1,0,0,1}, {1,0,1,0}, {0,0,1,1}, {1,1,0,0}, {1,1,0,1}, {1,1,1,0}, {1,1,1,1}};
    void setup() {

    pinMode(DataPin, OUTPUT);
    pinMode(ShiftPin, OUTPUT);
    pinMode(StrobePin, OUTPUT);
      Serial.begin(9600);
    }

    void loop() {
    LEDdisplay();
    delay(3000);
    }

    void LEDdisplay() {

    digitalWrite(ShiftPin,LOW);        //Счетчик  и дисплей останавливаются.
    digitalWrite(DataPin, LOW);       //Вход приготовлен к приему данных.

      for (M = 0; M < 8; M++) {
      for (N = 0; N < 4; N++) {

    PICSEL = ADDRESS[M][N];
    Serial.print("Address = ");
    Serial.println(PICSEL);            //Вывод на печать
    digitalWrite(DataPin, PICSEL);
    delay(10);
    digitalWrite(ShiftPin, HIGH);      //Высокий уровень на входе сдвига записывает бит на выход и сдвигает данные
    delay(10);
    digitalWrite(ShiftPin, LOW);       //Низкий уровень - исходный. Поддерживает одновременно остановку счетчика.
      }

    digitalWrite(DataPin, LOW);        //Длительный ноль на линии данных разряжает конденсатор на пине
    delay(100);                          //параллельной загрузки счетчика.
    digitalWrite(DataPin, HIGH);       //На выходах счетчика зафиксируется адрес ячейки памяти.
    delay(10);

      for (N = 0; N < 8; N++) {            //Побитная отправка столбца изображения.
    PICSEL = SCAN[M][N];                 //Нижний пиксел - идет первым.
    Serial.print("Data = ");
    Serial.println(PICSEL);
    digitalWrite(DataPin, PICSEL);
    delay(10);
    digitalWrite(ShiftPin, HIGH);      //Высокий уровень на входе сдвига записывает бит на выход и сдвигает данные
    delay(10);
    digitalWrite(ShiftPin, LOW);       //Низкий уровень - исходный. Поддерживает одновременно остановку счетчика.
    digitalWrite(DataPin, HIGH);       //Высокий уровень поддерживает заряд конденсатора злинии загрузки.
    delay(10);
    }
    digitalWrite(StrobePin,LOW);       //Нулевой уровень на линии записи микросхем памяти
    delay(10);                           //
    digitalWrite(StrobePin,HIGH);      //Запоминание данных в памяти
    delay(10);                           //
    }
    digitalWrite(ShiftPin,HIGH);       //Счетчик запускается. Дисплей начинает сканирование памяти
    digitalWrite(DataPin, HIGH);       // и вывод изображения.
    }
     

    Вложения:

    Последнее редактирование: 14 июл 2020