LCD индикаторы на драйвере ML1001

Visits: 1837


 ML1001 – статический LCD GOG (чип в стекле) драйвер для 40-сегментного LCD в позолоченном противоударном исполнении. На них можно каскадно строить цельные из 80 или 120 сегментов LCD индикаторы.

Описание драйвера 

Значок

LCD индикаторы на драйвере ML1001 - русское описание 548.43 KB 557 downloads

LCD индикаторы на драйвере ML1001 - русское описание ...
Значок

LCD индикаторы на драйвере ML1001 - описание en 410.88 KB 433 downloads

LCD индикаторы на драйвере ML1001 - описание en ...

RDN0007 индикатор построен на драйвере ML1001

cat_RDN0007_01

он представляет собой восмиразрядный семисегментный индикатор, с дополнительными индикаторами. Маркировка сегментом имеет следующий вид (хотя я в в нем ничего не понял)

cat_RDN0007_02

 Описание индикатора

Значок

LCD индикаторы на драйвере ML1001 - индикатор RDN0007 1.64 MB 557 downloads

LCD индикаторы на драйвере ML1001 - индикатор RDN0007 ...

F теперь самое интересное, подключение индикатора и формирование индикации. Все примеры будут приведены для микроконтроллеров семейства PIC16, жертва PIC16F690 – это микроконтроллер (как по мне) второго поколения из этой серии (третье это там где 4 цифры после буквы F, например, PIC16F1936) .

Подключение индикатора:

cat_RDN0007_03 Это вариант с подключением индикатора для использования модуля SPI для передачи данных. Можно конечно использовать и программный вариант SPI, но это только трата времени и памяти если есть микроконтроллер со встроенным модулем.

В схеме подключения индикатора ничего заумного нет, можно питать и от 3 и от 5 вольт, выводы LOAD и CHK надо замкнуть, всё.

На схеме сразу же показан разъем для внутрисхемного программирования микроконтроллера, а также 4 кнопки для ввода информации. Для питания применен стабилизатор из серии LD1117 с выходным напряжение 5 вольт.

Написание программы:

Конфигурация микроконтроллера

#include <xc.h>
#pragma config WDTE =   ON      // WDT enabled
#pragma config PWRTE =  ON      // PWRT enabled
#pragma config CP =     ON      // Program memory code protection is enabled
#pragma config BOREN =  ON      // BOR enabled
#pragma config FCMEN =  OFF     // Fail-Safe Clock Monitor is disabled
#pragma config MCLRE =  ON      // MCLR pin function is MCLR
#pragma config CPD =    ON      // Data memory code protection is enabled
#pragma config IESO =   OFF     // Internal External Switchover mode is disabled
#pragma config FOSC =   INTRCIO // INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN

Инициализация микроконтроллера

CLRWDT();                   // сброс сторожевого таймера
    OSCCON=0b01110000;           // 8MHz
    
    ANSEL = 0;                  // 0 = Digital I/O. Pin is assigned to port or special function.
    ANSELH = 0;                 // 
    
    PORTA = 0;                  //
    TRISA = 0b00110100;         // вход RA2/RA4/RA5
    WPUA  = 0b00110100;         // включить подтягивающие резисторы на RA2/RA4/RA5
    IOCA  = 0b00110100;         // Interrupt-on-change enabled  RA2/RA4/RA5
    
    PORTB = 0;                  // 
    TRISB = 0b00110000;         // RB5 вход USART, RB4 - копка 4
    WPUB =  0b00010000;         // включить подтягивающие резисторы RB4 
    IOCB =  0b00010000;         // Interrupt-on-change enabled RB4
    
    PORTC = 0;                  // 
    TRISC = 0;                  // 
    
    OPTION_REG = 0b00001111;    //
/*                 |   |+++---- PS<2:0>:111-1 : 128
 *                 |   +------- PSA:1 = Prescaler is assigned to the WDT
 *                 +----------- RABPU:0 = Pull-ups on PORTA/PORTB are disabled by individual WPUAx control bits
 */    
    
// настройка SSP модуля в режиме SPI
    SSPCON=0b00110010;
