Inhoudsopgave:

1602 LCD-toetsenbord Shield-module met I2C-rugzak - Ajarnpa
1602 LCD-toetsenbord Shield-module met I2C-rugzak - Ajarnpa

Video: 1602 LCD-toetsenbord Shield-module met I2C-rugzak - Ajarnpa

Video: 1602 LCD-toetsenbord Shield-module met I2C-rugzak - Ajarnpa
Video: Flappy Bird on Arduino 2024, Juli-
Anonim
1602 LCD-toetsenbordschermmodule met I2C-rugzak
1602 LCD-toetsenbordschermmodule met I2C-rugzak

Als onderdeel van een groter project wilde ik een LCD-scherm en een toetsenbord hebben om door enkele eenvoudige menu's te navigeren. Ik zal veel van de I/O-poorten op de Arduino voor andere taken gebruiken, dus ik wilde een I2C-interface voor het LCD-scherm. Dus kocht ik wat hardware, bestaande uit een 1602 LCD Keypad shield-module van DFRobot en een anonieme I2C seriële module voor LCD's. Ik wil deze gebruiken met een Arduino Nano. Toen ontdekte ik dat er een aantal uitdagingen zijn om deze componenten samen te laten werken - maar het is mogelijk. Dus ik wil mijn ervaring delen en misschien anderen helpen.

Deze foto is van het werkende breadboard, dat berichten op het LCD-scherm kan weergeven en toetsaanslagen kan identificeren. Het LCD-scherm wordt bestuurd via de I2C-interface, inclusief de LCD-achtergrondverlichting. De toetsaanslagen worden door de Arduino ontvangen op pin A0 (het kan elk van de analoge pinnen zijn, behalve A4 en A5 die zijn vastgebonden voor de I2C-interface).

Stap 1: Onderdelenbeschrijving - LCD-toetsenbordschermmodule

Onderdelenbeschrijving - LCD-toetsenbordschermmodule
Onderdelenbeschrijving - LCD-toetsenbordschermmodule

De LCD-toetsenbordafschermingsmodule bestaat uit een veelgebruikt 1602 LCD-scherm dat is gemonteerd op een printplaat die de toetsen bevat, en die een subset van de LCD-aansluitingen neemt en deze beschikbaar maakt voor de headerpinnen aan de onderkant van de printplaat. Ik begrijp dat dit bord bedoeld is om bovenop een Arduino Uno of iets dergelijks te worden gemonteerd en dat het de juiste pinlay-out biedt om in die omgeving te werken. Ik kocht deze module op Ebay van een leverancier in China. De header-pinnen aan de onderkant (toetsenbord) van het bord zijn meestal gelabeld, maar de pinnen aan de bovenkant, de LCD-interface, zijn niet gelabeld. De pinnen op het LCD-scherm zelf zijn echter gelabeld.

Stap 2: Onderdelenbeschrijving - I2C seriële module

Onderdelenbeschrijving - I2C seriële module
Onderdelenbeschrijving - I2C seriële module

De seriële module heeft de gebruikelijke 4-pins header voor I2C, en een set niet-gelabelde header-pinnen waarvan ik begrijp dat ze bedoeld zijn om rechtstreeks op de onderkant van de LCD-module aan te sluiten. Door de labels op het LCD-scherm te bestuderen, kon ik de functies van de pinnen op de seriële module identificeren.

Deze module is gebaseerd op de IC PCF8574T die het I2C-protocol beëindigt, heeft 3 pinnen voor adrescontrole (20 tot 27) en heeft 8 digitale input/output-pinnen P0 tot P7. Volgens het gegevensblad van de PCF8574T heeft elke I/O-pin een FET om hem naar de grond te trekken voor de LOW-status, en kan hij minimaal 20 ma zinken. In de hoge toestand heeft het een tijdelijke actieve pull-up en vervolgens een continue pull-up-stroom van ongeveer 0,1 mA.

Op deze module worden alle digitale I/O-pinnen, behalve P3, eenvoudig naar de header-pinnen gebracht (rechts op de foto). In het geval van P3 is deze verbonden met de basis van een transistor (zichtbaar op de foto rechtsboven net onder het label "LED"). De emitter van die transistor is verbonden met Vss (massa) en de collector is verbonden met header-pin 16, waar deze kan worden gebruikt om de LCD-achtergrondverlichting te regelen. Vanwege de transistor is de logische toestand omgekeerd ten opzichte van die welke wordt aangenomen in de softwarebibliotheek. Dat wil zeggen, de LCD-achtergrondverlichting is AAN wanneer de P3-pin laag is en UIT wanneer de P3-pin hoog is.

