Sida 1 av 1
Adresseringproblem KS0108
Postat: 18 januari 2006, 21:47:11
av Daniel Ahlin
Jag har problem att adressera kolumner på min ks0108. Adresser mellan 0x10 och 0x30 funkar inte övriga går utmärkt att sätta.
Allt annat fungerar, låter LCDn själva stega upp adressen genom att skriva en byte i taget så fungerar det.
När jag skickar data till displayen fungerar alla databits. Jag kan alltså fylla displayen med en korrekt bild om jag låter adresseringen skötas internt.
Postat: 19 januari 2006, 00:31:49
av sodjan
Du lär inte få så många vettiga svar, eftersom du inte säger
ett smack om vad du gör...
Postat: 19 januari 2006, 14:19:17
av Daniel Ahlin
För den nyfikne:
Jag bygger en instrumentpanel till en bil mha en atmega128, en grafisk display 128x64pixel, flashläsare, en modifierad MegaSquirt (Elektronisk insprutning) och en serie anslutning för GPS.
Lite givare och G-mätare ska in också.
Eftersom jag inte kan adressera som jag vill blir uppdateringen väldigt långsam.
Men just nu är det bara en ren labbkoppling på ett STK501 kort. PORTB är data och PORTC är kontrollbuss
Postat: 19 januari 2006, 14:28:14
av sodjan
Jag tänkte inte på *vad* du använder den till, utan *hur*
du kör den. Alltså programkod eller liknande...
Spontant (utan att veta mer än det du har beskrivit) så gissar jag
att du gör något som inte följer databladet.
Postat: 19 januari 2006, 14:52:22
av speakman
Välkommen till forumet, och håll oss uppdaterad om projektet!
Har själv en MegaSquirt som ska appliceras såsmåningom.

Har själv ritat ihop ett litet kort med en 4x20 LCD-skärm, lite knappar och en serieport som jag tänkt kopplat till MS.
Har dock inte lämnat planeringsstadiet än.
Mvh
speakman
Postat: 19 januari 2006, 15:48:38
av Fagge
Hur menar du med 0x10 och 0x30?.
Displayen har ju 7 vertikala adresser. 0 = högst upp & 7= längst ner, Menar du att du inte kan hoppa ner / upp till dom 3 första översta kolumnerna?.
Postat: 19 januari 2006, 15:48:58
av björn
Måste hålla med sodjan här, lite mer information om HUR du gör och kanske lite kod som man kan kolla på. Ger nog lite fler svar/förslag på ditt problem då.
Postat: 19 januari 2006, 17:56:40
av Daniel Ahlin
Aha, tyckte att själva projektet var ganska irrelevant för problemet.
Här kommer koden
void lcdWrite(char data,char rs, char rw, char cs)
{
PORTB=RST+cs+rs+rw;
_delay_loop_2(5);
PORTB=RST+E+rs+rw+cs;
PORTC=data;
_delay_loop_2(5);
PORTB=RST+cs+rs+rw;
_delay_loop_2(5);
}
void lcdOn()
{
lcdWrite(63,0,0,CHIP1);
lcdWrite(63,0,0,CHIP2);
}
void lcdSetStartLine(char startLine)
{
lcdWrite(192+startLine,0,0,CHIP1);
lcdWrite(192+startLine,0,0,CHIP2);
}
void lcdSetAdress(char row, char col)
{
lcdMemoryRow = row;
lcdMemoryCol = col;
if(col>=64)
{
col=col-64;
chip=CHIP2;
} else {
chip=CHIP1;
}
lcdWrite(184|row,0,0,chip);
lcdWrite(64|col,0,0,chip);
}
int main()
{
DDRB = 0xFF;
DDRC = 0xFF;
lcdOn();
lcdSetStartLine(0);
lcdSetAdress(0,20);
lcdWrite(0xFF,RS,0,chip) //chip är global och sätts i lcdSetAdress
return 0;
}
Men jag har även testat att bara skriva värdena mata ut instruktionerna direkt på portarna och det ger exakt samma problem.
Fagge, det är kolumner 64st som är problemet. Adresseringen 0-15(decimalt) funkar bra skriver man 16 så hamnar man på 48. Adresserar man däremot 48 så hamnar man på 48
Postat: 19 januari 2006, 19:07:51
av Fagge
Aha du använder page adresseringen!?.
Men varför gör du det i så fall?, själv så använde jag dessa 8st kolumnerna "adresserna" & när jag skrev datat, så skrev man 8pixlar brätt med en gång!. Så varför krabba med page funktionerna & var är fördelen med dessa?. Har du simulerat din kod "funktionerna" i ks0108 simulatorn som finns på någon hemsida!?.
Postat: 19 januari 2006, 22:42:19
av Daniel Ahlin
Fagge: Vi har nog lite olika begepp i våra datablad.
Page adress i mitt datablad är mellan 0 och 7
Kolumnadress är mellan 0 och 63, den adressen stegas upp ett steg varje gång man skriver och det är den jag har problem med.
Använder man inte kolumnadresseingingen får man i värsta fall skriva 63byte till displayen för att ändra en pixel.
Eftersom jag bygger ett realtidssystem föredrar jag om det tar lika lång tid att skicka en byte till displayen oavsätt var den ska vara.
Vid varje uppdatering kommer det endast skilja ett fåtal byte så jag vill inte uppdatera hela displayen varje gång.
Postat: 20 januari 2006, 09:02:37
av Fagge
Ahhhh ursäkta mig, jag förväxlade rader & kolumner.
Så kör ju jag när det bara är ett par siffror som ska ändras & det funkar fint för mig!.
Har du simulerat dina signaler i den här simulatorn?.
http://www.geocities.com/dinceraydin/dj ... cdsim.html
Postat: 21 januari 2006, 16:32:27
av Daniel Ahlin
Det fungerar i simulatorn och det fungerar om man kör det från parallellporten i PC:n (samma mjukvara)