Lcdohjelmointi

LCD ohjelmoinnista

Pekka Ritamäki 21.10.2008

lcdblue.jpg

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

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License