Het label op de transistor zegt L6, wat het volgens mijn onderzoek waarschijnlijk een MMBC1623L6 maakt met een minimale stroomversterking van 200. Met 0,1 mA basisstroom zou het in staat moeten zijn om een LAGE toestand te handhaven op zijn collector (module Pin 16) met minimaal 20mA collectorstroom.

Bovendien heeft deze module een 10K-potentiometer die is aangesloten tussen +5 en aarde, waarvan de variabele kabel naar pin 3 wordt gebracht (derde van onder op de foto). Wanneer deze rechtstreeks op het LCD-scherm is aangesloten, regelt deze pot het contrast van het LCD-scherm. Die functie wordt echter geleverd door een aparte soortgelijke pot op het LCD-scherm, dus deze pot op de seriële module heeft geen functie.

Ik kon geen verbinding met de INT-pin van de PCF8574T vinden.

UPDATE 22 augustus 2019

Zoals hierboven vermeld, heeft de PCF8574 3 adresbesturingspinnen. Deze lijken naar de pads op het rugzakbord te worden gebracht waar ze A0, A1 en A2 hebben. Ze zijn te zien op de foto. Ik heb dit niet getest, maar het lijkt vrijwel zeker dat door een of meer van deze pinnen te overbruggen naar de aangrenzende pads, het I2C-adres kan worden bestuurd over het bereik van 20 tot 27. Verder is er een tweede bijna identiek apparaat, de PCF8574A die dezelfde functionaliteit heeft als de PCF8574, maar het adresbereik dekt van 0x38 tot 0x3F.

Het adres dat uw apparaat daadwerkelijk gebruikt, kan worden gecontroleerd met een I2CScanner. Er zijn verschillende eenvoudige I2C-scanners verkrijgbaar bij verschillende bronnen. Deze op https://github.com/farmerkeith/I2CScanner identificeert ook enkele van de gevonden apparaten.

Stap 3: Aansluitingen

Verbindingen
Verbindingen

Met dank aan ChaitanyaM17 die het Fritzing-diagram heeft geleverd dat de hieronder beschreven verbindingen weergeeft.

Stroom:

De LCD-module heeft een pin aan de onderkant met het label "5.0V". Rechts daarnaast twee niet-gelabelde pinnen die beide geslepen zijn.

Houd de seriële module met de I2C-interface aan de linkerkant vast, er zijn 16 pinnen aan de onderkant. De eerste hiervan is aarde en de tweede is +5v. Een andere optie is om de onderste twee pinnen op de I2C-interface te gebruiken voor stroom, maar ik vond het handiger om de pinnen te gebruiken zoals hierboven beschreven.

I2C-interface. Op de seriële module is de bovenste pin SCL (klok) en deze gaat naar de Arduino A5. De tweede pin is SDA (data) en gaat naar de Arduino A4.

LCD-afdrukinterface. Er zijn 6 verbindingen tussen de seriële module en het scherm van het LCD-toetsenbord, allemaal tussen pinnen zonder labels. Ik identificeer ze op de LCD-module door van rechts naar links te tellen, met de eerste pin als 1. Er zijn 2 blokken van 8, dus ze gaan van 1 naar 16. Ik identificeer ze op de I2C seriële module door van links naar Klopt, er zijn er ook 16. Bovendien geef ik elke draad een label, de equivalente pin op de Arduino die normaal gesproken met die functie wordt geassocieerd, in het geval van een directe verbinding zonder de seriële module.

Dus de 6 dataverbindingen zijn:

Arduino-equivalent // Seriële modulepin // LCD-toetsenbordmodulepin

D4 // 11 // 5 D5 // 12 // 6 D6 // 13 // 7 D7 // 14 // 8 D8 // 4 // 9D9 // 6 // 10

Bediening LCD-achtergrondverlichting: hiervoor wordt nog een verbinding gebruikt:

Arduino-equivalent // Seriële modulepin // LCD-toetsenbordmodulepin

D10 //16 // 11

Toetsenbordinterface: dit gebruikt een enkele draad van de pin van de LCD-module aan de onderkant met het label "A0", naar pin A0 op de Arduino. Dat was in ieder geval vrij eenvoudig!

Stap 4: De RST-sleutel bruikbaar maken, vergelijkbaar met de andere 5 toetsen

De RST kan direct worden aangesloten op de RESTART-ingang van de Arduino Nano.

Als u echter wilt dat de RST-sleutel voor andere dingen in de software kan worden gebruikt, kunt u dit doen door een 15K-weerstand aan te sluiten tussen de RST-pin en de A0-pin aan de onderkant van het LCD-toetsenbordscherm.

