Views: 1901
ML1001 – статический LCD GOG (чип в стекле) драйвер для 40-сегментного LCD в позолоченном противоударном исполнении. На них можно каскадно строить цельные из 80 или 120 сегментов LCD индикаторы.
Описание драйвера
LCD индикаторы на драйвере ML1001 - русское описание 548.43 KB 583 downloads
LCD индикаторы на драйвере ML1001 - русское описание ...LCD индикаторы на драйвере ML1001 - описание en 410.88 KB 443 downloads
LCD индикаторы на драйвере ML1001 - описание en ...RDN0007 индикатор построен на драйвере ML1001
он представляет собой восмиразрядный семисегментный индикатор, с дополнительными индикаторами. Маркировка сегментом имеет следующий вид (хотя я в в нем ничего не понял)
Описание индикатора
LCD индикаторы на драйвере ML1001 - индикатор RDN0007 1.64 MB 572 downloads
LCD индикаторы на драйвере ML1001 - индикатор RDN0007 ...F теперь самое интересное, подключение индикатора и формирование индикации. Все примеры будут приведены для микроконтроллеров семейства PIC16, жертва PIC16F690 – это микроконтроллер (как по мне) второго поколения из этой серии (третье это там где 4 цифры после буквы F, например, PIC16F1936) .
Подключение индикатора:
Это вариант с подключением индикатора для использования модуля 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 747 downloads
LCD индикаторы на драйвере ML1001 - проект на PIC16F690 ...Схема в формате PDF
LCD индикаторы на драйвере ML1001 - проект на PIC16F690 - схема 40.12 KB 503 downloads
LCD индикаторы на драйвере ML1001 - проект на PIC16F690...Это может быть интересно
- Контроллер управления светодиодным освещением с дистанционным управлениемViews: 1870 Все активнее светодиоды входят в нашу жизнь. Всё эффективнее становится светодиодное освещение. Всё ниже опускаются цены. Всё больше появляется возможностей получения сочных цветов, простоты в управлении. Всё чаще …
- Temperature measurement with NTC thermistor.Views: 349 Проекты в которых присутствовало измерение температуры начинал с цифровых датчиков, т.к. в них все просто и не надо ничего преобразовывать и вычислять. При использовании цифровых датчиков ты получаешь …
- Простой цифровой регулятор мощностиViews: 6882 Простой регулятор мощности с цифровой индикацией. Этот проект создан как обучающий, для ознакомления с основами построения сетевых регуляторов мощности. Устройства подобного типа можно использовать для управления освещением, скоростью …
- Altium Designer my setup system and project structureViews: 796 Используйте только последнее обновление!!! Updates https://catcatcat.d-lan.dp.ua/altium-designer-my-libraries-project-templates-system-settings-by-catcatcat-v23-09/ Тут хочу поделиться как я настраиваю Altium Designer и как я использую файлы DXPPreferences.DXPPrf для быстрой конфигурации и получения …
- Просто о структурах и объединениях в СиViews: 2170 Какие задачи нам позволяют решать структуры и объединения? Для разработчика встроенных систем эффективность и компактность кода всегда на первом месте. Если программировании на Ассемблере ты сам определяешь как …
- ch-4050 – дифференциальный терморегуляторViews: 1868 ch-4050 – это не новая модель, это расширенная версия универсального терморегулятора ch-4000. Различия коснулись в появлении новой функции дифференциального регулирования. Это вид регулирования по разности температур измеренного двумя …
- Униполярный шаговый двигатель – часть 2Views: 810 В этой части только итог и версия 2.0 универсальной, которая позволяет управлять шаговым двигателем во всех трех режимах и 3.0 специальной библиотеки только для одного полушагового режима. В …
- Индикатор температурыViews: 2630 Проект для начинающих, на демо плате BB-2T3D-01. Простой индикатор температуры. Проект никак не задумывался, просто на витрину магазин Ворон нужна была демонстрационная модель на макетной плате, чего нибудь работающего. Остановились на индикаторе …
- Счетчики посетителейViews: 1261 Вас сосчитали!? или счетчики посетителей. Для чего нужны счетчики посетителей? Какие они бывают? ТОРГОВЛЯ. Подсчитайте, сколько ваш магазин посещает человек за день. Кок много человек приходит утром, какое …
- Стробоскоп для автомобиляViews: 2163 Одним из популярных решений светового тюнинга автомобиля, мотоцикла или скутера стал эффект – “полицейский стробоскоп“. На база платы ch-c0050 реализовано несколько проектов. В этой статье приводятся две версии …