Отговори на тема  [ 16 мнения ]  Отиди на страница 1, 2  Следваща
MSP430 с LCD матричен дисплей AC161AYA 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Фев 05, 2014 8:43 pm
Мнения: 11
Мнение MSP430 с LCD матричен дисплей AC161AYA
Здравейте,

Мъча да подкарам гореспоменатия дисплей с MSP430G2553, но нещо не ми се получава. Ще се радвам, ако някой си е играл с подобен род диспеи, да помогне. Дисплеят е захранен с 3.3V. Понеже самият дисплей изисква потенциална разлика от около 5V, чрез DC-DC преобразувател подавам -3.3V към пин Vo (Contrast Adjustment). R/W e вързан към GND (т.е. искам само да пиша, няма да чета от паметта на дисплея). Ето как всичко е навързано:

Vss - GND
Vdd - 3.3V
Vo - -3.3V
R/S - P2.0
R/W - GND
E (Enable) - P2.1
DB0 до DB7 на дисплея са вързани към Порт 1 на MSP-то, от P1.0 до P1.7.

Дейташийтът на самия LCD може да се намери тук: https://store.comet.bg/download-file.php?id=293

Вътре е даден initialization sequence, която явно не успявам да изпълня. Когато подам захранване, всички точки от дисплея са запълнени. Интересното е, че частта Function Set явно има ефект, защото ако подам 0x30 (1 line mode), запълва само втората половина от символните блокове, докато първата остава празна. Ако подам 0x38, заплънени са всички. Иначе долният код би трябвало да направи следното - 2 line mode, display on, cursor off, blink off, display clear, increment on, entire shift off във lcd_init();. След което във void write_lcd() опитвам да пратя адрес 00 в DDRAM и да подам на него символ нула (0). Дисплеят обаче не реагира, всички символни блокове остават запълнени. Ето как изглежда:

http://postimg.org/image/5a0b8zy53/

#include <msp430g2553.h>

void lcd_init();
void write_lcd();
void delay_us(int count);


int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
P1DIR = 0xFF; //Port 1 Outputs
P1OUT = 0x00; //Set PORT0 = 0
P2DIR |= BIT0 + BIT1 + BIT2; //BIT0 = RS; BIT1 = Enable
P2OUT &= ~BIT2;
BCSCTL1 = CALBC1_8MHZ; // Set DCO
DCOCTL = CALDCO_8MHZ;

UCB0CTL1 |= UCSWRST; //Enable SW reset
UCB0CTL1 = UCSSEL_2 + UCSWRST; //Use SMCLK, keep SW reset
UCB0BR0 = 80; //fSCL = SMCLK/12 = ~100kHz
UCB0BR1 = 0;
UCB0CTL1 &= ~UCSWRST; //Clear SW reset, resume operation

lcd_init();
write_lcd();
}


void lcd_init()
{

/*Function Set*/
__delay_cycles(350000); //delay > 40ms
P2OUT &= ~BIT0; //RS = 0 - Instruction set
__delay_cycles(2); // delay 250ns
P1OUT = 0x38; //DB0 - DB7
__delay_cycles(2); // delay 250ns
P2OUT |= BIT1; //Enable = 1
__delay_cycles(5000); //delay > 0.5ms
P2OUT &= ~BIT1; //Enable = 0
__delay_cycles(5000); //delay > 0.5ms

/*Display ON/OFF*/
__delay_cycles(2); // delay 250ns
P1OUT = 0x0C; //DB0 - DB7
__delay_cycles(2); // delay 250ns
P2OUT |= BIT1; //Enable = 1
__delay_cycles(5000); //delay > 0.5ms
P2OUT &= ~BIT1; //Enable = 0
__delay_cycles(5000); //delay > 0.5ms

/*Display Clear*/
__delay_cycles(2); // delay 250ns
P1OUT = 0x01; //DB0 - DB7
__delay_cycles(2); // delay 250ns
P2OUT |= BIT1; //Enable = 1
__delay_cycles(5000); //delay > 0.5ms
P2OUT &= ~BIT1; //Enable = 0
__delay_cycles(20000); //delay > 2ms (0.5 + 1.5ms)

/*Entry Mode Set*/
__delay_cycles(2); // delay 250ns
P1OUT = 0x01; //DB0 - DB7
__delay_cycles(2); // delay 250ns
P2OUT |= BIT1; //Enable = 1
__delay_cycles(5000); //delay > 0.5ms
P2OUT &= ~BIT1; //Enable = 0
__delay_cycles(5000); //delay > 0.5ms
P2OUT |= BIT2;
}

