ftp27

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

18 posts in this topic

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);					
}

Share this post


Link to post
Share on other sites
ftp27    2

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

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

Share this post


Link to post
Share on other sites

Бюджетные Wi-Fi-/ Bluetooth-решения для IoT-применения

Обзор основной линейки поставок и новинок Espressif Systems – экономически выгодных SoC Wi-Fi-/ Bluetooth-чипов и модулей для IoT-применений: от простых портативных устройств до промышленных решений

Подробнее...

ftp27    2

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

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

Share this post


Link to post
Share on other sites

Управляемый свет интернета вещей: Philips и протокол DALI 2.0

Полностью программируемые драйверы Philips Xitanium поддерживают все варианты регулировки яркости света и силы тока. Надежность системы значительно повышается при интеллектуальном мониторинге температуры светодиодного источника света. Разнообразие моделей в семействе обеспечивает максимальную гибкость в настройке рабочих параметров.

Подробнее...

ftp27    2

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

Share this post


Link to post
Share on other sites
Cobban    137

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

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

LCDACTL = LCDON + LCDSON + LCD4MUX + LCDFREQ_32;

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

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

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

Edited by Cobban

Share this post


Link to post
Share on other sites
Rhime    146

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

Share this post


Link to post
Share on other sites
ftp27    2

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

UlkRBJsptaM.jpg

Share this post


Link to post
Share on other sites
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

Edited by tvilsa

Share this post


Link to post
Share on other sites
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
}

Share this post


Link to post
Share on other sites
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 я уверен. По распиновке все подключалось.

Share this post


Link to post
Share on other sites
ftp27    2

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

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

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

Share this post


Link to post
Share on other sites
ftp27    2

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

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

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

Share this post


Link to post
Share on other sites
ftp27    2

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

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

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

Share this post


