Страница 1 из 2

Индикация LED через сдвиговые регистры

Добавлено: Пт мар 26, 2010 12:18:32
slesar
Интересует информация о принципе работы микросхем логики для 7-сегментных индикаторов, что как, примерчик исполнения. Т.е. как по 2-3 проводам с контроллера упавлять цифрой. Также совет-наставление какую микросхемку применить.

Re: Снова индикация

Добавлено: Пт мар 26, 2010 12:25:15
Arlleex
применить можно регистры сдвига и управлять по 3 проводам.
Зайди на сайт ДиХалт-а, там есть статейка, как подключить индикаторы по 1 проводу.

Re: Снова индикация

Добавлено: Сб мар 27, 2010 00:59:38
MTF
Есть такая микруха 74LS164 для управления 7 сегментного индикатора по 2 проводам !!!!!!

Re: Снова индикация

Добавлено: Вс мар 28, 2010 11:56:41
neon-f
сто раз писано и разжевано, но все же.

само удобно выводить с помощью 74нс595 или 4094 регистров. я бы рекомендовал STPIC6C595MTR, это 595 регистр с мощным высоковольтным выходом, стоит всего 0,7уе, и можно прямо к нему цеплять индикаторы любого типа, без всяких транзисторных ключей. Одним словом красота, контроллер-STPIC6C595MTR-индикатор.

Re: Снова индикация

Добавлено: Вс мар 28, 2010 13:04:47
kalobyte

Re: Снова индикация

Добавлено: Вс мар 28, 2010 17:02:53
GP1
Отмечусь в теме и я.
Вопрос какой максимальный ток через выводы Vcc/GND для 74hc595? Отвечаю - +-70мА, или 10мА/сегмент это максимум при статике, при динамической индикации - соответсвенно
А теперь смотрим 74ALS164 Io (т.е. через вывод GND) - -112мА что на 60% больше.
Отсюда вывод: для индикаторов с ОА 74ALS164 предподчительнее.

Re: Снова индикация

Добавлено: Вс мар 28, 2010 20:29:56
Aheir
Автору - переименовать тему, срок - сутки.

Re: Индикация LED через сдвиговые регистры

Добавлено: Ср мар 31, 2010 10:12:35
pcb432
Почему-то радио любители практически не используют (встречал несколько попыток) м/с драйверы 7-сегментных LED индикаторов (самых разных цветов и разрядов), применяемых в DVD плеерах, видеомагнитофонах и другой аппаратуре. Умногих DVD плеера валяются неисправные из-за нецелесообразности ремонта и их отдают на запчасти даром или по символической цене.
Эти драйвера насколько я понял несколько упрощённые и значительно более дешёвые аналоги MAX7219, MAX7221. Например AP6928, AS1628B,CS1664EQ,PT6961,PT6964 и т.п..
Управляются они по SPI интерфейсу. Это всего 3 провода и широкие возможности вывода цифровой и некоторой текстовой информации в разнообразных режимах, регулировка яркости.
Допускается каскадное (также как и при использовании регистров 74HC595) соединение драйверов для увеличения разрядности индикаторов. Можно подключить и клавиатуру с достаточным колличеством кнопок.
На плате с индикатором уже припаяна мс драйвера, кнопки и фотоприемник, распаян разъём или кабель да ещё с маркировкой контактов. Т.е. это готовая к применению конструкция и не надо тратить время на изготовление платы для отладки и проверки своих программ.
Есть и вакумно-люминисцентные индикаторы разных размеров с большим колличеством сегментов и самых разных цветов.
В этом случае микроконтроллер освобождается от рутиной и занимающей довольно много памяти функции вывода информации.

Re: Индикация LED через сдвиговые регистры

Добавлено: Ср мар 31, 2010 11:20:13
MisterDi
Вариант интересен только в случае, когда есть стабильный источник требуемых ИС. Изучать каждый раз по-новой систему комманд контроллера и протокол работы - не у всех и не всегда есть возможность.

Re: Индикация LED через сдвиговые регистры

Добавлено: Пт апр 02, 2010 08:21:13
pcb432
В том то и дело, что благодаря нашим братьям теперь не меньшим, источник практически не ограничен. В разных изделиях используются практически однотипные драйвера с однотипной системой команд + яркие бесплатные индикаторы в комплекте.
В ремонтных мастерских этих плат скапливается уже в достаточном колличестве и всё это идёт на выброс.