/*             ||++++---- SSPM<3:0>:0010 = SPI Master mode, clock = FOSC/64
 *             |+-------- CKP:1 = Idle state for clock is a high level (Microwire default)
 *             +--------- SSPEN:1 = Enables serial port and configures SCK, SDO and SDI as serial port pins
 */ 
// настройка прерываний
    INTCON=0b11001000;
/*           |||||+++---- флаги прерываний          
 *           ||||+------- RABIE:1 = Enables the PORTA/PORTB change interrupt
 *           |||+-------- INTE:0 = Disables the RA2/INT external interrupt
 *           ||+--------- T0IE:0 = Disables the Timer0 interrupt
 *           |+---------- PEIE:1 = Enables all unmasked peripheral interrupts
 *           +----------- GIE:1 = Enables all unmasked interrupts
 */

Функция индикации, преобразование кодов символов для вывода на индикатор.

надо принять следующее, все наши семисегментные символы будет кодироваться следующим образом

например:

//======================================================================================
// символы знакогенератора
// цифры
// Characters signgenerator
// Number
//					  .gfedcba   
#define		c0		0b00111111			// 0-0
#define		c1		0b00000110			// 1-1
#define		c2		0b01011011			// 2-2 "z"
#define		c3		0b01001111			// 3-3
#define		c4		0b01100110			// 4-4 "Ч"
#define		c5		0b01101101			// 5-5 "S"
#define		c6		0b01111101			// 6-6
#define		c7		0b00000111			// 7-7
#define		c8		0b01111111			// 8-8
#define		c9		0b01101111			// 9-9

#define		c0t		0b10111111			// 0-0
#define		c1t		0b10000110			// 1-1
#define		c2t		0b11011011			// 2-2 "z"
#define		c3t		0b11001111			// 3-3
#define		c4t		0b11100110			// 4-4 "Ч"
#define		c5t		0b11101101			// 5-5 "S"
#define		c6t		0b11111101			// 6-6
#define		c7t		0b10000111			// 7-7
#define		c8t		0b11111111			// 8-8
#define		c9t		0b11101111			// 9-9

//======================================================================================
// символы //Characters
#define		c_		0b00000000			// символ "пробел" 
#define		cM		0b01000000			// символ "-"
#define		c__		0b00001000			// символ "подчеркивание"
#define		c_o		0b01100011			// символ "-o" верний нолик
#define		cn		0b01010100			// "n"
#define		cN		0b00110111			// "П"
#define		co		0b01011100			// "o" 
#define		cE		0b01111001			// "E"
#define		cr		0b01010000			// "r"
#define		cd		0b01011110			// "d"
#define		cb		0b01111100			// "b"
#define		ct		0b01111000			// "t"
#define		cA		0b01110111			// "A"
#define		cC		0b00111001			// "C"
#define		cH		0b01110110			// "H"
#define		cP		0b01110011			// "P"
#define		cc		0b01011000			// "c"
#define		ch		0b01110100			// "h"
#define		cL		0b00111000			// "L"
#define		ci		0b00010000			// "i"
#define		cq		0b01100111			// "q"
#define		cF		0b01110001			// "F"
#define		cU		0b00111110			// "U"
#define		cu		0b00011100			// "u"
#define		cuY		0b01101110			// "У"
#define		cI		0b00110000			// "I"
#define		cG		0b00111101			// "G"
#define		cS		0b01101101			// "S"
#define		cl		0b00011000			// "l"
#define		ca		0b01011111			// "a"
#define		cY		0b01110010			// "Y"
#define		cS		0b01101101			// "Y"
#define		ct3		0b01001001			// symbol "three features"
#define		ct2		0b01001000			// symbol "two features"
#define		ct1		0b00001000			// symbol "one feature"
//======================================================================================

т.е

сегмент a – бит 0
сегмент b – бит 1
сегмент c – бит 2
сегмент d – бит 3
сегмент e – бит 4
сегмент f – бит 5
сегмент g – бит 6
сегмент h – бит 7 (точка)

Символы треугольники под знакоместами будут кодироваться в отдельном байте. аналогичным образом.

Для загрузки в индикатор мы выделим 9 байт
unsigned char ind1,ind2,ind3,ind4,ind5,ind6,ind7,ind8,simv;

