lol483 0 10 мая, 2012 Опубликовано 10 мая, 2012 · Жалоба Про 2 порта я не понял :( . 4 ноги - код цифры, а остальное куда? И как у тебя задаётся в какой разряд индикации какая цифра выводится? Прости, я с газоразрядными дисплеями не работал, только о светодиодными. C регистром у тебя 3 ноги занято (судя по последней версии кода), без регистра - 4. Выгадал немного, зато куча заморочек в коде. - циклы, маски и пр. И зачем для I2C один порт? У этого интерфейса всего 2 ноги. Остаётся ещё 6. И что у тебя "всё остальное"? у газоразрядного индикатора в общем случае 11 ног (общий анод и катоды-цифры от 0 до 9), если всего будет 6 ламп (часы, минуты, секунды) то через что бы управлять всеми шестью через К155ИД1 нужно будет задействовать 4*6 ног. (Кстати я ошибся написав что два порта, на самом деле целых три, только сейчас понял). По любому надо будет разбираться с 74HC595, так как их можно соединить последовательно, очень сэкономив ноги МК. "И как у тебя задаётся в какой разряд индикации какая цифра выводится?" - просто в цепочку последовательно соединенных 74YC595 - проталкивается число времени, например, 234002 - (23:40:02). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 10 мая, 2012 Опубликовано 10 мая, 2012 (изменено) · Жалоба Понятно. Фактически классическая статическая индикация :) . Тогда да, придётся разбираться с регистрами :( . Изменено 10 мая, 2012 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 10 мая, 2012 Опубликовано 10 мая, 2012 · Жалоба Можно начать экономить отказавшись от секунд. Баловоство это. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lol483 0 11 мая, 2012 Опубликовано 11 мая, 2012 · Жалоба Можно начать экономить отказавшись от секунд. Баловоство это. Тоже правда. А кто нибудь знает различия во внешнем виде между динамической и статической индикацией газоразрядных индикаторов. И есть ли они ? По идее их использовали со статической индикацией. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 11 мая, 2012 Опубликовано 11 мая, 2012 · Жалоба Не знаю. Когда-то давно, когда я ещё был маленьким, и на эти вещи смотрел исключительно как на красивые игрушки, мне в руки попал некий блок индикации на каких-то лампах. Одна лампа-одна цифра. Там было порядка 20 таких ламп. И куча каких-то микросхем (сколько именно, не помню). Но, как мне теперь кажется, это была статическая индикация (по воспоминаниям, исходя из равного (или примерно равного) кол-ва микросхем и ламп). Вообще, для динамической индикации цифры надо всё время включать-выключать (как минимум раз 20-25 в секунду). Газовые лампы, по-моему, очень инерционная штука для подобных вещей. А зачем именно газовые лампы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GDI 0 11 мая, 2012 Опубликовано 11 мая, 2012 · Жалоба Вообще, для динамической индикации цифры надо всё время включать-выключать (как минимум раз 20-25 в секунду). Газовые лампы, по-моему, очень инерционная штука для подобных вещей. Так это же очень хорошо, что инерционные, Вы уже питаете следующую лампу, а предыдущая все еще светится. Мне кажется, что раньше не применяли динамическую индикацию исключительно из соображений сложности реализации на простой логике. Сейчас же в век дешевых микроконтроллеров нет причин не использовать. А зачем именно газовые лампы? Это нынче модный тренд. Из разряда "теплый ламповый звук", Steam Punk и т.д. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sKWO 0 11 мая, 2012 Опубликовано 11 мая, 2012 · Жалоба Вообще, для динамической индикации цифры надо всё время включать-выключать (как минимум раз 20-25 в секунду). Газовые лампы, по-моему, очень инерционная штука для подобных вещей. нету времени, посмотрите здесь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lol483 0 12 мая, 2012 Опубликовано 12 мая, 2012 (изменено) · Жалоба Всё, я разобрался! Оказалось что я не правильно работал с регистром последовательного сдвига, а именно он смещал всё на бит в сторону. Вот поправил функцию и всё поехало как надо: 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++)". Изменено 12 мая, 2012 пользователем lol483 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GDI 0 12 мая, 2012 Опубликовано 12 мая, 2012 · Жалоба Ничего себе заявочки! регистр последовательного сдвига неправильно работал, Вы бы еще написали что нашли "баг в компиляторе". Как Вы думаете, сколько раз будет выполнен код for(i=0; i<7; i++) и какой будет подставлен последний индекс в Вашу конструкцию по выводу бита в порт? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lol483 0 12 мая, 2012 Опубликовано 12 мая, 2012 · Жалоба Ничего себе заявочки! , Вы бы еще написали что нашли "баг в компиляторе". Как Вы думаете, сколько раз будет выполнен код for(i=0; i<7; i++) и какой будет подставлен последний индекс в Вашу конструкцию по выводу бита в порт? По идее всего 6 раз и как раз последний бит не дописывался. Так ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 12 мая, 2012 Опубликовано 12 мая, 2012 · Жалоба По идее всего 6 раз и как раз последний бит не дописывался. Так ? Нет не так. 7 раз. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lol483 0 12 мая, 2012 Опубликовано 12 мая, 2012 · Жалоба Нет не так. 7 раз. Да, точно 7, всего то их восемь, вот последний то и не дописывался. Но сейчас всё отлично. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 12 мая, 2012 Опубликовано 12 мая, 2012 · Жалоба Ещё сомнительная конструкция: 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; .... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться