Adresseringproblem KS0108
-
- Inlägg: 35
- Blev medlem: 18 januari 2006, 21:36:14
Adresseringproblem KS0108
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.
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.
-
- Inlägg: 35
- Blev medlem: 18 januari 2006, 21:36:14
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
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
-
- Inlägg: 35
- Blev medlem: 18 januari 2006, 21:36:14
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
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
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!?.
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!?.
-
- Inlägg: 35
- Blev medlem: 18 januari 2006, 21:36:14
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.
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.
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

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
-
- Inlägg: 35
- Blev medlem: 18 januari 2006, 21:36:14