Отговори на тема  [ 17 мнения ]  Отиди на страница 1, 2  Следваща
Програмиране на дисплей AMPIRE 164A-D 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Юни 01, 2009 11:13 pm
Мнения: 39
Мнение Програмиране на дисплей AMPIRE 164A-D
Здравейте,

Прибрах се в БГ и първата работа ми бе да отскоча до магазина да пазарувам. Човека, не му се приказваше много кое е добре и кое не, та финансовия фактор повлия и си взех посочения дисплей (Ampire 164A-D, четири-редов, 16 знака матричен). Докато бях в чужбинция, програмирахме в даскалото дисплей NEW HEAVEN, с вграден контролер SPC780D, цялото ръководено от Rabbit 5600W.

Свалих си дата-шийта от нета (http://www.ampire.com.tw/Spec-AC/AC-164A.pdf) и излиза, че е контролера на Ampire 164A-D е идентичен (същия) с SPC780D, следователно промених библиотеката, която бях написал, с очакването нещата да тръгнат. Свързах дата-бъса с паралелен порт D на PIC18F45K20, свързах захранването на логиката през пика (3.3В), свързах осветлението на 4.8В, свързах пина за контраст директно на дъното на пика (на нула) и командния бъс (Rs R/W и E) на порт C.

Проблемите ми са:
1. Контраста е зле - почти не се личат редовете, когато го стартирам. В предни теми се бе споменало, че много контролери трябва външно да се снабдят с -5-6В, но не съм сигурен дали при този е така...??
2. Дисплея въобще не захапва. Не мога и да го инициализирам.
3. Дисплея започва да грее, след броени секунди поради захранването на осветлението му. Захранвам го посредством ПИК-кита (3.3В) и серийно съм свързал една батерия АА от 1.5В и така напрежението за дисплея стига до ~4.8В, което според дата-шийта е ОК.

Прикачвам кода по-долу.


Прикачени файлове:
KS0066U.h [12.82 KiB]
193 пъти
Съб Юни 12, 2010 8:08 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Въх мър майка ...

1. За контраста се слага един потенциометър между VDD и GND към 3-ти пин и пота се врътка докато ти хареса.
2. С PicKit не се мъчи да го храниш - ще го прецакаш - подсветката харчи, на тоя, по спомен към 300 mA.
3. Пак по спомен ама май 5 волтово LCD не може да тръгне на 3.3. А и не съм сигурен дори да го пуснеш на 5 дали ще реагира на 3.3 на входа. Май искаше мин. 3.6 волта за 1-ца.

Заради точка 3 ти трябва, както пише в даташита, "по специална заявка" на 3.3V. Ако си го купувал от Комет - техните са само на 5V.

Ииии, какво искаш точно да му програмираш. Ако имаш предвид да му вкарваш char set - може само 8 символа - другите са твърди.


Съб Юни 12, 2010 8:56 pm
Профил ICQ
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение 
определено няма да тръгне дисплея на 3.3в. най-лесно за контраст 1к резистор към маса и трети крак на дисплея


Пон Юни 14, 2010 1:49 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Юни 01, 2009 11:13 pm
Мнения: 39
Мнение 
Мерси за съветите колеги. Оправиха се нещата след като приспособих зарядно от мобифон на 4.82В да достави сока за дисплея. Контраста е ок също, така както го бях свързал.

Поздрави!


Пон Юни 14, 2010 11:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
Cekins, По т.3: 5 волтово LCD не тръгва на 3.3. Ако го пуснеш на 5, реагира на 3.3 на входа.
Имам едно устройство (контролер), направено точно по този начин и дисплея си се "клати" директно от 3,3-волтов проц. Има обаче един проблем, който не съм сигурен от какво точно се получава: когато "защрака" автоматиката, дисплея яко се ошашкваше и започваше да изписва на случайни позиций случайни символи, а проца си кара автоматиката без грешка - т.е. не е от него. Когато имам цялостно опресняване на дисплея, всичко си идва по местата, докато не включи някой контактор. Успях софтуерно да се преборя почти напълно с тези смущения, но все още, понякога, много рядко, някой символ изчезва от позицията си - остава празно :D Та не мога да си обясня, дали това е ефект от ниските управляващи нива или самият дисплей е калпав. То не, че аз не съм де, ама...


Пон Юни 21, 2010 10:36 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Юни 01, 2009 11:13 pm
Мнения: 39
Мнение 
Здравейте,
Не се разбираме с дисплея. Инициализирането му [KS0066U_Init(&DL1N1F0, &D1C1B1);] минава ОК и имам контрол над дата трансфера, броя на редове, големината на символите, мигането, показването на курсора и вкл. и изкл. на дисплея. С изписването върху дисплея обаче все още не се справям. Имате ли представа или предположения защо?

Код:

/** C O N F I G U R A T I O N   B I T S ******************************/
#pragma config FOSC = INTIO67

/** I N C L U D E S **************************************************/
#include "p18f45k20.h"

#pragma code
char *iter, *addr, *ems, *donoff, *cdshift, *fset;
char L1, L2, L3, L4, I1S1,I1S0, I0S1, I0S0;
char DL1N1F0, DL1N1F1, DL1N0F0, DL1N0F1, DL0N0F0, DL0N1F0, DL0N1F1, DL0N0F1;
char D1C1B1, D1C1B0, D1C0B1, D1C0B0, D0C0B1,   D0C0B0,   D0C1B1,   D0C1B0;
char SC1RL1, SC1RL0, SC0RL1, SC0RL0;
void KS0066U_PortSetup();
void KS0066U_Enable();
void KS0066U_Disable();
void KS0066U_Write();
void KS0066U_Read();
void KS0066U_Clear();
void KS0066U_Return();
void KS0066U_EntryModeSet();
void KS0066U_FunctionSet();
void KS0066U_DispOnOffCtrl();
void KS0066U_CursDispShift();
void KS0066U_SetAddr();
void KS0066U_ReadBusyFlag();
void KS0066U_Default();
void KS0066U_PrintString();
void KS0066U_Init();

void main()
{
   KS0066U_Init(&DL1N1F0, &D1C1B1);
   KS0066U_PrintString("Test String",&L2,&I0S0);
}
/*Subroutines*********************************************************/
//Connections between PIC18F45K20 and the KS0066U controller onto the AMPIRE LCD
//KS0066U    |Rs R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
//PIC        |C4 C5 C6 D7  D6  D5  D4  D3  D2  D1  D0

void KS0066U_Enable()                           
{
   LATCbits.LATC6 = 1;
   LATCbits.LATC6 = 0;
}
void KS0066U_Write()                                 
{
   LATCbits.LATC5 = 0;
   LATCbits.LATC4 = 1;
}
void KS0066U_Read()                           
{   
   LATCbits.LATC4 = 0;
      LATCbits.LATC5 = 1;
}
void KS0066U_ReadBusyFlag()
{
   KS0066U_Read();
   TRISD = 0xff;         // Set PortD to input
   while(LATDbits.LATD7); //wait for bit D7 to become 0
   LATCbits.LATC5 = 0;
   TRISD = 0x00;         // Set PortD to output
}
void KS0066U_PortSetup()
{
         TRISD = 0x00; //Set PortD to OUTPUT
       TRISCbits.TRISC6 = 0; //Set PortC bit6 to OUTPUT
      TRISCbits.TRISC5 = 0; //Set PortC bit5 to OUTPUT
      TRISCbits.TRISC4 = 0; //Set PortC bit4 to OUTPUT
      LATD = 0x00;        //Set PortD to LOW
      LATC = 0x00;        //Set PortC to LOW
}

void KS0066U_Clear()                                 
{   
   LATC = 0x00;
   LATD = 0x01;
      KS0066U_Enable();
   KS0066U_ReadBusyFlag();
}

void KS0066U_EntryModeSet(char *ems)                                 
{
   I1S1 = 0x07;
   I1S0 = 0x06;
   I0S1 = 0x05;
   I0S0 = 0x04;

   LATD = *ems;
    KS0066U_Enable();
   KS0066U_ReadBusyFlag();
}

void KS0066U_FunctionSet(char *fset)                             
{
   DL1N1F0 = 0x38;
   DL1N1F1 = 0x3c;
   DL1N0F0 = 0x30;
   DL1N0F1 = 0x34;
   DL0N0F0 = 0x20;
   DL0N1F0 = 0x28;
   DL0N1F1 = 0x2C;
   DL0N0F1 = 0x24;

   LATD =  *fset;
     KS0066U_Enable();
   KS0066U_ReadBusyFlag();
}

void KS0066U_DispOnOffCtrl(char *donoff)                          // DispOnOffCtrl
{
   D1C1B1 = 0x0f;
   D1C1B0 = 0x0e;
   D1C0B1 = 0x0d;
   D1C0B0 = 0x0c;
   D0C0B1 = 0x09;
   D0C0B0 = 0x08;
   D0C1B1 = 0x0b;
   D0C1B0 = 0x0a;

   LATD = *donoff;
   KS0066U_Enable();
   KS0066U_ReadBusyFlag();
}

void KS0066U_CursDispShift(char *cdshift)
{
SC1RL1 = 0x1c;
SC1RL0 = 0x18;
SC0RL1 = 0x14;
SC0RL0 = 0x10;

   LATD = *cdshift;
   KS0066U_Enable();
   KS0066U_ReadBusyFlag();
}

void KS0066U_SetAddr(char *addr)                              // SetDispDataRamAddr
{
   L1 = 0x00;
   L2 = 0x40;
   L3 = 0x10;
   L4 = 0x50;
   LATCbits.LATC4 = 0;
   LATCbits.LATC5 = 0;
   LATD = *addr;
   KS0066U_Enable();
   KS0066U_ReadBusyFlag();
}

void KS0066U_Init(char *fset, char *donoff)
{
   KS0066U_PortSetup();
   KS0066U_FunctionSet(fset);
   KS0066U_DispOnOffCtrl(donoff);
   KS0066U_Clear();
   KS0066U_Clear();//For some reason it is necessary to repeat the clear command
}

void KS0066U_PrintString(char *iterator,char *addr,char *ems)
{
    KS0066U_EntryModeSet(&ems);
   KS0066U_SetAddr(&addr);
    while (*iterator){
       KS0066U_Write();
      LATD = *iterator;
      KS0066U_Enable();
      KS0066U_ReadBusyFlag();
       iterator++;
   }
}


Пон Юни 21, 2010 1:54 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение 
не видях къде си вдигаш ерес-а при данни


Пон Юни 21, 2010 3:20 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Юни 01, 2009 11:13 pm
Мнения: 39
Мнение 
didofen написа:
не видях къде си вдигаш ерес-а при данни

@didofen
Ако говориш за "Rs", то в командата "KS0066U_Write()" вдигам бит4(Rs) от порт "С", при пращане на данни към дисплея.


Пон Юни 21, 2010 5:31 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение 
да не би да имаш проблеми с контраста


Вто Юни 22, 2010 10:05 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Gogo - единицата ти я хваща по някаква щастлива случайност

в случая 5*0,7 е 3,5
4,82*0,7=3,374 - пак не достига малко.

Четете малко да му се невиди.

На тия входове най-вероятно има шмигери - Вие се опитвате да ги цъкате в границите им - ми ще има проблеми.


Прикачени файлове:
ac-164.jpg
ac-164.jpg [ 159.89 KiB | Прегледано 2202 пъти ]
Вто Юни 22, 2010 12:39 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение 
Cekins, може и аз да греша в разчитането на дейташийта, ама май не си много прав.
Прав си само за 0.7 * VDD до VDD, обаче VDD е от 2.7 до 5.5 волта. Т.е ако той си храни логиката на дисплея с 3.3 волта не виждам какъв ще му е проблема.


Вто Юни 22, 2010 2:13 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Юни 01, 2009 11:13 pm
Мнения: 39
Мнение 
didofen написа:
да не би да имаш проблеми с контраста


Не, нямам проблем с контраста, доколкото мога да съдя. Когато ползвам адресите указани в дата-шийта [ 0x00, 0x40, 0x10, 0x50 ] за първи, втори, трети и четвърти ред, мога да местя курсора само на първо положение на първи и на втори ред, а на останалите хоризонтални положения нямам достъп, или поради някаква причина изчезва курсора, може би от неправилно настроено напрежение на контраст-пина, както ти казваш. Не мисля, че контраст пина е виновен, най-вече понеже в процеса на експериментиране с различни командни последователности и тайминги, ми излизат ясни произволни символи на произволни позиции по дисплея.

Поради това си мисля, че проблема ми е на софтуерно ниво, но не виждам къде бъркам. Както писах по-горе, същия код работи с SPCL780D контролер на идентичен дисплей както този, но през Dynamic C и RABBIT.

Поздрави!


Вто Юни 22, 2010 9:42 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
И как точно ще му захраниш логиката с 2,7 да попитам аз. Щото не съм виждал Ampire дисплей с два извода за VDD на логиката и на LCD-то ?


Сря Юни 23, 2010 9:33 am
Профил ICQ
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение 
ми нещо не можах да се оправя с с-то ти, та да изкажа следното. подават се данните на данновите пинове, настройват се ереса и ч/з пиновете и тогава се вдига енеибъл и се сваля. освен това е мн важно времето му на задържане в единица, както и времето между импулсите, т.е. времето между командите. има си критични минимуми


Сря Юни 23, 2010 9:55 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение 
Cekins, страница 8 от дейташийта.


Прикачени файлове:
ampire.png
ampire.png [ 21.97 KiB | Прегледано 2204 пъти ]
Сря Юни 23, 2010 5:22 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 17 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

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


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

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