void write_lcd()
{

P2OUT &= ~BIT0; //RS = 0 - Instruction set
__delay_cycles(2); // delay 250ns
P1OUT = 0x80; //Set address DDRAM
__delay_cycles(2); // delay 250ns
P2OUT |= BIT1; //Enable = 1
__delay_cycles(5000); //delay > 0.5ms
P2OUT &= ~BIT1; //Enable = 0
__delay_cycles(5000); //delay > 0.5ms

P2OUT |= BIT0; //RS = 1 - Data set
__delay_cycles(2); // delay 250ns
P1OUT = 0x30; //Write char
__delay_cycles(2); // delay 250ns
P2OUT |= BIT1; //Enable = 1
__delay_cycles(5000); //delay > 0.5ms
P2OUT &= ~BIT1; //Enable = 0
__delay_cycles(5000); //delay > 0.5ms
P2OUT &= ~BIT2;
}


Нед Апр 24, 2016 5:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: MSP430 с LCD матричен дисплей AC161AYA
Доколкото се ориентирам в Си-то, изглежда ми погрешен начина по който манипулираш порт2 - сякаш RS сигнала заема неподходящи стойности , нулираш го, но в последващи инструкции по енейбъла сякаш RS става единица, без да си го указал в коментар. Та товами изглежда подозрително.
На тоя етап Vo трябва да е през потенциометър , дори да ти е перфектен кодът- неподходящо напрежение нама да ти позволи да видиш нищо.


Нед Апр 24, 2016 9:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: MSP430 с LCD матричен дисплей AC161AYA
Май не съм прав за RS сигнала.
Сложи потенциометър.
Потърси в код за инициализация на HD4470 - твоят ми изглежда твърде къс -
обикноввено има няколко команди за ресет една след друга - с паузи от 50-на милисекунди между тях.


Нед Апр 24, 2016 9:12 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: MSP430 с LCD матричен дисплей AC161AYA
Е, само те обърквам, той и лцд контролерът е някакъв, разлличен от 4470


Нед Апр 24, 2016 9:16 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Фев 05, 2014 8:43 pm
Мнения: 11
Мнение Re: MSP430 с LCD матричен дисплей AC161AYA
Да, контролерът е друг, а неговият дейташийт е по-скромен дори и от този на цялото LCD. Изглежда, че хваща първата инструкция и след това нищо. Иначе си прав за потензиометъра - в момента контрастът ми е такъв, че едва забелязах, че при различни стойности в Function Set, първите 8 символни блока всъщност не светят. Но под ъгъл се вижда ясно кои светят и кои не. Проблемът изглежда е в кода, но не разбирам къде, принципно спазвам всички паузи между сигналите. Мисля да пробвам да клатя и R/W пина - в момента е вързан към GND. Благодаря за интереса и идеите.


Нед Апр 24, 2016 10:39 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: MSP430 с LCD матричен дисплей AC161AYA
Две забележки
- спред чаршафа E сигналът трябва да е около 1 микросек активен, ти го задържаш половин милисекунда, което е излишно.
- в началото порт 1 се установява в 0, порт 2 ти е P2OUT &= ~BIT2, което май е вдигнатив 1 сигнали RS и E;
Тоест вече изпълняваш някаква команда за запис на данни.
Може би трябва да сложиш някакви резистори към маса (на Е)и захранване за останалите, докато потегли твоят контролер.
Отделно първата инструкция я повтори няколко пъти през някаква пауза от 5-6 милисек .


Нед Апр 24, 2016 11:24 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: MSP430 с LCD матричен дисплей AC161AYA
MSP430 тръгва още от 1.8 волта а дисплея много по-късно, чак когато напрежението стане над 3 волта сложи след WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer пауза от 1-2 секунди.
Можеш да захраниш 5.0 LCD направо с 3.6В без DC/DC ако е от послените китайски дисплеи за $1.5: http://forum.43oh.com/topic/2637-36v-lc ... 0-for-231/
Можеш да пробваш това: http://forum.43oh.com/topic/1296-serial-fun/ само внимавай, че е за друг контролер и може би ще трябва да промениш малко нещата.

_________________
Warriors of the Night, ASSEMBLER!!!


Нед Апр 24, 2016 11:49 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Фев 05, 2014 8:43 pm
Мнения: 11
Мнение Re: MSP430 с LCD матричен дисплей AC161AYA
Блъснах здрав delay преди въобще да тръгна да пращам към LCD, но резултатът е същият. Ето тази част минава, но след нея нищо:

/*Function Set*/
__delay_cycles(350000); //delay > 40ms
P2OUT &= ~BIT0; //RS = 0 - Instruction set
__delay_cycles(2); // delay 250ns
P1OUT = 0x38; //DB0 - DB7
__delay_cycles(2); // delay 250ns
P2OUT |= BIT1; //Enable = 1
__delay_cycles(5000); //delay > 0.5ms
P2OUT &= ~BIT1; //Enable = 0
__delay_cycles(5000); //delay > 0.5ms


