LCD ohjelmoinnista
Pekka Ritamäki 21.10.2008

Miksi valmiit LCD-ohjelmat eivät toimi?
Ne toimivat, jos osaat laittaa omat parametrisi kuntoon. Alkuperäisen ohjelman tekijä ei tiedä mitä prosessoria käytät, ja mitä nastoja käytät.
Esimerkki CCS/PIC -ohjelmoinnista PIC16/18-sarjalle
Muilla kääntäjillä on ihan samat asiat vain välimerkit muutuvat kielen mukaan
1 Tiedot kääntäjälle, mitä piiriä käännetään ja mikä on kellotajuus
- prosesossorin alustus
Tyyppi
Sulakkeet
oskillaattorityypin valinta
suojaukset
watchdogit
- viive alustus, watchdog viiveen aikana
2. LCD nastojen määritys
3. prosessorin suuntarekisterien alustus
4.
-LCD näytönohjaimen alustuksen suunnittelu
- 8/4-bitin ohjausmenetelmän valinta
-Erittäin tärkeätä on 4-bitin modessa, että LCD:llä on tarpeeksi viiveitä, muuten laite menee 8-bitin modeen ja ei toimi 4-bitin komenoilla
- Valitaan mode, fontit, LCD näyttö päälle/pois, kursorin suunta, näkyykö kursori vai ei
kaikki nämä on kerrottu japanialaisella tyylillä LCD-datalehdissä. Niistä ei aloittelija saa mitään selvää.
5. LCD ohjaimen funktiot
* kirjoita nibble
* kirjoita merkki
* kirjoita ohjauskomento LCD:lle
* Kirjoita merkkijono LCD:lle
* Kirjota merkkijono riville x
6. printf-funtio lcd:lle
Käytä LCD kuten printf-funktiota.
7 . Logo LCD:lle
=== Sitten varnsinainen koodi ===
Esimerkissä käytetään PIC18F252 ja LCD 4*20 WH2004-TMC = Winstar sininen===
1 Prosessorin sulakevalinnat otetään käyttöön tästä taulukosta
/*=========fuses ===========================
PUT Power Up Timer
PROTECT Code protected from reads
NOPROTECT Code not protected from reading
BROWNOUT Reset when brownout detected
NOBROWNOUT No brownout reset
NOMCLR Master Clear pin used for I/O
MCLR Master Clear pin enabled
NOLVP No low voltage programming, B3(PIC16) or B5(PIC18) used for I/O
LVP Low Voltage Programming on B3(PIC16) or B5(PIC18)
INTRC Internal RC Osc
EC_IO External clock
INTRC_IO Internal RC Osc, no CLKOUT
EC External clock with CLKOUT
NOCPD No EE protection
CPD Data EEPROM Code Protected
==========================================*/
// Prosessorin tyypin valinta
#include <18F252.h>
// sulakkeet
#fuses NOWDT,HS, PUT, BROWNOUT, NOCPD, NOLVP, CCP2C1
// kello-oskillaattororin valinta 10MHz javahtikoira päälle
#use delay(clock=10000000,RESTART_WDT)
//BYTE PORTIT
#BYTE T0CON = 0xFB5
#BYTE PORTA = 0x0F80
#BYTE PORTB = 0x0F81
#BYTE PORTC = 0x0F82
#BYTE TRISB =
2 LCD bittien määrittely B-porttiin
//BIT portit
#BIT RS =PORTB.5
#BIT ENABLE =PORTB.4
#BYTE LCD = PORTB // LCD on mapattu osoitteeseen 0xF81 eli B-porttiin
struct lcd_pin_map { // Tämä structuuri on B-portille
int8 data : 4 ; // 4 bittiä alusta B3..B6
unsigned int1 RS ; // RS bitti
unsigned int1 ENABLE; // ENABLE bitti
unsigned int1 spare1; // WRITE on kytetty pysyyvästi 0 V
unsigned int1 spare2; // ei käyttöä
} LCD;
// käyttö ->LCD.ENABLE=1;
3 Suuntarekisterit kaikki LCD nastat annoksi
TRISB=0b11000000;
4. LCD asetetaan toimimaan 4-bittisessä modessa