Sida 1 av 1
Grafisk display med t6963 styrchip
Postat: 27 december 2006, 20:46:27
av mullemeck
Hej!
Sitter och försöker få liv i en DMF5005N display, 240x64 pixlars grafisk display.
Styrchipet är t6963 och den styrande processonr en mega32
När displayen startas blir den helt svart, trots många försök har jag inte lyckats få den att reagera, är ganska säker på att
jag skickar rätt kommando för att initiera den och skriva till den. Då återstår bara mina rutiner för att skicka data och kommandon till den.
i nuläget ser de ut som följande
Kod: Markera allt
oid senddata(uint8_t data){
while(((getstatus() & 0x3)) != 0x3);
// Dataport output
DATADDR = 0xff;
CTRPORT = _BV(WR)|_BV(RD)|_BV(CE)|_BV(RST);
delay(100);
DATAPORT = data;
delay(100);
CTRPORT &= ~(_BV(CE)|_BV(WR));
delay(100);
CTRPORT |= (_BV(CE)|_BV(WR));
}
void sendcommand(uint8_t command){
while(((getstatus() & 0x3)) != 0x3);
// Dataport output
DATADDR = 0xff;
CTRPORT = _BV(WR)|_BV(RD)|_BV(CE)|_BV(RST)|_BV(CD);
delay(100);
DATAPORT = command;
delay(100);
CTRPORT &= ~(_BV(CE)|_BV(WR));
delay(100);
CTRPORT |= (_BV(CE)|_BV(WR));
}
Status check verkar funka för den kommer förbi det steget med tillåten statuskod.
CTRPORT är definerad till PORTA , DATAPORT till PORTC osv.
Delay rutinen väntar i ca 0,5ms
Nån som har några tips och ideer?
datablad för displayen
http://www.gaw.ru/pdf/lcd/lcm/Optrex/graf/5005aae.pdf
Omfatande pdf om hur man ska styra den
http://www.optrex.com/pdf/Dmf5000_full.pdf
datablad för styrchippet
http://www.lll.lu/~edward/edward/mcs51/t6963/t6963c.pdf
/mullemeck
Postat: 27 december 2006, 23:25:12
av sodjan
Jag har fungerande kod till PIC som "ritar" denna bild :
http://www.tradera.com/auction/aid_31443398
Jag kan skicka den om det är intressant (zippad ASM fil)..
Rent spontant så ser din kod väldigt liten ut, det var en hel
del inställningar som skulle göras innan det kommer något
på skärmen...
Jag använde PDF'erna här :
http://www.skippari.net/lcd/t6963c_data.html
Slutligen är det dåligt att posta så risigt kommenterad kod !
Vad är det du *TROR* att din kod gör ??
Postat: 28 december 2006, 01:18:10
av mullemeck
Hej!
Ber om ursäkt för den dåligt kommenterade koden dålig vana jag har att aldrig kommentera.
Ja självklart behövs det mer initieringskod men den använder ju dessa två funktioner för att skicka data och commando.
Hade varit snällt ifall du hade velat skicka den, är dock inte flytande i pic assembler men kan nog läsa ut en del.
email:
mullemeck@gmail.com
Postar hela init koden jag kör, med mer kommentarer denna gången
Kod: Markera allt
void lcd_init(){
DATADDR = 0; //set pins Input
DATAPORT = 0;
CTRDDR = _BV(WR)|_BV(RD)|_BV(CE)|_BV(CD)|_BV(RST); // Set control pins to output
CTRPORT = _BV(WR)|_BV(RD)|_BV(CE)|_BV(CD)|_BV(RST); //all hitgh
// Puls reset
CTRPORT &= ~_BV(RST); // pull reset low
delay_ms(100); // wait
CTRPORT |= _BV(RST); // set reset high
delay_ms(10); // wait
sendcommand(0x81); //send or mode
senddata(0x00); //
senddata(0x00); //
sendcommand(0x42); //send 0x0000 as graphics home
senddata(0x1E); //
senddata(0x00); //
sendcommand(0x43); //send 0x001E as graphics area
sendcommand(0x98); //Send graphic on
}
uint8_t getstatus(){
static uint8_t tmp;
DATADDR = 0; //Dataport to input
CTRPORT = (_BV(WR)|_BV(CD)|_BV(RST)|_BV(CE)); // Set WR, CD,Rst and CE high. RW low
delay(500); // Wait a while
CTRPORT &= ~(_BV(CE)); // set Ce low
delay(5000); // wait a while
tmp = DATAPIN; // Read dataport
CTRPORT |= (_BV(CE)); // CE high
return tmp; // return value
}
void senddata(uint8_t data){
while(((getstatus() & 0x3)) != 0x3); // check status
DATADDR = 0xff; // set dataport to output
DATAPORT = data; // Set data on port
CTRPORT = _BV(RD)|_BV(CE)|_BV(RST); // set RD, CE and RST high, CD and WR low
delay(100); // Wait a while
CTRPORT &= ~(_BV(CE)); // set CE low
delay(100); // wait a while
CTRPORT |= _BV(CE); // set ce high
DATADDR = 0x00; // reset dataport to input
}
void sendcommand(uint8_t command){
while(((getstatus() & 0x3)) != 0x3); // Check status
DATADDR = 0xff; // Dataport output
DATAPORT = command; // set data on port
CTRPORT = _BV(RD)|_BV(CE)|_BV(RST)|_BV(CD); // set RD, CE , CD and RST high, WR low
delay(100); // Wait a while
CTRPORT &= ~(_BV(CE)); // set CE low
delay(100); // wait a while
CTRPORT |= (_BV(CE)); // set CE high
DATADDR = 0x00; // Reset dataport to input
}
Postat: 28 december 2006, 15:25:55
av sodjan
OK.
Kod mailat.
Jag vt inte hur mycket det hjälper, den är inte "uppstädad", och den skrevs
med PDF filerna från sidan jag länkade till i ena handen...
En annan detalj är att eftersom man alltid läser status-flaggan från LCDn
så behöver man i princip inga extra delays.
Sen ser jagt inget i din kod som faktiskt skriver något till LCD ?
Jag ser bara initieringen. Vad är det du förväntar dig ska hända ?
Postat: 28 december 2006, 16:05:17
av mullemeck
Det jag förväntar mig är att det ska visas en massa skräp från ram-minnet på displayen. I pdfen du länkade till står det så ialla fall.
Har även försökt skriva en del till adress 0 i minnet men inget händer på displayen.
Har tyvärr inte tillgång till nåt oscilloskop där jag sitter nu så kan inte riktigt kolla att alla pinnar gör som jag tror de gör, har dubbelkollat kopplingarna och mätt över alla sladdar.
Ska granska din kod och se om jag hittar nått jag glömt göra.
Postat: 28 december 2006, 17:07:21
av sodjan
OK, jag minns inte hur min såg ut, men det kanske var något skräp där...
Det är nog bara "klassisk" felsökning som gäller...

Postat: 2 januari 2007, 21:57:49
av mullemeck
Äntligen hittat det lilla felet som ställt till med allt, det var inte koden utan hårdvaran. Hade glömt stänga av Jtag pinnen på min mega32 så en av mina datapinnar var låg hela tiden.
Sånt litet störigt fel som man alltid glömmer.
Postat: 2 januari 2007, 22:11:23
av bengt-re
Skriva asm utan att kommentera..... Då måtte man ha extremt bra minne... Jag brukar glömma vad jag gjorde i början av programmet innan jag har skrivit klart det.....

Postat: 2 januari 2007, 22:13:15
av mullemeck
jobbiga är ju att det är en fuse-bit man ska ändra för att stänga av jtagen, minns jag nån gång tidigare suttit många timmar med exakt samma fel.