Views: 2037
ML1001 – статический LCD GOG (чип в стекле) драйвер для 40-сегментного LCD в позолоченном противоударном исполнении. На них можно каскадно строить цельные из 80 или 120 сегментов LCD индикаторы.
Описание драйвера
LCD индикаторы на драйвере ML1001 - русское описание 548.43 KB 588 downloads
LCD индикаторы на драйвере ML1001 - русское описание ...LCD индикаторы на драйвере ML1001 - описание en 410.88 KB 445 downloads
LCD индикаторы на драйвере ML1001 - описание en ...RDN0007 индикатор построен на драйвере ML1001
он представляет собой восмиразрядный семисегментный индикатор, с дополнительными индикаторами. Маркировка сегментом имеет следующий вид (хотя я в в нем ничего не понял)
Описание индикатора
LCD индикаторы на драйвере ML1001 - индикатор RDN0007 1.64 MB 576 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 755 downloads
LCD индикаторы на драйвере ML1001 - проект на PIC16F690 ...Схема в формате PDF
LCD индикаторы на драйвере ML1001 - проект на PIC16F690 - схема 40.12 KB 506 downloads
LCD индикаторы на драйвере ML1001 - проект на PIC16F690...Это может быть интересно
MPLAB® Harmony – или как это просто! Часть 1.Views: 3846 Часть первая – Установка Гармонии. Музыкальная тема к статье, слушаем: В начале запуска нового проекта и выбора микроконтроллера стоит задача правильно его сконфигурировать, прежде чем перейти к реализации …
CLUBBEST – reasoning on the visualization of music.Views: 323 ВІД ЗАХОДУ ДО СВІТАНКУ АБО ПОБАЧИТИ МУЗИКУ. Час доби, коли почуття людини загострюються, – це час від заходу до світанку. В цей час людина відкрита для …
Altium Designer – подготовка документации для производства и сборки печатных платViews: 3991 В процессе освоения Altium Designer много возникает вопросов по подготовке документации для производства плат, а также для её сборки. Altium Designer позволяет сделать все требуемые документы, хотя скажем …
LCD драйвер – UC1601sViews: 1817 http://svetomuzyka.narod.ru/project/UC1601s.html Читайте обновление на http://catcatcat.d-lan.dp.ua/?page_id=178 В данный момент можно приобрести в ООО “Гамма” несколько типов индикаторов на драйвере UC1601s. RDX0048-GC, RDX0077-GS, RDX0154-GC и RDX0120-GC выполнены по технологии COG.
MPLAB® Harmony – или как это просто! Часть 4.Views: 2390 Часть четвертая – это может показаться немного сложно. Структура проекта. Для облегчения конфигурирования проекты MPLAB Harmony обычно структурированы таким образом, чтобы изолировать код, необходимый для настройки «системы», от …
LM317 и светодиодыViews: 8163 LM317 и светодиоды статья с переработанная с сайта http://invent-systems.narod.ru/LM317.htm Долговечность светодиодов определяется качеством изготовления кристалла, а для белых светодиодов еще и качеством люминофора. В процессе эксплуатации скорость деградации кристалла …
Емкостной сенсорViews: 3220 Изучаем изготовление емкостных сенсоров на PIC-микроконтроллере. Конструкция емкостных сенсоров имеет вид: Емкостные сенсоры строятся по схеме высокочастотного генератора, сам принцип основан на измерение частоты этого генератора. Частота зависит …
Часы + Календарь + Термометр + …Views: 2821 Часы + Календарь + Термометр + Индикатор влажности + Секундомер + Дистанционное управление на ИК лучах (пульты на RC-5 протоколе) + Автоматическая регулировка яркости + Возможность вывода данных через USB, …
Модуль CAN в микроконтроллерах PIC18Views: 5950 Введение CAN последовательный интерфейс связи, который эффективно поддерживает распределенное управление в реальном масштабе времени с высокой помехозащищенностью. Протокол связи полностью определен Robert Bosch GmbH, в спецификации требований …
Проект с использованием MCC часть 05Views: 2193 Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое …

