Inhoudsopgave:

3-draads HD44780 LCD voor minder dan 1 dollar - Ajarnpa
3-draads HD44780 LCD voor minder dan 1 dollar - Ajarnpa

Video: 3-draads HD44780 LCD voor minder dan 1 dollar - Ajarnpa

Video: 3-draads HD44780 LCD voor minder dan 1 dollar - Ajarnpa
Video: BERNINA Overlocker L 460 / L 450: inrijgen en naaien, 3-draads overlock 2024, Juli-
Anonim
3-draads HD44780 LCD voor minder dan 1 dollar
3-draads HD44780 LCD voor minder dan 1 dollar

In deze instructible zullen we leren hoe we een LCD op basis van de HD44780-chipset kunnen aansluiten op de SPI-bus en deze kunnen aansturen met slechts 3 draden voor minder dan $ 1. Hoewel ik me in deze tutorial zal concentreren op het alfanumerieke display van de HD44780, zal hetzelfde principe vrijwel hetzelfde werken voor elk ander LCD-scherm dat een 8-bits parallelle databus gebruikt, en het kan heel gemakkelijk worden aangepast aan schermen met 16-bits databussen. De op HD44780 (en compatibele) alfanumerieke displays zijn meestal verkrijgbaar in configuraties van 16x2 (2 regels bestaande uit 16 tekens) en 20x4, maar zijn in veel meer vormen te vinden. Het meest 'gecompliceerde' scherm zou een 40x4 scherm zijn, dit soort scherm is speciaal omdat het 2 HD44780-controllers heeft, één voor de bovenste twee rijen en één voor de onderste twee rijen. Sommige grafische LCD's hebben ook twee controllers. De HD44780 LCD's zijn geweldig, ze zijn erg goedkoop, leesbaar en vrij gemakkelijk om mee te werken. Maar ze hebben ook enkele nadelen, deze schermen nemen veel I/O-pinnen in beslag wanneer ze op de Arduino zijn aangesloten. In eenvoudige projecten is dit geen probleem, maar wanneer projecten groot worden, met veel IO, of waar bepaalde pinnen nodig zijn voor dingen zoals een analoge uitlezing of PWM, kan het feit dat deze LCD's minimaal 6 pinnen nodig hebben een probleem. Maar we kunnen dit probleem op een goedkope en interessante manier oplossen.

Stap 1: De componenten verkrijgen

Ik heb TaydaElectronics gebruikt voor de meeste componenten die ik in dit project heb gebruikt. Je kunt deze onderdelen ook op ebay krijgen, maar voor het gebruiksgemak koppel ik je aan Tayda. Boodschappenlijst2 - 74HC595 pakket DIP161 - Generieke mannelijke header - 2 pinnen. Dit is niet vereist, ik heb dit gebruikt als een manier om de achtergrondverlichting permanent uit te schakelen.3 - Keramische condensator - capaciteit 0,1 µF; spanning 50V1 - Elektrolytische condensator - capaciteit 10µF; spanning 35V1 - Keramische condensator - capaciteit 220pF; spanning 50V1 - NPN-transistor - onderdeel # PN2222A*1 - 1k Ω Weerstand1 - Trimmer Potentiometer - maximale weerstand 5kΩ1 - 470 Ω Weerstand* Bij een NPN-transistor blijft de achtergrondverlichting uit totdat deze softwarematig wordt ingeschakeld. Als u de achtergrondverlichting standaard ingeschakeld wilt hebben, gebruikt u een transistor van het PNP-type. Er moeten wel wijzigingen worden aangebracht in de code van de verstrekte bibliotheek. Het subtotaal voor deze lijst is $ 0,744. De pin-header is ook niet vereist, dus u kunt daar 15 cent besparen en het subtotaal is $ 0,6.

Stap 2: Ken uw hardware #1

Ken uw hardware #1
Ken uw hardware #1

