LCD display documentatie
Ik vind op jullie website bijna niets van documentatie terug over het LCD-scherm, enkel in http://www.dwengo.org/nl/tutorials/lcd wordt er iets over de LCD gezegd. Je zou op zijn minst een link moeten maken naar het datasheet van het LCD-scherm.
Hallo Jeroen
Bedankt om dit te melden, de specificaties van het LCD-display zijn inderdaad niet vermeld op de site, we maken dit snel in orde. Het LCD-display is een standaard HD44780-gebaseerd 16x2 karakterdisplay met achtergrondverlichting. Dit is een van de meest gebruikte displays voor allerlei projecten op het internet. De pinout van deze displays is ook "gestandaardiseerd":
1 Vcc
2 GND
3 V0 Contrast adjustment
4 RS Register select: low = instruction, high = data
5 R/W low = write, high = read
6 E Enable (active high)
7 DB0 Data-bus bit 0 (not used in 4-bit mode)
8 DB1 Data-bus bit 1 (not used in 4-bit mode)
9 DB2 Data-bus bit 2 (not used in 4-bit mode)
10 DB3 Data-bus bit 3 (not used in 4-bit mode)
11 DB4 Data-bus bit 4
12 DB5 Data-bus bit 5
13 DB6 Data-bus bit 6
14 DB7 Data-bus bit 7
15 LED+ Positive backlight supply (if used)
16 LED- Negative backlight supply (if used)
Om het voor jullie gemakkelijker te maken, hebben we de bibliotheek "lcd.h" geschreven die ervoor zorgt dat de diverse signalen reeds met de correcte timing worden aangestuurd. Tekst op het display plaatsen is daardoor zeer eenvoudig geworden via enkele intuïtieve functies, zoals in de lcd-tutorial wordt uitgelegd.
We zijn er ons van bewust dat de delays in de bibliotheek van het LCD-scherm erg conservatief zijn. Momenteel zijn we aan het werken aan een vernieuwde, handige bibliotheek voor het Dwengo-bord. De bibliotheek voor het LCD-scherm heeft hierbij hoogste prioriteit.
De fouten in de commentaar van de LCD-bibliotheek zijn ontstaan bij de overgang van het oude bord naar de huidige versie van het Dwengo-bord. Hoewel deze bibliotheek de gebruiker van de juiste functionaliteit voorziet (het tonen van karakters, tekst en getallen op het scherm) is er gekozen om met een nieuwe bibliotheek te beginnen met beter gekozen functies en striktere timings. De oude bibliotheek (met conservatieve delays en fouten in de commentaar) werd toch online gezet om gebruikers de mogelijkheid te geven nu al het LCD-scherm te gebruiken. Niettemin heeft het LCD-scherm vrij lange delays nodig om te kunnen werken.
Wat betreft de informatie over de timings van het LCD-scherm kan je je baseren op de informatie die er beschikbaar is over HD44780 compatibele LCD-schermen zoals de datasheet
van de HD44780 display controller.
Leuk dat je zelf een alternatieve LCD-bibliotheek wil schrijven op basis van timer-interrupts! Voor toepassingen waarbij snelheid te belangrijk is even op die LCD te wachten, is dat zeker interessant ... Veel succes alvast en laat ons weten of het gelukt is!
In de datasheet staat dat wanneer RS=0 en R/W= 1, de 'busy flag' rechtstreeks wordt uitgevoerd naar DB7 (die dan als output staat geschakeld). De 'busy flag' is 1 wanneer de HD44780 bezig is, en wordt daarna laag. Volgens de datasheet is de uitgangstrap van poort D een push-pull trap, en zou dus zowel actief omhoog als omlaag moeten kunnen trekken. De LEDs vereisen dat de display-driver een kleine 10mA moet kunnen leveren om de pin hoog te kunnen trekken. Ik vind in de datasheet echter niet terug wat de maximale stroom is die deze push-pull trap kan leveren. We hebben wel al gemerkt dat het display soms de LEDs doet branden als het display niet correct geinitialiseerd wordt, en de driver dus wel degelijk in staat is de uitgang hoog te trekken. In principe zou het dus moeten werken, maar we hebben dit zelf nog niet getest, dus we kunnen dit niet garanderen.
In het andere geval zul je inderdaad JP3-1 moeten verwijderen. Maar doordat we de LEDs in 2 groepen hebben opgesplitst, zal je hierdoor dus nog steeds 4 leds kunnen gebruiken.
Een interrupt gestuurde LCD-display aansturing kan er inderdaad voor zorgen dat de PIC minder cycli verliest bij het communiceren met het display. Niet iedereen zal dit echter wensen, bijvoorbeeld als men de timer-interrupts reeds in gebruik heeft voor andere doeleinden en de rekentijd van de PIC verder voldoende is. Maar voor andere toepassingen is dit zeker en vast een prima idee!
Hallo Jeroen
Dan zal het inderdaad niet lukken met de LEDs ingeschakeld. Gelukkig kunnen de LEDs dus uitgeschakeld worden via jumpers. Bij het ontwerpen van een dergelijk bordje, moet je altijd afwegingen maken tussen complexiteit, veelzijdigheid en kostprijs.
Over een rode LED staat normaalgezien een spanning van ongeveer 1.5V. Dat wil zeggen dat er over de weerstand nog een spanning van pakweg 1V staat. Gezien de weerstand 470 ohm is, betekent dit dat de display-uitgangstrap in staat is van pakweg 2mA (1/470) te leveren. Dit is voldoende om een led reeds zichtbaar te laten oplichten.

Your shopping cart
Ik zoek eigenlijk nog informatie over de timing van het LCD-scherm. In jullie lcd.c staan bijvoorbeeld een heleboel lange delays. Ten eerste, zijn die echt nodig; ten tweede waarom zijn bijna alle delays in lcd.c fout?
Bijvoorbeeld lijn 91:
Delay1KTCYx(25); // TCx = 200ns, wait 4 ms
Dit moet zijn:
Delay1KTCYx(25); // TCY = 83.3ns, wait 2.08ms
Ofwel:
Delay1KTCYx(48); // TCY = 83.3ns, wait 4ms
En zelfs als je een kloksnelheid aanneemt van 20MHz is het nog fout, want dan zou het moeten zijn:
Delay1KTCYx(25); // TCY = 200ns, wait 5 ms