при записи в них наших “графических” изображение функция indic (), будет перекодировать и выводить на индикатор чрез SPI модуль микроконтроллера. Сама функция индикации

// индикация 
void indic (void)
{
    BU1=BU2=BU3=BU4=BU5=BU6=BU7=BU8=BU9=0;  // очистка буфера
    // преобразование символов в буфер передачи
    // установка стрелки
    if(simv&0x80) BU1 |= 0b10000000;
    if(simv&0x40) BU3 |= 0b00000001;
    if(simv&0x20) BU4 |= 0b00000010;
    if(simv&0x10) BU5 |= 0b00000100;
    if(simv&0x08) BU6 |= 0b00001000;
    if(simv&0x04) BU7 |= 0b00010000;
    if(simv&0x02) BU8 |= 0b00100000;
    if(simv&0x01) BU9 |= 0b01000000;

    // символ 1
    if(ind1&0x80) BU2 |= 0b00000001;
    if(ind1&0x40) BU1 |= 0b00000100;
    if(ind1&0x20) BU1 |= 0b00001000;
    if(ind1&0x10) BU1 |= 0b00000010;
    if(ind1&0x08) BU1 |= 0b00000001;
    if(ind1&0x04) BU1 |= 0b01000000;
    if(ind1&0x02) BU1 |= 0b00100000;
    if(ind1&0x01) BU1 |= 0b00010000;

    // символ 2
    if(ind2&0x80) BU3 |= 0b00000010;
    if(ind2&0x40) BU2 |= 0b00001000;
    if(ind2&0x20) BU2 |= 0b00010000;
    if(ind2&0x10) BU2 |= 0b00000100;
    if(ind2&0x08) BU2 |= 0b00000010;
    if(ind2&0x04) BU2 |= 0b10000000;
    if(ind2&0x02) BU2 |= 0b01000000;
    if(ind2&0x01) BU2 |= 0b00100000;

    // символ 3
    if(ind3&0x80) BU4 |= 0b00000100;
    if(ind3&0x40) BU3 |= 0b00010000;
    if(ind3&0x20) BU3 |= 0b00100000;
    if(ind3&0x10) BU3 |= 0b00001000;
    if(ind3&0x08) BU3 |= 0b00000100;
    if(ind3&0x04) BU4 |= 0b00000001;
    if(ind3&0x02) BU3 |= 0b10000000;
    if(ind3&0x01) BU3 |= 0b01000000;

    // символ 4
    if(ind4&0x80) BU5 |= 0b00001000;
    if(ind4&0x40) BU4 |= 0b00100000;
    if(ind4&0x20) BU4 |= 0b01000000;
    if(ind4&0x10) BU4 |= 0b00010000;
    if(ind4&0x08) BU4 |= 0b00001000;
    if(ind4&0x04) BU5 |= 0b00000010;
    if(ind4&0x02) BU5 |= 0b00000001;
    if(ind4&0x01) BU4 |= 0b10000000;

    // символ 5
    if(ind5&0x80) BU6 |= 0b00010000;
    if(ind5&0x40) BU5 |= 0b01000000;
    if(ind5&0x20) BU5 |= 0b10000000;
    if(ind5&0x10) BU5 |= 0b00100000;
    if(ind5&0x08) BU5 |= 0b00010000;
    if(ind5&0x04) BU6 |= 0b00000100;
    if(ind5&0x02) BU6 |= 0b00000010;
    if(ind5&0x01) BU6 |= 0b00000001;

    // символ 6
    if(ind6&0x80) BU7 |= 0b00100000;
    if(ind6&0x40) BU6 |= 0b10000000;
    if(ind6&0x20) BU7 |= 0b00000001;
    if(ind6&0x10) BU6 |= 0b01000000;
    if(ind6&0x08) BU6 |= 0b00100000;
    if(ind6&0x04) BU7 |= 0b00001000;
    if(ind6&0x02) BU7 |= 0b00000100;
    if(ind6&0x01) BU7 |= 0b00000010;

    // символ 7
    if(ind7&0x80) BU8 |= 0b01000000;
    if(ind7&0x40) BU8 |= 0b00000001;
    if(ind7&0x20) BU8 |= 0b00000010;
    if(ind7&0x10) BU7 |= 0b10000000;
    if(ind7&0x08) BU7 |= 0b01000000;
    if(ind7&0x04) BU8 |= 0b00010000;
    if(ind7&0x02) BU8 |= 0b00001000;
    if(ind7&0x01) BU8 |= 0b00000100;

    // символ 8
    if(ind8&0x80) BU9 |= 0b10000000;
    if(ind8&0x40) BU9 |= 0b00000010;
    if(ind8&0x20) BU9 |= 0b00000100;
    if(ind8&0x10) BU9 |= 0b00000001;
    if(ind8&0x08) BU8 |= 0b10000000;
    if(ind8&0x04) BU9 |= 0b00100000;
    if(ind8&0x02) BU9 |= 0b00010000;
    if(ind8&0x01) BU9 |= 0b00001000;

    // передача на индикатор
    DCLK = 0;
    SSPBUF = BU9;
    while(!PIR1bits.SSPIF); 
    PIR1bits.SSPIF=0;
    SSPBUF = BU8;
    while(!PIR1bits.SSPIF); 
    PIR1bits.SSPIF=0;
    SSPBUF = BU7;
    while(!PIR1bits.SSPIF); 
    PIR1bits.SSPIF=0;
    SSPBUF = BU6;
    while(!PIR1bits.SSPIF); 
    PIR1bits.SSPIF=0;
    SSPBUF = BU5;
    while(!PIR1bits.SSPIF); 
    PIR1bits.SSPIF=0;
    SSPBUF = BU4;
    while(!PIR1bits.SSPIF); 
    PIR1bits.SSPIF=0;
    SSPBUF = BU3;
    while(!PIR1bits.SSPIF); 
    PIR1bits.SSPIF=0;
    SSPBUF = BU2;
    while(!PIR1bits.SSPIF); 
    PIR1bits.SSPIF=0;
    SSPBUF = BU1;
    while(!PIR1bits.SSPIF); 
    PIR1bits.SSPIF=0;
    NOP();
    DCLK = 1;
    NOP();
    DCLK = 0;
}

