Hallo,
Ik heb een paar maanden geleden een 20x4 LCD schermpje gekocht uit China, via een samenkoopactie van LEDSEE Electronics. Er zit een HD44780-compatible controler op, maar welke het precies is weet ik niet want achterop het schermpje zit precies geen chip (wel 5 zwarte 'bolletjes') . Op de site van de samenkoopactie staat dat het een KS0066U is, maar ik ben niet zeker of dat klopt. Het aansturen van het schermpje werkt bijna perfect, maar ik heb toch nog een probleem bij het lezen van de 'Busy Flag'.
Ik wil het schermpje aansturen met een PIC, ik heb daarvoor wat code in assembly geschreven die het perfect doet op een oud 16x1 LCD schermpje dat ik uit een fax heb gehaald. De code is zo geschreven dat er voor elk nieuw commando/character dat naar het schermpje wordt verzonden gecontroleerd wordt of het schermpje al klaar is met de vorige bewerking door de BF te controleren.
Als ik het 20x4 schermpje aansluit op de PIC, en BF-checking gebruik, dan komen er allemaal vreemde tekens op het schermpje. De tekens lijken wel op Chineese tekens, maar het zouden ook gewoon random custom characters kunnen zijn. Als ik in plaats van BF-checking gewoon een delay van ongeveer 2ms na elk commando zet, dan werkt het schermpje perfect. Die oplossing is echter veel te traag, dus ik zou BF-checking toch graag aan de praat krijgen met dit schermpje.
Om het debuggen wat makkelijker te maken heb ik een simpel C-programma voor Linux geschreven dat het schermpje aanstuurt zoals de PIC dat zou doen. Hiermee heb ik dezelfde resultaten als met de PIC.
Wat er precies gebeurt in het programma is dit:
- Het schermpje wordt geïnitialiseerd op 4 bits, 2 rijen en 5x7 dots-modus.
- Er worden een paar characters en commando's verzonden om te testen.
Dit laatste gebeurt zo:
Als het programma niets doet, dan is de RW-lijn laag (staat dus op schrijven), de RS-lijn hoog (staat dus op data) en de EN-lijn laag.
Wanneer ik dus een character naar schermpje wil sturen, dan moet ik enkel de EN-lijn hoog maken, eerst de hoogste 4 databits op de datalijnen zetten, de EN-lijn terug laag maken, even wachten en dan weer hoog maken, de laagste 4 databits op de datalijnen zetten en ten slotte de EN-lijn weer laag maken.
Wanneer ik een commando naar het schermpje wil sturen, dan moet ik eerst de RS-lijn laag maken en vervolgens, analoog aan hoe het werkt bij een character, de data naar het schermpje sturen. Hierna zet ik de RS-lijn terug hoog.
Dat werkt dus perfect als ik de BF niet controleer. Om de BF te controleren doe ik het volgende, voordat ik bovenstaande procedures toepas:
Ik zet de parallelle poort op lees-modus, ik maak de RS-lijn laag en de RW-lijn hoog (staat dus op lezen), vervolgens maak ik de EN-lijn hoog, ik wacht even en ik lees de bits in die op de parallelle poort staan, tenslotte maak ik de EN-lijn weer laag en maak ik de RW-lijn terug laag, de parrallele poort zet ik terug op schrijven en ik maak de RS-lijn weer hoog.
Wanneer ik nu, na het controleren van de BF, een character naar het schermpje stuur is dat nogal omzeep (hoewel een reeks van characters soms nog wel gedeeltelijk leesbaar is).
Ziet er iemand een fout in deze procedures, die dit soort van gedrag van het schermpje kunnen veroorzaken? Het zou toch mogelijk moeten zijn om de BF te controleren want als ik het schermpje aanstuur met bijvoorbeeld LCD4Linux en BF-checking aanzet, dan werkt het schermpje wel perfect.
Ik heb al geprobeerd om de delays die ik zet na het hoog/laag maken van de EN-lijn aan te passen naar verschillende waarden, maar dat heeft niet geholpen...
Ik heb een paar maanden geleden een 20x4 LCD schermpje gekocht uit China, via een samenkoopactie van LEDSEE Electronics. Er zit een HD44780-compatible controler op, maar welke het precies is weet ik niet want achterop het schermpje zit precies geen chip (wel 5 zwarte 'bolletjes') . Op de site van de samenkoopactie staat dat het een KS0066U is, maar ik ben niet zeker of dat klopt. Het aansturen van het schermpje werkt bijna perfect, maar ik heb toch nog een probleem bij het lezen van de 'Busy Flag'.
Ik wil het schermpje aansturen met een PIC, ik heb daarvoor wat code in assembly geschreven die het perfect doet op een oud 16x1 LCD schermpje dat ik uit een fax heb gehaald. De code is zo geschreven dat er voor elk nieuw commando/character dat naar het schermpje wordt verzonden gecontroleerd wordt of het schermpje al klaar is met de vorige bewerking door de BF te controleren.
Als ik het 20x4 schermpje aansluit op de PIC, en BF-checking gebruik, dan komen er allemaal vreemde tekens op het schermpje. De tekens lijken wel op Chineese tekens, maar het zouden ook gewoon random custom characters kunnen zijn. Als ik in plaats van BF-checking gewoon een delay van ongeveer 2ms na elk commando zet, dan werkt het schermpje perfect. Die oplossing is echter veel te traag, dus ik zou BF-checking toch graag aan de praat krijgen met dit schermpje.
Om het debuggen wat makkelijker te maken heb ik een simpel C-programma voor Linux geschreven dat het schermpje aanstuurt zoals de PIC dat zou doen. Hiermee heb ik dezelfde resultaten als met de PIC.
Wat er precies gebeurt in het programma is dit:
- Het schermpje wordt geïnitialiseerd op 4 bits, 2 rijen en 5x7 dots-modus.
- Er worden een paar characters en commando's verzonden om te testen.
Dit laatste gebeurt zo:
Als het programma niets doet, dan is de RW-lijn laag (staat dus op schrijven), de RS-lijn hoog (staat dus op data) en de EN-lijn laag.
Wanneer ik dus een character naar schermpje wil sturen, dan moet ik enkel de EN-lijn hoog maken, eerst de hoogste 4 databits op de datalijnen zetten, de EN-lijn terug laag maken, even wachten en dan weer hoog maken, de laagste 4 databits op de datalijnen zetten en ten slotte de EN-lijn weer laag maken.
Wanneer ik een commando naar het schermpje wil sturen, dan moet ik eerst de RS-lijn laag maken en vervolgens, analoog aan hoe het werkt bij een character, de data naar het schermpje sturen. Hierna zet ik de RS-lijn terug hoog.
Dat werkt dus perfect als ik de BF niet controleer. Om de BF te controleren doe ik het volgende, voordat ik bovenstaande procedures toepas:
Ik zet de parallelle poort op lees-modus, ik maak de RS-lijn laag en de RW-lijn hoog (staat dus op lezen), vervolgens maak ik de EN-lijn hoog, ik wacht even en ik lees de bits in die op de parallelle poort staan, tenslotte maak ik de EN-lijn weer laag en maak ik de RW-lijn terug laag, de parrallele poort zet ik terug op schrijven en ik maak de RS-lijn weer hoog.
Wanneer ik nu, na het controleren van de BF, een character naar het schermpje stuur is dat nogal omzeep (hoewel een reeks van characters soms nog wel gedeeltelijk leesbaar is).
Ziet er iemand een fout in deze procedures, die dit soort van gedrag van het schermpje kunnen veroorzaken? Het zou toch mogelijk moeten zijn om de BF te controleren want als ik het schermpje aanstuur met bijvoorbeeld LCD4Linux en BF-checking aanzet, dan werkt het schermpje wel perfect.
Ik heb al geprobeerd om de delays die ik zet na het hoog/laag maken van de EN-lijn aan te passen naar verschillende waarden, maar dat heeft niet geholpen...