ftp27

Msp430 С Lcd Экранчиком. Проблема С Частотой

18 сообщений в этой теме

ftp27    2

Работаю с микроконтроллером msp430f4784 и LCD экранчиком SBLCDA4. В микроконтроллере встроен драйвер LCD, поэтому разобраться в его работе было не сложно. Составил табличку, набросал программу. Результат, как всегда, не оправдал ожиданий. Изображение мерцало. Такое чувство, что динамическая индикация происходит очень медленно, Но часовой кварц стоит, и указан номинал конденсаторов на нем. UART же как то работал.

Эмпирическим путем было выяснено, что мерцание иногда пропадает если взяться за землю на программаторе. Пробовали питать всю схему от источника питания, без участия программатора, все равно все так же мерцает. Перепаял кварц максимально близко к микроконтроллеру, а так же заземлил его корпус. Это тоже не помогло. Идеи уже кончились..

Прикладываю с программой пару гифок, как все это происходит на деле

#include "msp430.h"
void main(void)
{
int i;
WDTCTL = WDTPW + WDTHOLD;				
FLL_CTL0 |= XCAP10PF;					
LCDACTL = LCDON + LCD4MUX + LCDFREQ_128;
LCDAPCTL0 = LCDS0+LCDS4+LCDS8+LCDS12+LCDS16+LCDS20;
P5SEL = BIT2+BIT3+BIT4;				
for( i = 0; i < 11; i ++)
{
 LCDMEM[i] = 0xFF;						
}

_BIS_SR(LPM3_bits);					
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как буд - то питание на дисплей с определённой частотой идёт найди питание дисплея и посмотри чё туда идёт с МК

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ftp27    2

Как буд - то питание на дисплей с определённой частотой идёт найди питание дисплея и посмотри чё туда идёт с МК

Тут нет питания так таковой. Есть четыре COM на которые поочередно что то подается напряжение, и еще куча ног на специальные порты на МК. Суть в том что МК, если верить какой то pdf-ки с сайта TI, выдает переменное напряжение на COM0-COM3 последовательно и в соответствии включает нужные пины на МК. Ну я все о том, что питания LCD нет. Это просто матрица с кристаликами и выходами к ним. Память LCD находиться в MK.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
UTSource

Найдите миллионы труднодоступных

электронных компонентов

ftp27    2

Так дисплей же или с ОА или с ОК а МК выводит единицы или нули на аноды или катоды ведь так

Я немного не понимаю что такое ОА и ОК...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ftp27    2

Хмм. Ну так или иначе, с мк идет именно то, что показывается на LCD. Как я уже говорил, устройство LCD максимально просто, все грабли в подключении или прошивке МК. По этому поводу и вопрос :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Cobban    133

Я бы уменьшил коэф. деления для частоты драйвера LCD.

Попробуйте написать так:

LCDACTL = LCDON + LCDSON + LCD4MUX + LCDFREQ_32;

Хотя на счет "LCDSON" не уверен.

Так дисплей же или с ОА или с ОК а МК выводит единицы или нули на аноды или катоды ведь так

Нет. ЖКИ иначе устроен.

Изменено пользователем Cobban

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Rhime    143

Давно не игрался с МСП по этому по программе не подскажу. Но копать нужно в сторону частоты обновления экрана. Она должна быть как минимум в 2 а то и в 3 раза выше. Ну и стоит проверить есть ли смена полярности на управляющих выводах МК. Хотя если изображение есть то и смена тоже есть. Скорей всего проблема в частоте обновления экрана.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ftp27    2

По поводу частоты, я пробовал 32. Мне кажется тут наводки какие то, у меня там проводов целая кипа на дисплей

UlkRBJsptaM.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tvilsa    3

Подключал ЖК экран к контроллеру MSP430F449. Вроде особых проблем не заметил. В качестве исходника брал пример от техаса.

Мне почемуто кажется у Вас ошибка с подключением ЖК к контроллеру. Такое ощущение что линии ЖК которые COM подключены к линиям контроллера Sx.

Попробуйте для начала сделать так

#include "msp430.h"
void main(void)
{
int i;
WDTCTL = WDTPW + WDTHOLD;							
FLL_CTL0 |= XCAP10PF;								
LCDACTL = LCDON + LCDSON + LCD4MUX + LCDFREQ_128;
LCDAPCTL0 = LCDS0+LCDS4+LCDS8+LCDS12+LCDS16+LCDS20;
P5SEL = BIT2+BIT3+BIT4+BIT5;                        
for( i = 0; i < 11; i ++)
{
	 LCDMEM[i] = 0xFF;											
}
P1DIR = 0x22;							 // P1.1,5 to output direction
P1SEL = 0x22;							 // P1.1,5 to output MCLK & ACLK

}

и ногу R03 заземлить.

Потом померяйте (если конечно есть чем :-)) на ногах 1.1 частоту MCLK и на 1.5 ACKL. Мало ли что там с частотами.