Для работы понадобиться функция преобразования двоичных числе и десятичные, вот пример такой функции:

//Преобразование 16 бит двоичного чила в десятичное со знаком
//chisloin диапазон десятичных чисел -2.147.483.648 до +2.147.483.647
//des расположение десятичной точки

void bin_dec (long chisloin,char des)
{
unsigned char BU1,BU2,BU3,BU4,BU5,BU6,BU7,BU8;

    static bit MINUS;
    long	chislo;             // регистры преобразователя
//инциализация переменных
    chislo=chisloin;            // преобразование
    MINUS=0;
//обработка отрицательных чисел
    if(chislo <0)
    {
        chislo=-chislo;
        MINUS=1;
    }
    
    BU1=chislo%100000000/10000000;
    BU2=chislo%10000000/1000000;
    BU3=chislo%1000000/100000;
    BU4=chislo%100000/10000;
    BU5=chislo%10000/1000;
    BU6=chislo%1000/100;
    BU7=chislo%100/10;
    BU8=chislo%10;

//очистка незначащих нулей
    if (BU1==0)
    {
        BU1=10;
        if (BU2==0)
        {
            BU2=10;
            if (BU3==0)
            {
                BU3=10;
                if (BU4==0)
                {
                    BU4=10;
                    if (BU5==0)
                    {
                        BU5=10;
                        if (BU6==0)
                        {
                            BU6=10;
                            if (BU7==0)
                            {
                                BU7=10;
                            }
                        }
                    }
                }
            }
        }
    }
// установка символа минус
    if(MINUS==1)
    {
        if(BU7==10)
        {
            BU7=11;
        }
        else if(BU6==10)
        {
            BU6=11;
        }
        else if(BU5==10)
        {
            BU5=11;
        }
        else if(BU4==10)
        {
            BU4=11;
        }
        else if(BU3==10)
        {
            BU3=11;
        }
        else if(BU2==10)
        {
            BU2=11;
        }
        else if(BU1==10)
        {
            BU1=11;
        }
    }
//преобразование чисел в символы индикатора
    if(des==8)ind8=decodt[BU8];
    else ind8=decod[BU8];
    if(des==7)ind7=decodt[BU7];
    else ind7=decod[BU7];
    if(des==6)ind6=decodt[BU6];
    else ind6=decod[BU6];
    if(des==5)ind5=decodt[BU5];
    else ind5=decod[BU5];
    if(des==4)ind4=decodt[BU4];
    else ind4=decod[BU4];
    if(des==3)ind3=decodt[BU3];
    else ind3=decod[BU3];
    if(des==2)ind2=decodt[BU2];
    else ind2=decod[BU2];
    if(des==1)ind1=decodt[BU1];
    else ind1=decod[BU1];
}//---------------------------------------------------------------------------------------