Hier is een standaard pin uit een HD44780 LCD, deze lijkt ook erg op sommige grafische LCD's. De HD44780 kan in twee modi werken: 1. 4-bit-modus, waarbij elke byte die naar het LCD-scherm wordt verzonden, uit 2 4-bits delen bestaat. 2. 8-bit-modus, waarop we ons zullen concentreren. Het LCD-scherm heeft in totaal 16 pinnen, 3 besturingspinnen en 8 datapinnen: RS - Bepaalt of we een opdracht of gegevens naar het LCD-scherm willen sturen. Waar 'hoog' gegevens (een teken) betekent en 'laag' een commandobyte betekent. R/W - Met de HD44780-controller kunt u lezen uit zijn RAM. Als deze pin 'hoog' is, kunnen we gegevens van zijn datapinnen lezen. Als het 'laag' is, kunnen we gegevens naar het LCD-scherm schrijven. Hoewel de optie om van het LCD-scherm te lezen in sommige gevallen nuttig kan zijn, zullen we deze in deze tutorial niet bespreken en zullen we deze pin gewoon aarden om ervoor te zorgen dat deze altijd in de schrijfmodus staat. E - E is de 'Enable'-pin, deze pin wordt 'hoog' en vervolgens 'laag' geschakeld om de gegevens naar het RAM-geheugen te schrijven en deze uiteindelijk op het scherm weer te geven. DB0-7 - Dit zijn de gegevenspinnen. In 4-bits modus gebruiken we alleen de 4 hoge bits DB4-DB7, en in 8-bits modus worden ze allemaal gebruikt. VSS - Dit is de aardingspin. VCC - Dit is de voedingspin, het LCD-scherm loopt van een 5V-voeding, we kunnen het gemakkelijk van stroom voorzien via de +5v-pin van de Arduino. Vo - Dit is de pin waarmee je het contrastniveau voor het display kunt instellen, het vereist een potentiometer, normaal wordt een 5K Ohm-pot gebruikt. LED+ - Dit is de voedingsbron voor de achtergrondverlichting. Sommige LCD's hebben geen achtergrondverlichting en hebben slechts 14 pinnen. In de meeste gevallen vereist deze pin ook een +5v-verbinding. LED- - Dit is de grond voor de achtergrondverlichting.** Het is belangrijk om de datasheet van het beeldscherm te controleren of de PCB te inspecteren om te controleren op een achtergrondverlichtingsweerstand, de meeste LCD's hebben ze ingebouwd -in, in dat geval hoeft u alleen maar stroom op LED+ te zetten en op LED- te aarden. Maar in het geval dat je LCD geen ingebouwde weerstand voor de achtergrondverlichting heeft, is het belangrijk dat je er een toevoegt, anders verbruikt de achtergrondverlichting veel stroom en zal deze uiteindelijk doorbranden. In de meeste gevallen is de manier waarop dit LCD-scherm is aangesloten op de Arduino door het in 4-bits modus te gebruiken en de R/W-pin te aarden. Op deze manier gebruiken we pinnen RS, E en DB4-DB7. Het draaien in 4-bits modus heeft nog een klein nadeel: het duurt twee keer zo lang om gegevens naar het scherm te schrijven als in een 8-bits configuratie. De LCD heeft een 'settling' tijd van 37 microseconden, dit betekent dat je 37 microseconden moet wachten voordat je de volgende opdracht of databyte naar de LCD stuurt. Aangezien we in 4-bits modus twee keer gegevens moeten verzenden voor elke byte, loopt de totale tijd die nodig is om een enkele byte te schrijven op tot 74 microseconden. Dit is nog steeds snel genoeg, maar ik wilde dat mijn ontwerp de best mogelijke resultaten zou opleveren. De oplossing voor ons probleem met het aantal gebruikte pinnen ligt in een serieel naar parallel-converter…

Stap 3: Ken uw hardware #2

Ken uw hardware #2
Ken uw hardware #2