Хотя на счет "LCDSON" не уверен.

Да нет все нормально. Этот бит служит для организации мигания.

Если он в единице то все сегменты которые должны светиться-светятся, если в ноле то все НЕГОРЯТ.

Вот руководство пользователя на msp430x4x первая часть архива

вторая часть архива

правда это устаревшее описание

Семейство микроконтроллеров MSP430x4xx руководство пользователя.part1.rar

Семейство микроконтроллеров MSP430x4xx руководство пользователя.part2.rar

Изменено пользователем tvilsa

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
tvilsa    3

Вот нашел техасовский пример именно для вашего экрана

//******************************************************************************
//    MSP430x47xx Demo - LCD_A Put "0123456" on SBLCDA4 LCD
//
//  Description; Put "0123456" on SBLCDA4 LCD.
//  ACLK = LFXT1 = 32768, MCLK = SMCLK = DCO = 32xACLK = 1.048576MHz
//  //*An external watch crystal is required on XIN/XOUT for ACLK*//
//
//			    MSP430x47xx
//		    -----------------
//	    /|\|			  XIN|-
//		 | |				 | 32kHz
//		 --|RST		  XOUT|-		 SBLCDA4
//		   |				 |	    ___________
//		   |			  S4 |------>|14		 |
//		   |			  S5 |------>|13		 |
//		   |			 ..  | ....  |..		 |
//		   |			 S17 |------>|1		  |
//		   |			 COM0|------>|15		 |
//		   |			 COM1|------>|16		 |
//		   |			 COM2|------>|17		 |
//		   |			 COM3|------>|18		 |
//		   |			 S18 |------>|19		 |
//		   |			 S19 |------>|20		 |
//		   |			  .. | ....  |..		 |
//		   |			 S25 |------>|26		 |	
//		   |_________________|	   |___________|
//
//
//  P. Thanigai / K.Venkat
//  Texas Instruments Inc.
//  November 2007
//  Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.42A
//*****************************************************************************
#include <msp430x47x4.h>
// LCD segment definitions.
#define h 0x80
#define e 0x40
#define g 0x20
#define f 0x10
#define d 0x08
#define c 0x04
#define b 0x02
#define a 0x01
const char char_gen[] = {				   // definitions for digits
 a+b+c+d+e+f,							  // Displays "0"
 b+c,									  // Displays "1"
 a+b+d+e+g,							    // Displays "2"
 a+b+c+d+g,							    // Displays "3"
 b+c+f+g,								  // Displays "4"
 a+c+d+f+g,							    // Displays "5"
 a+c+d+e+f+g,							  // Displays "6"
 a+b+c,								    // Displays "7"
 a+b+c+d+e+f+g,						    // Displays "8"
 a+b+c+d+f+g							   // Displays "9"
};
void main(void)
{
 volatile unsigned int i;
 WDTCTL = WDTPW +WDTHOLD;				  // Stop WDT
 FLL_CTL0 |= XCAP14PF;					 // Configure load caps
 // Wait for xtal to stabilize
 do
 {
   IFG1 &= ~OFIFG;						 // Clear OSCFault flag
   for (i = 0x47FF; i > 0; i--);		   // Time for flag to set
 }
 while ((IFG1 & OFIFG));				   // OSCFault flag still set?

 P5SEL = 0x1C;							 // Set COM pins for LCD
 LCDACTL = LCDON+LCD4MUX;				  // 4mux LCD, ACLK/32
 LCDAPCTL0 = 0x7E;						 // Segments 4-24
 for( i = 0; i < 20; i ++)
 {
   LCDMEM[i] = 0;						  // Clear LCD
 }
 for (i=2;i<9;i++)
 {
   LCDMEM[i] = char_gen[i-2];
 }
 _BIS_SR(LPM3_bits);					   // Enter LPM3
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ftp27    2

Вот нашел техасовский пример именно для вашего экрана

//******************************************************************************
// MSP430x47xx Demo - LCD_A Put "0123456" on SBLCDA4 LCD
//
// Description; Put "0123456" on SBLCDA4 LCD.
// ACLK = LFXT1 = 32768, MCLK = SMCLK = DCO = 32xACLK = 1.048576MHz
// //*An external watch crystal is required on XIN/XOUT for ACLK*//
//
//			 MSP430x47xx
//		 -----------------
//	 /|\|			 XIN|-
//		 | |				 | 32kHz
//		 --|RST		 XOUT|-		 SBLCDA4
//		 |				 |	 ___________
//		 |			 S4 |------>|14		 |
//		 |			 S5 |------>|13		 |
//		 |			 .. | .... |..		 |
//		 |			 S17 |------>|1		 |
//		 |			 COM0|------>|15		 |
//		 |			 COM1|------>|16		 |
//		 |			 COM2|------>|17		 |
//		 |			 COM3|------>|18		 |
//		 |			 S18 |------>|19		 |
//		 |			 S19 |------>|20		 |
//		 |			 .. | .... |..		 |
//		 |			 S25 |------>|26		 |	
//		 |_________________|	 |___________|
//
//
// P. Thanigai / K.Venkat
// Texas Instruments Inc.
// November 2007
// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.42A
//*****************************************************************************
#include <msp430x47x4.h>
// LCD segment definitions.
#define h 0x80
#define e 0x40
#define g 0x20
#define f 0x10
#define d 0x08
#define c 0x04
#define b 0x02
#define a 0x01
const char char_gen[] = {				 // definitions for digits
a+b+c+d+e+f,							 // Displays "0"
b+c,									 // Displays "1"
a+b+d+e+g,							 // Displays "2"
a+b+c+d+g,							 // Displays "3"
b+c+f+g,								 // Displays "4"
a+c+d+f+g,							 // Displays "5"
a+c+d+e+f+g,							 // Displays "6"
a+b+c,								 // Displays "7"
a+b+c+d+e+f+g,						 // Displays "8"
a+b+c+d+f+g							 // Displays "9"
};
void main(void)
{
volatile unsigned int i;
WDTCTL = WDTPW +WDTHOLD;				 // Stop WDT
FLL_CTL0 |= XCAP14PF;					 // Configure load caps
// Wait for xtal to stabilize
do
{
IFG1 &= ~OFIFG;						 // Clear OSCFault flag
for (i = 0x47FF; i > 0; i--);		 // Time for flag to set
}
while ((IFG1 & OFIFG));				 // OSCFault flag still set?

P5SEL = 0x1C;							 // Set COM pins for LCD
LCDACTL = LCDON+LCD4MUX;				 // 4mux LCD, ACLK/32
LCDAPCTL0 = 0x7E;						 // Segments 4-24
for( i = 0; i < 20; i ++)
{
LCDMEM[i] = 0;						 // Clear LCD
}
for (i=2;i<9;i++)
{
LCDMEM[i] = char_gen[i-2];
}
_BIS_SR(LPM3_bits);					 // Enter LPM3
}

Буквально на днях пришли платы со схемой. Ваш пример выдает аналогичный вариант, все моргает и не выводится все что нужно. Т.к. плата уже полностью печатная и дорожки максимально короткие, о наводках никакой речи идти не может.

post-129151-0-58128800-1363271256_thumb.jpg

Подключал ЖК экран к контроллеру MSP430F449. Вроде особых проблем не заметил. В качестве исходника брал пример от техаса.

Мне почемуто кажется у Вас ошибка с подключением ЖК к контроллеру. Такое ощущение что линии ЖК которые COM подключены к линиям контроллера Sx.

Попробуйте для начала сделать так

#include "msp430.h"
void main(void)
{
int i;
WDTCTL = WDTPW + WDTHOLD;							
FLL_CTL0 |= XCAP10PF;								
LCDACTL = LCDON + LCDSON + LCD4MUX + LCDFREQ_128;
LCDAPCTL0 = LCDS0+LCDS4+LCDS8+LCDS12+LCDS16+LCDS20;
P5SEL = BIT2+BIT3+BIT4+BIT5;
for( i = 0; i < 11; i ++)
{
	 LCDMEM[i] = 0xFF;											
}
P1DIR = 0x22;							 // P1.1,5 to output direction
P1SEL = 0x22;							 // P1.1,5 to output MCLK & ACLK

}

и ногу R03 заземлить.

Потом померяйте (если конечно есть чем :-)) на ногах 1.1 частоту MCLK и на 1.5 ACKL. Мало ли что там с частотами.

