Views: 1890
ML1001 – статический LCD GOG (чип в стекле) драйвер для 40-сегментного LCD в позолоченном противоударном исполнении. На них можно каскадно строить цельные из 80 или 120 сегментов LCD индикаторы.
Описание драйвера
LCD индикаторы на драйвере ML1001 - русское описание 548.43 KB 580 downloads
LCD индикаторы на драйвере ML1001 - русское описание ...LCD индикаторы на драйвере ML1001 - описание en 410.88 KB 440 downloads
LCD индикаторы на драйвере ML1001 - описание en ...RDN0007 индикатор построен на драйвере ML1001
он представляет собой восмиразрядный семисегментный индикатор, с дополнительными индикаторами. Маркировка сегментом имеет следующий вид (хотя я в в нем ничего не понял)
Описание индикатора
LCD индикаторы на драйвере ML1001 - индикатор RDN0007 1.64 MB 569 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 740 downloads
LCD индикаторы на драйвере ML1001 - проект на PIC16F690 ...Схема в формате PDF
LCD индикаторы на драйвере ML1001 - проект на PIC16F690 - схема 40.12 KB 499 downloads
LCD индикаторы на драйвере ML1001 - проект на PIC16F690...Это может быть интересно
- Интерактивные LedViews: 464 Тема проекта продолжение следует…. Это может быть интересно
- NS108-5050-16bit от NewstarViews: 599 Кто уже использует в своих проектах адресуемые светодиоды хорошо знакомы с такими как WS2812 и им подобные. Эти светодиоды для управления используют однопроводную шину. Из-за этого пропускная способность …
- WiFi ESP8266 ESP-202 (ESP-12F)Views: 7698 Первое знакомство, сначала надо его купить… http://voron.ua/catalog/024404 Схема для подключения и тестирования По схеме ставим две кнопки, сброс и кнопку BT2, для перевода в режим обновления прошивки. Если надо сделать …
- Audio-bluetooth modules F-6188 (BK8000L)Views: 2304Следующий модуль на чипе BK8000L. Заводское обозначение F-6188 также основным производителем не выпускается и отдан на тиражирование. с нижней стороны имеет маркировку В этом варианте мне попалась вроде полноценная …
- Temperature measurement with NTC thermistor.Views: 325 Проекты в которых присутствовало измерение температуры начинал с цифровых датчиков, т.к. в них все просто и не надо ничего преобразовывать и вычислять. При использовании цифровых датчиков ты получаешь …
- Проект с использованием MCC часть 12-2Views: 1049 Настало время для изучения шины I2C. Изучать будем на примере работы с индикатором RET012864E. Что изменили со старой схемы: В прошлой теме я затупил и не добавил подтягивающие резисторы …
- Проект с использованием MCC часть 03Views: 1591 Первым делом перенастроим регистры конфигурации, следующим образом: Отключим выход генератора (CLKOUT function is disabled. I/O function on the CLKOUT pin) Включим сторожевой таймер (WDT enabled) После этой настройки …
- Самый простой диммер для светодиодного освещенияViews: 3035 Светодиоды все больше входят в нашу жизнь как источники освещения и как само собой разумеющееся, это вопрос регулировки яркости. Существует множество схемных решений, но в нашем варианте мы …
- NeoPixel LED and PIC24Views: 646 Популярность однопроводной шины для управления светодиода типа WS2812 не ослабевает, а новые типы светодиодов в корпусах 3,5*3,5мм, 2,0*2,0мм становяться все больше привлекательными. Построение дисплеев для анимации требуют все …
- Регулятор влажности ch-3800Views: 1429 И еще один проект на плате ch-c3xxx – универсальный регулятор влажности ch-3800. Регулятор позволяет работать как в режиме индикатора влажности, так и в режиме регулятора. Рабочий диапазон …