Dit werkt als volgt: Er zit een 2K weerstand tussen +5V en de Rechter toets. Vervolgens een reeks steeds grotere weerstanden voor elk van de andere toetsen (330R naar de UP-toets, 620R naar de DOWN-toets, 1K naar de LEFT-toets en 3K3 naar de SELECT-toets. Alle toetsen (inclusief de RST-toets) verbinden met Bij aansluiting op een 10 bit A/D-converter (zoals voor Arduino Nano A0) leveren ze ongeveer de volgende waarden:

Rechts = 0; Omhoog = 100; Omlaag = 260; Links = 410; Selecteer = 640.

Met de weerstand van 15 k naar RST levert hij ongeveer 850 op.

De software gebruikt waarden rond de middelpunten tussen deze waarden om te bepalen welke toets is ingedrukt.

Stap 5: Software

Handige software is natuurlijk een oefening voor de lezer. Maar om je op weg te helpen, kun je mijn testsoftware bekijken. Ik gebruikte de NewLiquidCrystal-bibliotheek, die ondersteuning voor de I2C-interface bevat. Het werkte allemaal gewoon, zodra ik de bibliotheken correct heb geïnstalleerd.

Het belangrijkste punt was om de polariteit van de Backlight OFF- en ON-commando's om te draaien (vanwege de transistor op de I2C-module zoals uitgelegd in de sectie Onderdelenbeschrijving).

UPDATE 22 augustus 2019

Als je problemen hebt met het niet werken van het LCD-scherm, controleer dan het I2C-adres van je seriële rugzak met behulp van een I2C-scanner. Een geschikte scanner is bijgevoegd. Pas dan indien nodig de eerste parameter in het statement aan

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7);

Stap 6: Review en discussie

Zoals je kunt zien heb ik de belangrijkste functies werkend gekregen.

Mijn volgende bedoeling is om dit in een projectdoos te plaatsen als onderdeel van een ander project. Maar nadat ik dit pad had bewandeld, ontdekte ik dat er nog een ander probleem is dat ik niet had verwacht.

De moeilijkheid is dat deze LCD-toetsenbordmodule niet is ingesteld om in een doos te worden geïnstalleerd. Wat voor doos dan ook. De knoppen van de 6 toetsen zitten ruim onder het niveau van het LCD-scherm, zodat als de module in een doos (bijvoorbeeld in het deksel) wordt gemonteerd met de bovenkant van de LCD-printplaat gelijk met de onderkant van het deksel, de bovenkanten van de toetsen bevinden zich ongeveer 7 mm onder de bovenkant van het deksel.

Mogelijke oplossingen zijn:

a) Leg het uit. Boor toegangsgaten in het deksel en gebruik een gereedschap (bijv. een afgezaagde breinaald met een geschikte diameter) om de knopen in te drukken.

b) Verwijder het LCD-scherm van de printplaat van de module en voer een operatie uit op het toetsenbord zodat de twee componenten onafhankelijk van elkaar op het deksel van de projectdoos kunnen worden bevestigd (ik denk dat er nog steeds een probleem kan zijn dat de knoppen te kort zijn)

c) verwijder de bestaande knoppen en vervang ze door hogere knoppen. De nieuwe knoppen moeten ongeveer 13 mm hoog zijn zodat ze door het deksel van de projectbox kunnen worden bediend). Vervangende knopschakelaars zijn direct verkrijgbaar in verschillende hoogtes, waaronder 13 mm.

d) gooi de schermmodule van het LCD-bediendeel weg en gebruik afzonderlijke LCD- en bediendeeleenheden (dwz opnieuw beginnen). Er is een breed scala aan bediendelen beschikbaar, maar ik heb er nog geen gezien met dezelfde 6-toetsen lay-out als op deze module (dwz Selecteren, Links, Omhoog, Omlaag, Rechts, Opnieuw opstarten). Het is misschien geen groot probleem, maar een van de redenen waarom ik met deze module begon, was dat ik dacht dat deze toetsindeling was wat ik wilde.

Ik ben van plan om met oplossing c) hierboven te gaan, en kijk hoe ik ga.

Nog een stukje informatie dat van belang kan zijn:

Met de achtergrondverlichting AAN is het huidige verbruik van dit project: Arduino Nano 21,5 ma; Seriële module 3,6 ma; LCD-module 27,5 mA; Totaal 52 mA.

Met de achtergrondverlichting UIT is het huidige verbruik van dit project: Arduino Nano 21,5 ma; Seriële module 4,6 ma; LCD-module 9,8 mA; Totaal 36 mA.

Aanbevolen: