реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Помогите разобраться с кодом для 74HC595
lol483
сообщение May 10 2012, 12:06
Сообщение #31


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 8-05-12
Пользователь №: 71 734



Цитата(hd44780 @ May 10 2012, 14:38) *
Про 2 порта я не понял sad.gif . 4 ноги - код цифры, а остальное куда?
И как у тебя задаётся в какой разряд индикации какая цифра выводится? Прости, я с газоразрядными дисплеями не работал, только о светодиодными.

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

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

у газоразрядного индикатора в общем случае 11 ног (общий анод и катоды-цифры от 0 до 9), если всего будет 6 ламп (часы, минуты, секунды) то через что бы управлять всеми шестью через К155ИД1 нужно будет задействовать 4*6 ног. (Кстати я ошибся написав что два порта, на самом деле целых три, только сейчас понял). По любому надо будет разбираться с 74HC595, так как их можно соединить последовательно, очень сэкономив ноги МК. "И как у тебя задаётся в какой разряд индикации какая цифра выводится?" - просто в цепочку последовательно соединенных 74YC595 - проталкивается число времени, например, 234002 - (23:40:02).
Go to the top of the page
 
+Quote Post
hd44780
сообщение May 10 2012, 13:47
Сообщение #32


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Понятно. Фактически классическая статическая индикация sm.gif .
Тогда да, придётся разбираться с регистрами sad.gif .

Сообщение отредактировал hd44780 - May 10 2012, 13:48


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение May 10 2012, 17:59
Сообщение #33


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



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


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
lol483
сообщение May 11 2012, 07:12
Сообщение #34


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 8-05-12
Пользователь №: 71 734



Цитата(ILYAUL @ May 10 2012, 20:59) *
Можно начать экономить отказавшись от секунд. Баловоство это.

Тоже правда.

А кто нибудь знает различия во внешнем виде между динамической и статической индикацией газоразрядных индикаторов. И есть ли они ? По идее их использовали со статической индикацией.
Go to the top of the page
 
+Quote Post
hd44780
сообщение May 11 2012, 08:41
Сообщение #35


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



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

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

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


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
GDI
сообщение May 11 2012, 08:55
Сообщение #36


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата(hd44780 @ May 11 2012, 12:41) *
Вообще, для динамической индикации цифры надо всё время включать-выключать (как минимум раз 20-25 в секунду). Газовые лампы, по-моему, очень инерционная штука для подобных вещей.

Так это же очень хорошо, что инерционные, Вы уже питаете следующую лампу, а предыдущая все еще светится. Мне кажется, что раньше не применяли динамическую индикацию исключительно из соображений сложности реализации на простой логике. Сейчас же в век дешевых микроконтроллеров нет причин не использовать.
Цитата(hd44780 @ May 11 2012, 12:41) *
А зачем именно газовые лампы?

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


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
sKWO
сообщение May 11 2012, 08:57
Сообщение #37


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



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

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


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
lol483
сообщение May 12 2012, 12:01
Сообщение #38


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 8-05-12
Пользователь №: 71 734



Всё, я разобрался! Оказалось что я не правильно работал с регистром последовательного сдвига, а именно он смещал всё на бит в сторону. Вот поправил функцию и всё поехало как надо:
Код
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 - May 12 2012, 13:22
Go to the top of the page
 
+Quote Post
GDI
сообщение May 12 2012, 12:49
Сообщение #39


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



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


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
lol483
сообщение May 12 2012, 13:23
Сообщение #40


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 8-05-12
Пользователь №: 71 734



Цитата(GDI @ May 12 2012, 15:49) *
Ничего себе заявочки! , Вы бы еще написали что нашли "баг в компиляторе". Как Вы думаете, сколько раз будет выполнен код
Код
for(i=0; i<7; i++)
и какой будет подставлен последний индекс в Вашу конструкцию по выводу бита в порт?

По идее всего 6 раз и как раз последний бит не дописывался. Так ?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 12 2012, 13:28
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(lol483 @ May 12 2012, 16:23) *
По идее всего 6 раз и как раз последний бит не дописывался. Так ?

Нет не так. 7 раз.
Go to the top of the page
 
+Quote Post
lol483
сообщение May 12 2012, 15:18
Сообщение #42


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 8-05-12
Пользователь №: 71 734



Цитата(_Артём_ @ May 12 2012, 16:28) *
Нет не так. 7 раз.

Да, точно 7, всего то их восемь, вот последний то и не дописывался. Но сейчас всё отлично.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 12 2012, 15:28
Сообщение #43


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Ещё сомнительная конструкция:
Код
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;
....
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 03:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.03328 секунд с 7
ELECTRONIX ©2004-2016