hallo,
ben nu bezig om m'n grafische display met ks0108 controller aan te sturen. In principe is het sturen van een instructie of data geen probleem, ik kan gewoon een puntje aan of uit zetten op iedere postitie mbv delays. Het probleem ontstaat zodra ik iets probeer te lezen van de controller.
Weet iemand of je het display ook staps gewijs met de debugger aan kan sturen of moeten de signalen een minimale frequentie hebben?
Als ik bijvoorbeeld controller 1 in reset hou (RST = LOW, CS1 = TRUE, CS2 = FALSE) en dan eerst RW = TRUE en dan RS = FALSE en dan E = TRUE doe dan zou volgens de datasheet DB4 hoog moeten worden ten teken dat de controller in reset is. Dit krijg ik dus niet voor mekaar. Klopt dit of maak ik ergens een fout?
Ik wil nl. graag data uit het RAM kunnen lezen zodat ik niet een hele display map hoef bij te houden als er 1 pixel veranderd.
Heeft iemand misschien een gedeeltelijke code voor het uitlezen van een byte uit het interne RAM en/of busyflag.
Ik maak overigens gebruik van een 3,3V controller en display op 4,5V heeft iemand hier ervaring mee misschien zit hier nog een klein probleem, maar verwacht ik eigenlijk niet aangezien het met delays goed werkt.
RES
RES
Ik weet alleen dat je een dummybyte eerst moet lezen voordat je de displaydata eruit kan lezen.
Het handigste is als je 1kBRAM beschikbaar hebt, dan daarin werken, dan hoef je alleen data te schrijven naar de display RAM. Schrijven en lezen of lezen en schrijven kost 2x zoveel tijd (2usec), is 1usec (1000nsec) per cyclus.
Als je snellere dingen wilt doen, zul je PLED/OLED displays moeten gaan gebruiken, LCD is traag (150-200 msec responstijd.)
Het gaat me niet zozeer om de snelheid als wel dat ik niet om 1 puntje te veranderen het hele display wil updaten. Dat van die dummy byte had ik ook al gelezen, maar ook bij 2 of 3 read actie's komt er niks op de data bus te staan.
RES
RES
Als je het goed wilt doen moet je telkens die busy flag pollen, met delays moet je zeker weten of het lang genoeg is.
Hoe stuur je dit display aan? Met een AVR of PIC? Ik werk alleen met de AVR.
[Bericht gewijzigd door RES op (12%)]
Ik stuur het display aan met een 8051 controller. Ik had eerste de kode geschreven met pollen van de busy flag en dit leek ook goed te werken. Toen ik de code wilde uitbereiden met het inlezen van de data kwam ik erachter dat het inlezen van de data (data of busyflag) niet goed werkte. Om te kijken waar het probleem zit heb ik toen een paar regels code gemaakt die de controller in reset houd en dan de status opvraagt (á la busyflag). Kwam er toen achter dat er geen data werd uitgestuurt en vermoed dat er in de volgorde van E, RS en RW iets mis is, of tussen het omschakelen van push-pull naar open drain.
RES
RES
Misschien heb je hier wat aan. Zo werkt het met een AVR.
pollBF: clr temp ;PORTD all inputs
out DDRD, temp
cbi PORTC, DI ;D/I lo (intruction)
sbi PORTC, RW ;R/W hi (read mode)
nop
nop
loopBF: sbi PORTC, E ;E hi
nop ;tDDR < 320 ns
cbi PORTC, E ;E lo
sbic PIND, BF ;poll Busy Flag
rjmp loopBF
ser temp ;and ->
out DDRD, temp ; PORTD all outputs
retIk heb er ook een tijd mee zitten etteren. Het blijft lastig zo'n grafisch display aansturen.
bfcheck:
push af ; save AF
ld c,cwadr
ld d,paincout
out (c),d ; make A input,C output,B output
ld d,read
out (c),d ; set RW pin for reading from LCD
ld d,command
out (c),d ; select the instruction register
check_again:
ld d,enable
out (c),d ; enable the LCD
in a,(paadr) ; read from LCD
ld d,disable
out (c),d ; disable the LCD
rlca ; rotate A left through C flag to see if the busy flag is set
jp c,check_again ; if busy check it again,else continue
ld d,pandcout
out (c),d ; set all ports to output mode
pop af ; restore AF
retZo werkt het voor een 8255.
http://www.geocities.com/dinceraydin/files/hello_asm.htm
Na een paar avonden ploeteren ben ik erachter gekomen dat ik de poorten op de verkeerde manier als input definieerde waardoor het dus niet ging werken. Na een geniale ingeving om maar weer bij 0 te beginnnen heeft er voor gezorgt dat het raam nog heel is en het display nu ook data terug stuurt 
code die ik nu gebruik voor een C8051F320 voor het inlezen van data (busyflag of ram data):
E = TRUE;
for(x=0;x<2;x++);
E = FALSE;
P0MDOUT = 0x00;
P0 = 0xFF;
RS = FALSE;
RW = TRUE;
E = TRUE;
while(P0_7 == TRUE);
E = FALSE;
P0MDOUT = 0xFF;
P0 = 0x00;