Electronica
Aansturen van twee LCD schermen
TechTalk
Root server » TechTalk » Electronica » LCD schermen
Sommige LCD panelen gebruiken TTL niveaus voor de seriële communicatie en kunnen dus direct communiceren met bijvoorbeeld een arduino.
-

-

De seriële communicatie via een RS-232 poort wordt hier uitgelegd. Een niveau-conversie is nodig om bijvoorbeeld het signaal van een arduino om te zetten om een seriële printer aan te sturen.

Maar de meeste LCD panelen kunnen direct aangestuurd worden via een arduino want de meeste modules gebruiken de standaard TTL niveaus. En hier heb ik een eenvoudige ingreep om twee LCD schermen individueel aan te sturen met één enkele lijn van de arduino.

De seriële norm heeft slechts één datalijn nodig (en een massa), dit is een besparing op de nodige poorten ten opzichte van I2C en SPI, maar het kan nog beter.

#include <SoftwareSerial.h>

const byte rxPin = 2;
const byte txPin = 3;

SoftwareSerial lcd1 (rxPin, txPin);
SoftwareSerial lcd2 (rxPin, txPin, true);

lcd1.begin(9600);
lcd2.begin(9600);

lcd1.write(...);
lcd2.print(...);

In het standaard TTL protocol is de lijn hoog in rust. Maar met de funktie SoftwareSerial kan men met een omgekeerde polariteit werken (niveau's van de originele RS-232 verbinding). We gebruiken hier de eigenschap dat de LCD schermen een 0V-niveau aanzien als een "laag", de spanning moet niet naar -3V gaan.

We moeten eerste de SoftwareSerial bibliotheek laden, die nodig is om met een omgekeerde polariteit te werken.

We geven dan aan welke poorten we zullen nodig hebben: input (dat we niet gebruiken) en output.

We maken dan twee objecten aan, lcd1 en lcd2 waarmee we naar de ene of andere scherm zullen schrijven. De aanduiding true geeft aan dat we met een omgekeerde polariteit zullen werken (wordt normaal niet gebruikt). De twxee objecten gebruiken dezelfde poorten, maar dit kan geen kwaad want het zijn virtuele poorten die enkel in software gedefinieerd worden.

We geven nadien aan welke baudsnelheid gebruikt moet worden. De opeenvolgende bits worden gedefinieerd door de timing (baud rate), en die moet juist zijn, anders worden de gegevens niet gedecodeerd.

En dan sturen we een gegeven naar LCD scherm 1 en LCD scherm 2. We hebben daarvoor de klassieke instructie print om tekst, de waarde van een variabele of een constante door te sturen en de instructie write die de data als ASCII doorstuurt (zonder omzetting naar leesbare tekens).

We hebben nog een kleine schakeling nodig om de polariteit van één van de schermen om te keren. De verbindingskabel kan lang zijn, meerdere meters zijn mogelijk, de maximale lengte wordt eigenlijk bepaald door de spanningsval van de voedingsspanning. Een microfoonkabel met drie geleiders en een dikke massa is ideaal.

Maar als we de gegevens over een grotere afstand willen overbrengen, dan is het beter om een lokale 5V voeding te gebruiken. Om de vernietiging van de module te vermijden moet men een buffertrap gebruiken bij de ingang van beide schermen. De RxD is meestal zeer gevoelig en loopt direct naar de microprocessor. Bij een korte spanningsspike of als de arduino spanning krijgt maar niet het scherm kan de processor defekt gaan. De transistor (BC548 of BC558) kan probleemloos een omgekeerde spanning van 5V verdragen.

Om de module met niet-inverterende ingang te sturen gebruikt men een dubbele omkeertrtap.

De voeding is lokaal voor de twee transistoren en de twee LCD schermen.

Bij een normale polariteit wordt de boodschap door één module gedecodeerd.

Bij een omgekeerde polariteit (parameter true), dan wordt de boodschap gedecodeerd door de andere module.

De verbinding tussen de arduino en de aanduiders met voeding kan langer worden want men moet geen rekening houden met de spanningsverliezen. Een lengte van 10m is goed mogelijk.

Men kan gewone afgeschermde audiokabel gebruiken, men stuurt de massa (GND) en het datasignaal door.

Een LCD module met seriële ingang heeft drie aansluitingen: RX ou RxD (receive data): de data komt via deze pen naar binnen in de module, VDD, de voedingsspanning van 5V voor de mùodule en GND, de massa. Soms is er een aparte aansluiting voor de backlights.

De massa is globaal en wordt doorgetrokken van de arduino-voeding naar de arduino, de transistor omkeertrap, de twee LCD modules en de voeding van de schermen.

Het voordeel van het gebruik van een transistor om de signaalpolariteit om te keren is dat de transistor de spanningspieken op de datalijn onderdrukt. Dit is vooral van belang voor LCD modules die lokaal gevoed worden. Ik weet uit ervaring dat de RxD lijn zeer gevoelig is voor spanningspieken.

De processor op de module kan doorgaans niet vervangen worden, het zijn "chip on board" processoren (zwarte druppel op de print).

Een enkelvoudige inverterprint

Het is mogelijk dat deze ingreep niet met alle displays werkt. Als dat het geval is, dan kan het nodig zijn in het begin een schrijfopdracht naar het andere display van een spatie te sturen, gevolgd door een pauze van 100ms (delay(100).

Publicités - Reklame

-