Wat we zullen doen, is een adapter bouwen die een serieel type communicatie uit de Arduino nodig heeft en de gegevens omzet in een parallelle uitvoer die naar ons LCD-scherm kan worden gevoerd. Daarin komt de 74HC595-chip. Dit is een zeer goedkoop en eenvoudig te bedienen schuifregister. In wezen neemt het een klok en datasignalen op die het gebruikt om een interne 8-bits buffer te vullen met de 8 laatste bits die 'ingeklokt' waren. Zodra de 'Latch' (ST_CP) pin 'high' is gebracht, verplaatst hij deze bits naar zijn 8 uitgangen. De 595 heeft een erg leuke functie, hij heeft een seriële data-uitgangspin (Q7'), deze pin kan worden gebruikt om 2 of meer 595's aan elkaar te koppelen om seriële naar parallelle adapters te vormen die 16 of meer bits breed zijn. Voor dit project hebben we 2 van deze chips nodig. Het schema kan ook worden aangepast om te werken met een enkele 595 in 4-bits modus, maar dit wordt niet behandeld in deze tutorial.

Stap 4: Alles aansluiten

Alles aansluiten
Alles aansluiten

Nu we weten hoe onze hardware werkt, kunnen we alles aansluiten. In het schema zien we 2 595 chips aan elkaar gekoppeld om een 16 bit parallelle uitgang te vormen. De onderste chip is eigenlijk de belangrijkste en de bovenste is er in serie aan geketend. Wat we hier zien, is dat de onderste 595 de datapinnen van het LCD-scherm aanstuurt in een 8-bits configuratie, de bovenste chip regelt het RS-signaal en de achtergrondverlichting door een transistor aan of uit te zetten. Onthoud de *opmerking over de LCD-achtergrondverlichting op pagina Ken uw hardware #1, als uw LCD geen achtergrondverlichtingsweerstand heeft, vergeet er dan niet een toe te voegen aan uw circuit. In mijn geval heb ik de LCD's al met een ingebouwde weerstand geleverd, dus deze stap heb ik overgeslagen. Het contrast wordt toegepast via een 5K Ohm-pot, één pin gaat naar GND, de tweede gaat naar VCC en de wiper naar de Vo-pin op het LCD-scherm. De condensatoren die worden gebruikt op de LCD's en de VCC-lijnen van de 595 zijn ontkoppelcondensatoren, ze zijn er om interferentie te voorkomen. Ze zijn geen must als u op een breadboard werkt, maar moeten worden gebruikt als u uw eigen versie van dit circuit bouwt om buiten "labomstandigheden" te gebruiken. R5 en C9 in die zeer specifieke volgorde creëren een RC-vertraging, die ervoor zorgt dat de gegevens in de uitgangen van de 595 de tijd hebben om te stabiliseren voordat de Enable-pin op het LCD-scherm op 'hoog' wordt gezet en de gegevens leest. Q7' van de onderste 595 gaat in de seriële data-ingang van de 595 aan de bovenkant, hierdoor ontstaat een daisy chain van 595s en dus een 16 bit interface. Bedrading naar de Arduino is eenvoudig. We gebruiken een 3-draads configuratie, met behulp van Arduino's SPI-pinnen. Dit zorgt voor zeer snelle gegevensoverdracht, het verzenden van 2 bytes naar het LCD duurt meestal ongeveer 8 microseconden. Dit is erg snel, en het is eigenlijk veel sneller dan de tijd die het LCD nodig heeft om de gegevens te verwerken, dus er is een vertraging van 30 microseconden nodig tussen elke schrijfbewerking. Een heel groot voordeel van het gebruik van SPI is dat pinnen D11 en D13 worden gedeeld met andere SPI-apparaten. Dit betekent dat als je al een ander onderdeel hebt dat SPI gebruikt, zoals een versnellingsmeter, deze oplossing slechts één extra pin gebruikt voor het activeringssignaal. Op de volgende pagina zien we het resultaat. Ik heb een rugzak gebouwd op een perfboard en het werkt tot nu toe heel goed voor mij.

Stap 5: Het resultaat + bibliotheek

Het resultaat + bibliotheek
Het resultaat + bibliotheek
Het resultaat + bibliotheek
Het resultaat + bibliotheek
Het resultaat + bibliotheek
Het resultaat + bibliotheek
Het resultaat + bibliotheek
Het resultaat + bibliotheek

"Een foto zegt meer dan duizend woorden", ik ben het eens met deze stelling, dus hier zijn enkele foto's van het eindresultaat van dit project. Dit zijn afbeeldingen van het voltooide product, de Fritzing PCB-weergave is de perfboard-lay-out die ik heb gebruikt om mijn rugzak te bouwen. Misschien vind je het handig als je er zelf een wilt bouwen. Ik vond het zo leuk dat ik een PCB ontwierp met DipTrace en een batch van 10 PCB's bestelde. Ik heb 2 of 3 eenheden voor mezelf nodig, maar zal de rest beschikbaar stellen voor een symbolische prijs wanneer ik ze ontvang. Dus als iemand interesse heeft, laat het me weten. * Bewerken: de PCB's zijn er en ze werken. Hier is de volledige fotogalerij voor dit project, inclusief de eigenlijke PCB's. https://imgur.com/a/mUkpw#0 Natuurlijk ben ik het belangrijkste niet vergeten, een bibliotheek om dit circuit mee te gebruiken. Het is compatibel met de LiquidCrystal-bibliotheek die bij de Arduino IDE wordt geleverd, zodat u eenvoudig de declaraties bovenaan uw schets kunt vervangen en niets anders in uw schets hoeft te veranderen. Er is ook een voorbeeldschets die laat zien hoe elke functie in de bibliotheek werkt, dus bekijk het eens.

Aanbevolen: