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

Помогите разобраться с кодом для 74HC595

Про 2 порта я не понял :( . 4 ноги - код цифры, а остальное куда?

И как у тебя задаётся в какой разряд индикации какая цифра выводится? Прости, я с газоразрядными дисплеями не работал, только о светодиодными.

 

C регистром у тебя 3 ноги занято (судя по последней версии кода), без регистра - 4. Выгадал немного, зато куча заморочек в коде. - циклы, маски и пр.

 

И зачем для I2C один порт? У этого интерфейса всего 2 ноги. Остаётся ещё 6.

И что у тебя "всё остальное"?

у газоразрядного индикатора в общем случае 11 ног (общий анод и катоды-цифры от 0 до 9), если всего будет 6 ламп (часы, минуты, секунды) то через что бы управлять всеми шестью через К155ИД1 нужно будет задействовать 4*6 ног. (Кстати я ошибся написав что два порта, на самом деле целых три, только сейчас понял). По любому надо будет разбираться с 74HC595, так как их можно соединить последовательно, очень сэкономив ноги МК. "И как у тебя задаётся в какой разряд индикации какая цифра выводится?" - просто в цепочку последовательно соединенных 74YC595 - проталкивается число времени, например, 234002 - (23:40:02).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понятно. Фактически классическая статическая индикация :) .

Тогда да, придётся разбираться с регистрами :( .

Изменено пользователем hd44780

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно начать экономить отказавшись от секунд. Баловоство это.

Тоже правда.

 

А кто нибудь знает различия во внешнем виде между динамической и статической индикацией газоразрядных индикаторов. И есть ли они ? По идее их использовали со статической индикацией.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не знаю.

Когда-то давно, когда я ещё был маленьким, и на эти вещи смотрел исключительно как на красивые игрушки, мне в руки попал некий блок индикации на каких-то лампах. Одна лампа-одна цифра. Там было порядка 20 таких ламп. И куча каких-то микросхем (сколько именно, не помню). Но, как мне теперь кажется, это была статическая индикация (по воспоминаниям, исходя из равного (или примерно равного) кол-ва микросхем и ламп).

 

Вообще, для динамической индикации цифры надо всё время включать-выключать (как минимум раз 20-25 в секунду). Газовые лампы, по-моему, очень инерционная штука для подобных вещей.

 

А зачем именно газовые лампы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще, для динамической индикации цифры надо всё время включать-выключать (как минимум раз 20-25 в секунду). Газовые лампы, по-моему, очень инерционная штука для подобных вещей.

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

А зачем именно газовые лампы?

Это нынче модный тренд. Из разряда "теплый ламповый звук", Steam Punk и т.д.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще, для динамической индикации цифры надо всё время включать-выключать (как минимум раз 20-25 в секунду). Газовые лампы, по-моему, очень инерционная штука для подобных вещей.

нету времени, посмотрите здесь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё, я разобрался! Оказалось что я не правильно работал с регистром последовательного сдвига, а именно он смещал всё на бит в сторону. Вот поправил функцию и всё поехало как надо:

void HC595_write(unsigned char dig)             //функция записи данных в регистр 74HC595 (используя PORTD.0=DS, PORTD.1=SH_CP, PORTD.2=ST_CP)
{
    unsigned int i;
    for(i=0; i<=7; i++)                         //цикл для последовательного вывода 8 бит данных из массива
    {
        PORTD.0=bin_digits[dig] & (1<<i);       //выводим "текущий бит" в линию DS
        PORTD.1=1;                              //выводим "0" в линию SH_CP
        PORTD.1=0;                              //выводим "1" в линию SH_CP - считываем бит на входе регистра (считывание происходит по переднему фронту импульса на SH_CP)
    }
    PORTD.2=1;                                  //выводим "1" в линию ST_CP - "защелкиваем данные" ("защелкивание" происходит по переднему фронту импульса на ST_CP)
    PORTD.2=0;                                  //выводим "0" в линию ST_CP
}

 

Вот что именно изменил: "for(i=0; i<=7; i++)" , а вот как было "for(i=0; i<7; i++)".

Изменено пользователем lol483

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего себе заявочки!

регистр последовательного сдвига неправильно работал
, Вы бы еще написали что нашли "баг в компиляторе". Как Вы думаете, сколько раз будет выполнен код
for(i=0; i<7; i++)

и какой будет подставлен последний индекс в Вашу конструкцию по выводу бита в порт?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего себе заявочки! , Вы бы еще написали что нашли "баг в компиляторе". Как Вы думаете, сколько раз будет выполнен код
for(i=0; i<7; i++)

и какой будет подставлен последний индекс в Вашу конструкцию по выводу бита в порт?

По идее всего 6 раз и как раз последний бит не дописывался. Так ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет не так. 7 раз.

Да, точно 7, всего то их восемь, вот последний то и не дописывался. Но сейчас всё отлично.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ещё сомнительная конструкция:

 PORTD.0=bin_digits[dig] & (1<<i);

Лучше как-то так:

 PORTD.0= (bin_digits[dig] & (1<<i)) ? (1) : (0);

 

или

прочитать bin_digits[dig] в байт и сдвигать его:

tmp=bin_digits[dig];

for(.....
PORTD.0= (tmp&1) ? (1) : (0);
....
tmp>>=1;
....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...