Re: Индикация LED через сдвиговые регистры

Добавлено: Вс май 02, 2010 19:46:25
andrewtitoff
2 pcb432
Угу, только не всегда они подписаны, а даташит например на AP6928 ненайти... =(((

Re: Индикация LED через сдвиговые регистры

Добавлено: Чт май 06, 2010 10:13:44
andrewtitoff
Млин, чегото никак не могу разобраться как подключить AP6928 к LPT... =(((
Прочитал статейку http://kazus.ru/articles/345.html , посмотрел схему DVD от которого эта плата(схему прилагаю), но ничего не получается..., сравнив схемы я так понял что вся обвязка на плате уже есть, соединил DI/O, CS, CLC с LPT, 5в взял от USB, землю на всякий случай соединил LPT и USB ну и естенственно с платой, в итоге напряжения приходят, т.к. подключал паралельно LPT-тестеру - видно что что то ппосылается, покрайне мере при отправке светодиод на тестере один раз мигает, но дисплей молчит... =((((

Re: Индикация LED через сдвиговые регистры

Добавлено: Ср май 15, 2013 09:18:08
pcb432
В статье описаны драйверы LED фирмы MAXIM. У них в отличии от драйвера типа AP6928, TM1628 и т.п. команды разные и отправляются начиная со старшего бита. Более точная информация в даташитах.

Re: Индикация LED через сдвиговые регистры

Добавлено: Пт май 17, 2013 07:39:47
Johnson
Что-ж, отмечусь и я...

Последнее время производим 7-сегментные инликаторы на регистре TPIC6B595, стоимость микросхемы 19руб, ток выхода более 500мА.

Пример схемы сегмента: Изображение

Произведено более 1000 экземпляров, нареканий пока не было.

Распиновка разъема:
1 - Сигнал PWM (управлению яркостью). Не стоит забывать, что при единице выходы переходят в высокоимпедансное состояние.
2 - Вход данных (DATA) (Либо выход на втором разъеме).
6 - Вход стробирования (CLK).
10 - Вход защелки (Latch, #LE).
3,5,7,9 - Общий.

В целом протокол представляет из себя однонаправленную шину SPI, следовательно, можно использовать аппаратный SPI контроллера.

Из меги (IDE - CodeVisionAVR) управляется так:

Код: Выделить всё

unsigned char dig_font[16] = {
    0b11111100, // 0
    0b01100000, // 1
    0b11011010, // 2
    0b11110010, // 3
    0b01100110, // 4
    0b10110110, // 5     
    0b10111110, // 6
    0b11100000, // 7
    0b11111110, // 8
    0b11110110, // 9
    0b00000010, // Minus (10)
    0b00000001, // Pset (11)
    0b00000000, // None (12)
    0b10011110, // E (13)
    0b00001010, // r (14)
    0b00010000, // _ (downshift) (15)
};

// Font defines
#define FONT_MINUS 10
#define FONT_PSET 11
#define FONT_NONE 12
#define FONT_E 13
#define FONT_r 14
#define DONT_DOWNSHIFT 15
//LED display
#define HC595_PORT      PORTD
#define HC595_DATA_PIN  7
#define HC595_SCK_PIN   6
#define HC595_RCK_PIN   5
#define HC595_PWM_PIN   4

unsigned char led_bufer[LED_BUFFER_LEN];
unsigned char led_last_position = 0;

void clearBuffer(){
    unsigned char i;
    for(i=0;i<LED_BUFFER_LEN;i++){
        led_bufer[i] = 0x00;
    }
}

void HC595_shiftDigits(unsigned char length){
    unsigned char i;
    // Поиграем клоками, чтобы сдвинуть данные. В освободившемся месте - 0x00.
    BIT_CLR(HC595_PORT,HC595_DATA_PIN);
    #asm("nop");
    for (i=0;i==length*8-1;i++){
        BIT_CLR(HC595_PORT,HC595_SCK_PIN);
        #asm("nop");
        BIT_SET(HC595_PORT,HC595_SCK_PIN);
        #asm("nop");
    }
}

void HC595_putBuffer(){
    unsigned char x,i;
    // Выводим очередной буффер.
    for(i=0;i<LED_BUFFER_LEN;i++){
        x=1;
        while (x){
            BIT_CLR(HC595_PORT,HC595_DATA_PIN);
            #asm("nop");
            if(led_bufer[i]&x)
                BIT_SET(HC595_PORT,HC595_DATA_PIN);
                                               
            #asm("nop");
            BIT_CLR(HC595_PORT,HC595_SCK_PIN);
            #asm("nop");
            BIT_SET(HC595_PORT,HC595_SCK_PIN);
            #asm("nop");
            x<<=1;
        }
        led_last_position++;
    }
}

void HC595_Latch(){
    BIT_CLR(HC595_PORT,HC595_RCK_PIN);
    #asm("nop");
    BIT_SET(HC595_PORT,HC595_RCK_PIN);
    #asm("nop");
    led_last_position = 0;
}

void putDigitIntoBuffer(unsigned char position,unsigned char number){
    led_bufer[position] = dig_font[number];
}
void putNumberIntoBuffer(unsigned char offset, signed int number, unsigned char length, unsigned char removeZeros){
    unsigned char pos=offset, dig, isMinus=number<0, isMinusShowed = 0;
    number = abs(number);
    while (pos<offset+length){
        dig = number%10;
        if((removeZeros>0)&(dig==0)&(number<10)){
            if((isMinus>0)&(isMinusShowed==0)){
                dig = FONT_MINUS;
                isMinusShowed = 1;
            }else{
                dig = FONT_NONE;
            }
        }
        number /= 10;   
        putDigitIntoBuffer(pos, dig);
        pos++;
    }
}


Исходники старые, код малость бредовый, зато суть показывает хорошо. Новых исходников не дам из-за NDA.
NOPы можно поудалять, без них нормально работает.

Резисторы R1..R3 имеет смысл ставить на каждую 4ю плату, начиная с первой. Нужны они для подавления помех, улавливаемых шлейфом.

Если нужна печатка в протеусе или готовый гербер на высоту цифры 150мм - могу предоставить при условии неразглашения и для некоммерческого использования - в аську 305224880, в рабочее время (в другое антиспам не пустит).

PS: Максимальная цепочка, которую испытывали - 48 цифр. Рядом с работающими силовыми установками в композитном корпусе проблем не было.

Re: Индикация LED через сдвиговые регистры

Добавлено: Пт май 17, 2013 08:14:10
akl
Полярность светодиодов на схеме правильно показана?
Johnson писал(а):мега лучше коммутирует порты на общий провод, чем на плюсовой, ей так проще.
Выходной драйвер у AVR'ок уже давно симметричный. Не вводите в заблуждение.
Each output buffer has symmetrical drive characteristics with both high sink and source capability.

Re: Индикация LED через сдвиговые регистры

Добавлено: Пт май 17, 2013 09:50:23
Johnson
Полярность светодиодов на схеме правильно показана?


Да, конечно. По этой схеме налажено производство. Драйверы в TPIC коммутируют на общий (инвертированные).

Про симметричность меги не знал, спасибо, изучу.

Добавлено: Ой, схема не та... Разумеется, полярность неправильная.

Re: Индикация LED через сдвиговые регистры

Добавлено: Пт май 17, 2013 09:56:14
akl
Johnson писал(а):Драйверы в TPIC коммутируют на общий (инвертированные).
Да, и подключают аноды к общему проводу, в то время как катоды подключены к +Vin. Не убедили.

Re: Индикация LED через сдвиговые регистры

Добавлено: Пт май 17, 2013 10:11:23
Johnson
Выше подправил пост. Да, схему не ту отправил. Разумеется, Вы правы, полярность перепутана.
Хороший повод перетряхнуть всю документацию на наличие таких вот промежуточных ляпов...

Исправил ошибку в посте.

Re: Индикация LED через сдвиговые регистры

Добавлено: Вт май 21, 2013 15:44:52
Alexeyslav
на e-bay некогда были популярны 8-ми и 16-битные регистры специально для светодиодов - питание 3.3В, выход - источник входящего тока, его величина управляется для всех выводов одним резистором - от 0 до 80ма на вывод! Распиновка довольно удобная - все сигналы управления и питание с одной стороны микросхемы, а выходы в другой. сейчас чего-то их давно не видать...

Re: Индикация LED через сдвиговые регистры

Добавлено: Вт янв 07, 2014 14:04:02
NCy
Я ставил 595 регистры и цеплял их на SPI микроконтроллера - данные выдаются по стандартному протоколу SPI, не надо городить библиотеки. Реализовано на 3DLed cube, так что скорости хватает.