Пон Апр 25, 2016 12:52 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: MSP430 с LCD матричен дисплей AC161AYA
Това, което Ike ти обясни е : При включване на захранването - то се покачва с някаква скорост , не мигновено.
От момента , в който напрежението достигне около 2В - МСП430 тръгва , а ЛЦД то не е захранено добре . Едното решение е чип ресет 3Волта, който да не пуска МСП430 преди да е достигнато раб напрежение на системата.
Второто решение е някакво разумно закъснение - 1-2 сек на тоя етап - между тръгване на процесора и ЛЦД_инит процедурата. 40 милисек може да е малко. Процесорът ти може да има и други опции.
Всъщност защо си забил RW твърдо?


Пон Апр 25, 2016 7:06 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Фев 05, 2014 8:43 pm
Мнения: 11
Мнение Re: MSP430 с LCD матричен дисплей AC161AYA
R/W е към GND, защото нямам намерение да чета от паметта на LCD-то, само ще пиша т.е. ще ползвам само тази му функция. Иначе би могло да се ползва за даннова памет, но просто за моя проект това не е необходимо. Опитах и да го вържа на I/O pin и да го клатя, но резултатът е същият. Иначе разбирам какво имаше предвид Ike и добавих съответния delay преди въобще да се обърна към LCD-то, за да съм сигурен, че работното напрежение достига необходимите стойности. Проблемът, с който се сблъсквам е, че частта Function set в функцията lcd_init() минава, но след нея - нищо. Т.е. ако сменя Function set на 0x30 (1 line mode), виждам как само последните 8 символа тръгват, докато ако го сменя на 0x38 (2 line mode) и презапиша процесора, виждам как всички 16 символа светват.

След това обаче следва Display ON, Display Clear и Entry Mode Set, които не минават.


Пон Апр 25, 2016 10:21 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: MSP430 с LCD матричен дисплей AC161AYA
А пробва ли това от примера
Код:
//4. LCD Init
   //wait 0.5 seconds for LCD VCC+ to rise
   __delay_cycles(500000); // 0.5 seconds

   //4-bit Interface Mode Samsung 6a0069
   // 4-bit mode, 5x8, 1/16 duty, 2 lines, display off
   P1OUT= 0x20;               //4-bit mode
   toggle
   toggle
   P1OUT= 0x80;               //operational mode: 5x8, 1/16 duty, 2 lines, display off
   toggle
   __delay_cycles( 50 );
   ////////////////////////////////////////////////
   
   //display on
   P1OUT= 0x00;               //
   toggle
   P1OUT= 0xC0;               //
   toggle
   __delay_cycles( 1600 );
   ///////////////////////////////////////////////////

   //display clear
   P1OUT= 0x00;               //
   toggle
   P1OUT= 0x10;               //
   toggle
   __delay_cycles( 1600 );   
   /////////////////////////////////////////////////   
   
   //Entry Mode Set: Increment mode, Entire shift off
   P1OUT= 0x00;               //
   toggle   
   P1OUT= 0x60;               //
   toggle
   //////////////////////////////////////////////////



това е за 4 битово управление @ 1MHz.

_________________
Warriors of the Night, ASSEMBLER!!!


Пон Апр 25, 2016 10:26 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Фев 05, 2014 8:43 pm
Мнения: 11
Мнение Re: MSP430 с LCD матричен дисплей AC161AYA
Дава ми някои идеи, ще пробвам като се прибера от работа. Благодаря! От къде го намери това?


Пон Апр 25, 2016 10:37 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: MSP430 с LCD матричен дисплей AC161AYA
Пейснато е от тук: http://forum.43oh.com/topic/1296-serial-fun/

_________________
Warriors of the Night, ASSEMBLER!!!


Пон Апр 25, 2016 11:31 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Фев 05, 2014 8:43 pm
Мнения: 11
Мнение Re: MSP430 с LCD матричен дисплей AC161AYA
Подкарах го, проблемът се оказа хардуерен - трябваше по-голямо съпротивление между Vo и -3.3V, при около 15к символите се виждат ясно. Благодаря за проявения интерес.


Вто Апр 26, 2016 2:43 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: MSP430 с LCD матричен дисплей AC161AYA
А пробва ли Vo направо на маса или с потенциометър някакво напрежение между +3 и 0волта? Да не се окаже ,че изобщо не ти трябва ДЦДЦ.


Вто Апр 26, 2016 8:15 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 16 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни