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.

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.

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.

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
	ret

Ik 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
	ret

Zo 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;