- 16x2 alfanumeriek LCD-scherm
- 16x2 LCD CCS-bibliotheek voor MSP430
- LCD-functies voor 16x2 LCD-scherm op MSP430
- Schakelschema naar interface-LCD met MSP430
- MSP430 programmeren met Code Composer Studio voor LCD-scherm
Dit artikel is de voortzetting van onze tutorialserie over het programmeren van MSP430 met Code Composer Studio. De laatste tutorial was gebaseerd op externe interrupts op MSP430 met behulp van GPIO-pinnen. Deze tutorial gaat over het koppelen van een scherm aan de MSP430, als het gaat om het weergeven van het 16 * 2 LCD-scherm, is dit de eerste keuze voor elke elektronische hobbyist. Eerder hebben we ook LCD met MSP430 gekoppeld met Arduino IDE, in deze tutorial zullen we het native Code Composer studio-platform gebruiken in plaats van de Arduino IDE te gebruiken, op deze manier krijgen we als ontwerper meer flexibiliteit.
Zie onderstaande tutorials voor meer informatie over het 16x2 LCD-scherm en het gebruik ervan met andere microcontrollers.
- Interfacing LCD met ATmega16
- Interfaces LCD met Raspberry Pi
- Interfacing LCD met PIC Microcontroller
- Interfaces LCD met ARM7-LPC2148
- Interfaces LCD met NodeMCU
- Interfaces LCD met STM32
- Interfaces LCD met MSP430G2
- Interfaces LCD met STM8
Het heeft een ingebouwde IC hd44780 die de doorgegeven opdracht en gegevens kan opslaan. De LCD-module heeft ongeveer 16 pinnen. 8 daarvan zijn datapinnen, 4 daarvan zijn voedingspinnen voor de LED-achtergrondverlichting en de hele LCD-module, 3 voor het regelen van de werking en 1 pin voor het aanpassen van het contrast. De tutorial is gebaseerd op de bibliotheek die is gemaakt door Dennis Eichmann. Het is heel gemakkelijk om een bibliotheek met aparte functies te gebruiken om verschillende datatypes af te drukken. Het heeft ook voorzieningen om de gegevens in verschillende vormen weer te geven met voorloop-, blanco en verwijderde nullen. Het is een behoorlijk uitgebreide en uitgebreide bibliotheek en kan worden geconfigureerd voor de verschillende verbindingen. Hier wordt het header-bestand aangepast om plaats te bieden aan een 8-pins parallelle configuratie voor datacommunicatie.
16x2 alfanumeriek LCD-scherm
Een generiek 16x2 beeldscherm heeft een ingebouwde hd44780 IC (hieronder in rood omcirkeld), dat de opdracht en gegevens kan opslaan die eraan zijn doorgegeven. De LCD-module heeft ongeveer 16 pinnen. 8 daarvan zijn datapinnen, 4 daarvan zijn voedingspinnen voor de LED-achtergrondverlichting en de hele LCD-module, 3 voor het regelen van de werking en 1 pin voor het aanpassen van het contrast.
Deze LCD-module is hierboven veelzijdig weergegeven en gebruikt minimale pinnen in vergelijking met andere gesegmenteerde LCD's. Als je benieuwd bent hoe dit alles precies werkt, kijk dan eens naar de werking van het 16x2 LCD-scherm waar we al uitvoerig hebben besproken hoe het LCD-scherm werkt.
RS Pin: RS = 1 activeert het dataregister in het LCD-scherm, dat wordt gebruikt om de waarden naar het dataregister in het LCD-scherm te schrijven. RS = 0 activeert het instructieregister van de LCD.
Pin inschakelen: Negatieve flank geactiveerd; wanneer de pin wordt gewijzigd van de status HIGH naar LOW, wordt het LCD-scherm gevraagd om naar de datapinnen te schrijven. Positieve flank getriggerd; wanneer de pin wordt veranderd van de LOW-status naar de HIGH-status, wordt het LCD-scherm gevraagd om te lezen van de datapinnen.
R / W-pin: R / W = 0 schrijft naar het instructieregister of dataregister volgens de selectie van de RS-pin. R / W = 1 leest van de IR of DR volgens de selectie van de RS-pin.
RS R / W-werking
0 0 IR schrijven als een interne bewerking (display wissen, etc.)
0 1 Lees bezet-vlag (DB7) en adresteller (DB0 tot DB6)
1 0 DR schrijven als een interne bewerking (DR naar DDRAM of CGRAM)
1 1 DR gelezen als een interne operatie (DDRAM of CGRAM naar DR)
D0-D7-pinnen: de gegevens worden via deze pinnen overgedragen van en naar de opdracht- en gegevensregisters.
Voedingspinnen: V ss, V dd pinnen worden gebruikt om de LCD-module van stroom te voorzien. A, K-pinnen zullen de LED-achtergrondverlichting voeden. V 0- pinnen worden gebruikt om het contrast te regelen.
16x2 LCD CCS-bibliotheek voor MSP430
De tutorial is gebaseerd op de bibliotheek die is gemaakt door Dennis Eichmann. Het is heel gemakkelijk om een bibliotheek met aparte functies te gebruiken om verschillende datatypes af te drukken. Het heeft ook voorzieningen om de gegevens in verschillende vormen weer te geven met voorloop-, blanco en verwijderde nullen. Het is een behoorlijk uitgebreide en uitgebreide bibliotheek en kan worden geconfigureerd voor de verschillende verbindingen. Hier wordt het header-bestand aangepast om plaats te bieden aan een 8-pins parallelle configuratie voor datacommunicatie. De bibliotheek kan worden gedownload via de onderstaande link, na het downloaden volgt u de onderstaande stappen om de bibliotheek aan CCS toe te voegen.
Download 16x2 bibliotheek voor MSP430 - Code Composer Studio
Stap 1: bestanden en projecten maken
Een standaard CCS-project wordt gemaakt met behulp van het bestandsmenu. Selecteer het apparaat in het dialoogvenster Project maken en geef hd44780 als projectnaam. Selecteer onder Projecttype en toolchain het uitvoertype als een statische bibliotheek en maak het project.
Maak in de Project Explorer-baan (linkerkant) een header-bestand in de include-map en noem het hd44780.h . Kopieer vervolgens de inhoud van het gedownloade bestand hd44780.h naar dit nieuw gemaakte bestand .
Maak nu het hoofdproject door het uitvoertype te wijzigen in een uitvoerbaar bestand en maak een project met de naam CCS_LCD .
Stap 2: Voeg de zoekpaden toe aan het hoofdproject
Voeg in het eigenschappendialoogvenster van het hd44780-project en binnen de include-opties voor de MSP430-compiler de map include in het bestand het zoekpad toe.
Vervolgens bouwen van dit project voor het maken van de nodige linker dergelijke bestanden als Lib-bestanden . Als je dit bouwt, wordt het bestand hd44780.lib gemaakt in de foutopsporingsmap.
Stap 3: Voeg de zoekpaden voor Linker toe
In het eigenschappendialoogvenster voor het CCS_LCD- project en in het bestandzoekpad van het tabblad MSP430 Linker, neemt u de hd44780.lib op die zich in de foutopsporingsmap van het hd44780-project bevindt. De foutopsporingsmap is ook opgenomen in het zoekpad voor bestanden.
De include-map is weer toegevoegd aan de include-opties van de MSP430-compiler van het CCS_LCD- project.
De bibliotheek is met succes samengesteld en toegevoegd aan de linker van het hoofdproject.
LCD-functies voor 16x2 LCD-scherm op MSP430
void hd44780_timer_isr (void): Dit wordt periodiek genoemd in de ISR van de Timer A. De Timer A wordt gebruikt om periodiek de LCD-functies uit te voeren, zoals het scherm leegmaken, de cursor instellen en de gegevens weergeven. De functie moet worden gebruikt in de ISR. Het geeft niets terug.
uint8_t hd44780_write_string (char * ch__string, uint8_t u8__row, uint8_t u8__column, uint8_t u8__cr_lf): Het schrijft de string gespecificeerd in het eerste argument.
char * ch__string: De tekenreeks die naar de gegevensbuffer moet worden geschreven (binnen de functie hd44780_timer_isr ). De gegevens worden gekopieerd naar het dataregister en het instructieregister van de LCD IC wanneer de hd44780_timer_isr periodiek wordt aangeroepen.
uint8_t u8__row: Het definieert de rij waarin de string zal worden geschreven.
uint8_t u8__column: Het definieert de kolom waarin de string zal worden geschreven.
uint8_t u8__cr_lf: Als het is ingesteld op 1, wordt de rij overgedragen naar de volgende. Als het 0 is, stopt het afdrukken in dezelfde rij.
void hd44780_clear_screen (void): Deze functie zal het hele scherm wissen. Het geeft niets terug.
uint8_t hd44780_output_unsigned_16bit_value (uint16_t u16__value, uint8_t u8__leading_zero_handling, uint8_t u8__row, uint8_t u8__column, uint8_t u8__cr_lf): De gewenste functie zal de LCD-waarde ongetekend weergeven.
uint16_t u16__value: Het integer dat moet worden weergegeven, wordt in het eerste argument opgegeven.
uint8_t u8__leading_zero_handling: Als 0 wordt doorgegeven, worden voorloopnullen getoond voor de gehele waarde. Als 1 wordt gepasseerd, worden de nullen leeggemaakt. Als 2 wordt doorgegeven als parameter, worden alleen de significante cijfers weergegeven.
uint8_t u8__row: De rij waarin het gehele getal wordt weergegeven, wordt geselecteerd.
uint8_t u8__column: De af te drukken kolom wordt geselecteerd met het argument.
uint8_t u8__cr_lf: Als het is ingesteld op 1, wordt de rij overgedragen naar de volgende. Als het 0 is, stopt het afdrukken in dezelfde rij.
Schakelschema naar interface-LCD met MSP430
Het volledige schakelschema wordt geïllustreerd in de onderstaande afbeelding. Zoals u kunt zien, zijn de hardware-aansluitingen erg eenvoudig en hebben we het hele bord van stroom voorzien met behulp van een 5V-adapter.
De aansluitingen worden gemaakt volgens bovenstaande schets. Raadpleeg de onderstaande tabel voor de gedetailleerde aansluitingen.
VSS | Aarding van 5V-voeding |
Vdd | 5V |
V0 | Potentiometer-uitgang |
RS | P2.1 |
R / W | Grond |
E. | P2.0 |
D0 | P1.0 |
D1 | P1.1 |
D2 | P1.2 |
D3 | P1.3 |
D4 | P1.4 |
D5 | P1.5 |
D6 | P1.6 |
D7 | P1.7 |
EEN | 220 Ohm weerstand |
K | Grond |
De anode van de LED-achtergrondverlichting kan niet rechtstreeks op een 5V-voeding worden aangesloten. Het moet worden aangesloten op een weerstand om de stroom door de LCD-module te minimaliseren. Ik heb mijn verbindingen gemaakt met een perf-board om het LCD-scherm te solderen en vervolgens heb ik jumperdraden gebruikt om het LCD-scherm te verbinden met het MSP430-bord, mijn opstelling ziet er als volgt uit, maar je kunt ook gewoon een breadboard gebruiken om je verbindingen te maken.
MSP430 programmeren met Code Composer Studio voor LCD-scherm
De volledige code die in dit project wordt gebruikt, staat onderaan deze pagina. De uitleg van het gebruik van de code is als volgt. Open eerst het headerbestand (hd44780.h) en neem het onderdeelnummer van de microcontroller op in het eerste deel van het bestand.
#inclusief "msp430g2553.h"
De watchdog-timer moet eerst worden gestopt. DCOCTL- en BCSCTL1- besturingsregisters worden gebruikt om de oscillator van de microcontroller te configureren. De onderstaande regels zullen de MCLK configureren als 1MHZ.
WDTCTL = (WDTPW - WDTHOLD); BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ;
De poort 1-pinnen moeten worden vermeld als uitgang, die wordt gebruikt voor de datapinnen. De pin 0 en pin 1 moeten ook worden vermeld als output in poort 2, die zal worden gebruikt voor RS en R / W-pin.
P1DIR = 0xFF; P2DIR = (0x01 - 0x02);
De ingebouwde timer wordt gebruikt om periodiek waarden weer te geven. Timer A wordt geselecteerd met SMCLK (1MHZ) als de klokbron en continue modus als de werkingsmodus.
TA0CCR1 = 32768; TA0CCTL1 = CCIE; TA0CTL = (TASSEL_2 - MC_2 - TACLR);
De interrupts voor de vergelijkingskanalen 1 en 2 en de timer-overflow-interrupt delen dezelfde interruptvector ( TIMER0_A1_VECTOR ) met verschillende startadressen. Capture-vergelijkingskanaal 1 (CCR1) gebruikt 2 als het adres, dat wordt gebruikt in de switchcase.
#pragma vector = TIMER0_A1_VECTOR __interrupt void timer_0_a1_isr (void) { switch (TA0IV) { case 2: { hd44780_timer_isr (); breken; } } }
Zodra u uw code heeft gecompileerd, kunt u deze uploaden naar het MSP430-bord, zoals uitgelegd in de handleiding Aan de slag met de MSP430-handleiding. Als alles verloopt zoals verwacht, zou u wat contrast op uw LCD-scherm moeten zien, zoals hieronder wordt weergegeven.
Als uw test erg zwak is, kunt u proberen de potentiometer aan te passen om een beter contrast te krijgen. De volledige werking van het project is ook te vinden in de onderstaande video. Ik hoop dat je genoten hebt van het project en het interessant vond om er zelf een te bouwen. Als u vragen heeft, laat deze dan achter in het commentaargedeelte hieronder. U kunt ook al uw technische vragen op forums schrijven om ze beantwoord te krijgen of om een discussie te starten.