Проект для разработки устройств

Значок

LCD индикаторы на драйвере ML1001 - проект на PIC16F690 373.78 KB 714 downloads

LCD индикаторы на драйвере ML1001 - проект на PIC16F690 ...

Схема в формате PDF

Значок

LCD индикаторы на драйвере ML1001 - проект на PIC16F690 - схема 40.12 KB 486 downloads

LCD индикаторы на драйвере ML1001 - проект на PIC16F690...


Это может быть интересно


  • Проект с использованием MCC часть 09Проект с использованием MCC часть 09
    Visits: 853   Эта часть будет посвящена созданию практического проекта управления освещение. Тех задание: Два выхода управления ШИМ – светодиодным освещением. Две кнопки управления, каждая кнопка управляет, своим каналом, логика самая …
  • ESP32-первое знакомствоESP32-первое знакомство
    Visits: 6258 Музыкальная тема к статье, слушаем: Настало время познакомиться c ESP32 и для меня, для этого я приобрел в ГАММЕ отладочную плату с модулем ESP-WROOM-32 (ESP32-DevKitC). Первая задача, как …
  • Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.04Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.04
    Visits: 157 Смотри как установить и подключить библиотеку тут.   V.  – 23_04 – Component Database Update. – configuration file name – DXPPreferences1.DXPPrf. – Added two projects for audio amplifier …
  • Проект с использованием MCC часть 14Проект с использованием MCC часть 14
    Visits: 782 С выводом данных на дисплей мы справились (но могу сразу сказать библиотеку графики к этой статьи пришлось доработать, поэтому в этом проекте она обновлена). У нас на текущем …
  • Мультизоновый индикатор-терморегулятор ch-c3010Мультизоновый индикатор-терморегулятор ch-c3010
    Visits: 1139 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре,  температуру на улице, а в погребе (или на балконе) …
  • Проект с использованием MCC часть 03Проект с использованием MCC часть 03
    Visits: 1533 Первым делом перенастроим регистры конфигурации, следующим образом: Отключим выход генератора (CLKOUT function is disabled. I/O function on the CLKOUT pin) Включим сторожевой таймер (WDT enabled) После этой настройки …
  • Униполярный шаговый двигательУниполярный шаговый двигатель
    Visits: 2125     В приводах различных устройств часто применяются шаговые двигатели, Шаговый двигатели различают двух типов униполярные – когда обмотки коммутируются током текущим только в одну сторону, например при …
  • CCP модуль для декодирования ИК-кодов пультов ДУCCP модуль для декодирования ИК-кодов пультов ДУ
    Visits: 1021 Множество изготовителей для своих пультов дистанционного управления на ИК лучах используют принцип широтно-импульсной модуляции. В таких кодах бит единицы представляется импульсом большой длительности, а ноль импульсом короткой длительности. …
  • Проект с использованием MCC часть 11Проект с использованием MCC часть 11
    Visits: 800 Можно несколько облагородить программу вынести наши процедуры обработки нажатия кнопок в отдельные функции. Но вы должны понимать, что это хоть и не значительно, но будет тормозить общую скорость …
  • Самый простой индикатор уровня звукового сигналаСамый простой индикатор уровня звукового сигнала
    Visits: 6189 Демонстрационный проект создания индикаторов уровня с использованием WS2812B. Изучив этот проект вы сможете  самостоятельно изготавливать и конструировать свои индикаторы уровня звукового сигнала. Дополнительно читайте статью Бегущие огни на …



Поделись этим!

Catcatcat

catcatcat

Development of embedded systems based on Microchip microcontrollers.

Продолжайте читать

НазадДалее