Отрабатываю схему. Наткнулся на тонкость поведения микры 74HC193. Это счетчик, но во время записи данных в память, он является регистром адреса. То есть должен "стоять", хотя на вход UP (счет вперед) молотит тактовый генератор. Хотел использовать вход DN (счет назад). При DN = LOW - счетчик должен бы стоять, и Протеус это подтверждает. В реале - зависит от загруженных (вход параллельной загрузки PL = LOW) в него данных. При PL = LOW - счетчик стоит, как по ДШ и загружается. Если загружено 0 или четное число, то при PL => HIGH и DN = LOW - счетчик остаётся стоять. Если нечетное - то при PL => HIGH и DN = LOW - счетчик стартует. Этот момент не описан в ДШ. Кто подскажет ? Это нормально для микры или дохлая попалась ? А то до ближайшего мага переться не близко. Заранее спасибо.
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); // и вывод изображения. }