Views: 1877
ML1001 – статический LCD GOG (чип в стекле) драйвер для 40-сегментного LCD в позолоченном противоударном исполнении. На них можно каскадно строить цельные из 80 или 120 сегментов LCD индикаторы.
Описание драйвера
LCD индикаторы на драйвере ML1001 - русское описание 548.43 KB 574 downloads
LCD индикаторы на драйвере ML1001 - русское описание ...LCD индикаторы на драйвере ML1001 - описание en 410.88 KB 439 downloads
LCD индикаторы на драйвере ML1001 - описание en ...RDN0007 индикатор построен на драйвере ML1001
он представляет собой восмиразрядный семисегментный индикатор, с дополнительными индикаторами. Маркировка сегментом имеет следующий вид (хотя я в в нем ничего не понял)
Описание индикатора
LCD индикаторы на драйвере ML1001 - индикатор RDN0007 1.64 MB 567 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 730 downloads
LCD индикаторы на драйвере ML1001 - проект на PIC16F690 ...Схема в формате PDF
LCD индикаторы на драйвере ML1001 - проект на PIC16F690 - схема 40.12 KB 495 downloads
LCD индикаторы на драйвере ML1001 - проект на PIC16F690...Это может быть интересно
- DS18B20 – удаленный контроль температурыViews: 3039 Контроль температуры с использованием датчиков температуры DS18B20 и платы ILLISSI-4B-09-primum Проект позволяет подключать к плате ILLISSI-4B-09-primum до 16 датчиков температуры DS18B20, удаленных более 300 метров, и выводить информацию …
- MAX7219/21 и 8х8 LED дисплеиViews: 926 MAX7219, MAX7221 предназначены для вывода информации на 8 разрядов семисегментного индикатора, но на нем легко организовать вывод на светодиодные индикаторы 8х8. продолжение следует…. Это может быть интересно
- VU Meter Tower ART – part 2Views: 978 Проект – VU Meter Tower ART получил продолжение в своем развитии. Теперь можно заказать набор деталей из акрила для самостоятельной сборки. В проект корпуса внесено целый ряд доработок, …
- My libraries for Altium DesignerViews: 3907 Attention, this version of the database is outdated today. See updates in articles https://catcatcat.d-lan.dp.ua/altium-designer-my-setup-system-and-project-structure and https://catcatcat.d-lan.dp.ua/altium-designer-my-setup-system-and-project-structure-v23-2/ My libraries for Altium designer (Updated V – 29/05/2022) (c) 2021 …
- ch-4060 – регулятор температуры и влажности на датчике DHT11/DHT22/AM2302Views: 2430 На плате ch-4000 очень легко собрать устройство регулятора температуры и влажности. Датчик DHT11 самый недорогой вариант для создания такого устройства, правда точность его не велика, но для бытовых устройств …
- Интерактивные LedViews: 459 Тема проекта продолжение следует…. Это может быть интересно
- Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.04Views: 208 Смотри как установить и подключить библиотеку тут. V. – 23_04 – Component Database Update. – configuration file name – DXPPreferences1.DXPPrf. – Added two projects for audio amplifier …
- Простой цифровой регулятор мощностиViews: 6585 Простой регулятор мощности с цифровой индикацией. Этот проект создан как обучающий, для ознакомления с основами построения сетевых регуляторов мощности. Устройства подобного типа можно использовать для управления освещением, скоростью …
- Обновление ESP8266 c ESPFlashDownloadTool_v3.6.3Views: 3468 Технология обновления следующая: Загружаем программу со страницы espressif.com. Разархивируем. Где находятся файлы, для прошивки? Заходим в каталоги Подключаем по схеме в статье WiFi ESP8266 (замыкаем BT2, перемычка). Запускаем программу, …
- Altium Designer first projectViews: 265 Эта статья подразумевает, что у вас установлен и настроен Altium Designer как описано в статье Altium Designer my setup system and project structure. Обратите внимание! Библиотека постоянно обновляется, …