Хотя на счет "LCDSON" не уверен.

Да нет все нормально. Этот бит служит для организации мигания.

Если он в единице то все сегменты которые должны светиться-светятся, если в ноле то все НЕГОРЯТ.

Вот руководство пользователя на msp430x4x первая часть архива

вторая часть архива

правда это устаревшее описание

Это описание мне уже знакомо. В правильности подключения LCD я уверен. По распиновке все подключалось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ftp27    2

Попробовал цепануть осциллографом COM0. Увидел там такое

post-129151-0-12196600-1363333512_thumb.jpg

Это уже совсем не нормально выглядит о_О

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ftp27    2

Припаял электролит на 10uF на ногу LCDCAP микроконтроллера. Получил такую штуку

post-129151-0-45712900-1363335294_thumb.jpg

Видно что сразу стало получше. Но дисплей все еще каловратит

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
NebsteR    743

400мс период этого дела? Не многовато ли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ftp27    2

400мс период этого дела? Не многовато ли?

Вот уж не знаю. Вот COM3 (желтый) и COM2(Синий).

post-129151-0-89088400-1363349724_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ftp27    2

В результате долгих подборов, все же было выявлено необходимое кол-во сегментов которые должны были бы быть задействованы в проекте. С этим набором ничего не мерцает. Поэтому было решено так это и оставить

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Гость Иван
      Автор: Гость Иван
      Есть LCD панель V260B3-P09 rev.C1. С платы T-con V260B3-XC09 отпаяна микросхема U1.
      Такая же плата бывает на панелях с другой маркировкой, например DE260AGM-C1.
      В инете не нашёл чётких фото этой платы с читаемой маркировкой микросхемы.
      Если у кого то есть хорошее фото платы или сама плата - пожалуйста, напишите маркировку или сделайте  фото.
      Хочу на основе этой матрицы и китайской универсальной основной платы  сделать ТВ.
    • Автор: Alexander1997
      Доброго времени суток. Понадобилось сделать несложное меню.  Меню построено следующим образом - имеется главный пункт и 4 подпункта. Попасть в нужный подпункт можно только через главное меню. Вот примерный вид главного меню.

      Блок схема меню

       
      Конструкция кода
      typedef struct { uint8_t menu;// uint8_t submenu;// MAIN_MENU, MENU_MANUAL, MENU_AUTO, MENU_SETUP, MENU_START }menuItem; typedef struct Selection { unsigned char id; //Номер меню/подменю unsigned char ent_f : 4; //Флаг входа в подменю unsigned char esc_f : 4; //Флаг выхода из подменю }SL; enum switchVariants : byte { // Определения для переключателя пунктов меню; MAIN_MENU, MENU_MANUAL, MENU_AUTO, MENU_SETUP, MENU_START }; switchVariants switchPointer = MAIN_MENU; // С чего начнем цикл int main (void) { while(1) { } } Посоветуйте как организовать вход и выход из меню? Для этого завел два флага ent и esc. Но как их связать голову ломаю.
    • Автор: dsotm
      Подключаемый через mini Usb Lcd дисплей для компьютера. Позволяет выводить различную информацию на экран. Проверялось в Windows (Lcd Smarie, AIDA64) и Linux (LCDProc, lcd4linux). 
      Платы немного с дефектом - для удобства подключения usb пришлось сточить уголок. Кабель miniUSB к комплект не входит.
      Позволяет подключать к компьютеру дисплеи 1602 или 2004 на контроллере hd44780 (самый распространенный).
      Цены:
      Без дисплея - 600 С дисплеем 1602 - 700 С дисплеем и металлическим корпусом - 900 Демонстрация работы
      Пересылка по РФ почтой + 250.
      Самовывоз - Краснодар.




    • Автор: Timuridze
      Накрылась фоторамка Texet TF-803 которая верой и правдой прослужила несколько лет. Возникла идея задействовать lcd экран и подключить его к raspberry через lvds. (30 pins   LVDS (1 ch, 8-bit) , FPC) Пытался найти даташит он есть  на panelook.com http://www.panelook.com/TM081JFH01_Tianma_8.1_CELL_overview_20071.html но к сожалению у меня нет регистрации, кто нибудь может скачать оттуда pdf со спецификацией?
      Скачал сам все таки...Там какая то сложная система с кредитами, пришлось мыло засветить, теперь спамом замучают наверно.
    • Автор: Anastas Mik
      Народ, всем привет!
      Кто знает, почему не подключаются нормально библиотека LCD к Proteus 8. Перепробовал уже целую кучу, но все время выдает столько же ошибок.
      Библиотеку беру от сюда: http://kot3245.ru/hrdwr/ssd1306IIC.html
      LCD на SSD1306.
      Протеус вообще способен корректно работать с внешними библиотеками? Подскажите плз.