Link to post
Share on other sites
ftp27    2

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Similar Content

    • By SerYoga72
      Приветствую всех.
      Подскажите не совсем программисту (или совсем не программисту) как грамотно реализовать программный SPI. МК CC430F5137 + OLED дисплей WEH000802A от Winstar. Данные 10 бит. Аппаратный в контроллере позволяет только 8, выход свой написать. Написал, но мне это не нравиться, знаю что можно намного проще, но не нахожу решения. Да и как то странно с портами в этом контроллере работается, нельзя (или не знаю как) данные напрямую в порт кидать, типа P1.0 = 1; А только BITами оперировать??? Вот что у меня получилось, смеяться разрешается ))
      // Обработчик дисплея // // Маразм для програмного SPI void SCL(uchar b) { if (b==1) (P1OUT |= BIT7); else P1OUT &= ~BIT7; } //Строб void CSB(uchar b) { if (b==1) (P1OUT |= BIT4); else P1OUT &= ~BIT4; } //Выбор чипа void SDI(uchar b) { if (b==1) (P1OUT |= BIT6); else P1OUT &= ~BIT6; } //Передаваемые данные void SDO(uchar b) { if (b==1) (P1OUT |= BIT5); else P1OUT &= ~BIT5; } //Принимаемые данные // Вывод управляющей команды для дисплея void WriteCMD(uchar CMD) { uchar i; CSB(0); SDI(0); _delay_cycles(100); SCL(0); _delay_cycles(100); SCL(1); SDI(0); _delay_cycles(100); SCL(0); _delay_cycles(100); SCL(1); _delay_cycles(100); for(i=0;i<8;i++) { uchar t = ((CMD>>(7-i)) & 0x01); // Как уйти от переменной t ????? SDI(t); SCL(0); _delay_cycles(100); SCL(1); _delay_cycles(100); } CSB(1); } /*============================================ Вывод одиночного символа на дисплей ============================================*/ void WriteOneDAT(uchar DAT) { uchar i;; CSB(0); SDI(1); _delay_cycles(100); SCL(0); _delay_cycles(100); SCL(1); SDI(0); _delay_cycles(100); SCL(0); _delay_cycles(100); SCL(1); _delay_cycles(100); for(i=0;i<8;i++) { uchar t =((DAT>>(7-i)) & 0x01); SDI(t); SCL(0); _delay_cycles(100); SCL(1); _delay_cycles(100); } CSB(1); } Технически разница между Командой и Данными в первом бите SDI и объединить эти две функции наверно не проблема, но я уверен что это можно написать как то грамотнее ...  Как в этом контроллере с портами работать кроме как P1OUT |= BIT1 ??? Нельзя как то типа P1OUT_1 = 1;  ?? Где то в буржуйской литературе мапинг какой то проскакивал, но там я вообще не вьехал про что это, для чего это....
      Заранее Всем Благодарен.
       
       
       
       
       
    • By artos5
      Добрый день уважаемые! У кого есть схема подключения дисплея такого и библиотека ? Очень надо!
    • By RA9CCF
      Помогите разобраться  с подключение  LCD  !  Попалась  такая плата  хочу  подключить  к  Ардуино !  Но не чего  не гуглится  ? Может кто  сталкивался  с таким  предполагаю  что плата  с частотного  преобразователя  .
      Хотелось  бы узнать  схему  подключения  напряжение  питания  раcпиновку . 
       
       
    • By Kompotius
      Приветствую форумчане!!! Поздравляю Вас с наступающим 2019, Всех благ в новом году Вам и Вашим близким людям!!!
      Собственно теперь вопрос: Подскажите, как реализовать проект  удаленного управление LCD MT-20S4M (МЭЛТ, контроллер Китай HD44780 ))  с интерфейсом I2C (PCF8574A) например по ethernet, при чем нужно управлять несколькими индикаторами примерно 20 , а то и более, информацию выводить при помощи компа по ethernet  информация буквенно-числовая по типу A1-0V01-2-50 можно формировать информацию на компе в таблице и передавать ее, благодарю за мнения и предложения
    • By Scinar
      Привет всем. Хочу собрать калькулятор на atmega 328p. Но не как не могу запустить LCD TIC55, основанный на сдвиговом регистре с чипом ML1001. Никогда не связывался с подобным дисплеем. Понравился очень экономичным потреблением тока и экономным количеством выводов управления - всего 3. Проблема в тактирование, как написать программу для вывода хотя б одного символа, документации мало нашел, так же есть библиотека для atmel studio 5, сам пользуюсь 7. Библиотку переделал под 7 но дисплей так ничего и не вывел. Подскажите как правильно написать программу, язык значения не имеет хоть assembler или С. Мне надо что б дисплей вывел хоть один символ корректно, дальше разберусь


      TIC55 Display Module.pdf
  • Сообщения

    • Зачем закрываться ? Мысль не понял. При работе нормально разомкнутые контакты, транзистор закрыт. При выключении прибора, контакты замыкаются, транзистор разряжает С. При включении прибора, контакты опять разомкнуты
    • Ты предлагаешь голосовать за проходную кандидатуру?  Заметь, это не я предлагал...  Мил человек, я голосую за свои взгляды, а не за того, кто имеет шансы.  Я хочу знать расклад взглядов народа. А то, что потребуется большое время на движение этого расклада к цивилизации, - мне объяснять не надо.  Разные хитровые... ые шустрики, пытающиеся наскоком въехать в рай меня просто забавляют...  Они как голодные рыбки в аквариуме... 
    • Мне больше интересно, откуда взялись значения скачков напряжения в сети, чем они измерялись.
    • Так всё там дешевле заказать чем производство у себя делать.а схемы же под себя переделывают ,изменяют,добавляют и появится после того как кто то дотошный и думающем о будующем не только себя любимого но и всех людей с паяльниками срисует с платы и выложит...
    • У вас зарядное АТХ,  значит есть схема ограничения тока с датчиком - резистором. Сравниваете  падение напряжения на этом резисторе с образцовым с помощью компаратора, и когда оно станет меньше нужного, останавливайте заряд.
      Более конкретно - надо смотреть, что там за схема.
    • Капееееец... Ну как так можно?  Вопрос риторический, не надо отвечать