00001
00002
00003
00022 #define BIT8
00023
00024
00025
00026
00027 #define UPPER //Ennek most nincs jelentősége
00028
00029
00030 #define DATA_PORT PORTC
00031 #define TRIS_DATA_PORT TRISC
00032
00033
00034
00035
00036 #define RS_PIN LATBbits.LATB5
00037 #define TRIS_RS TRISBbits.TRISB5
00038 #define RW_PIN LATBbits.LATB6
00039 #define TRIS_RW TRISBbits.TRISB6
00040 #define E_PIN LATBbits.LATB7
00041 #define TRIS_E TRISBbits.TRISB7
00042 \endcode
00043 * -# Ellenőrizzük, hogy az alábbi programok elérhetők és parancssorból működőképesek:
00044 * - MPLAB C18 (mcc18.exe)
00045 * - MPASM assembler (mpasm.exe)
00046 * - MPLIB librarian (mplib.exe)
00047 * -# Állítsuk be az elérési útvonalat az include direktívákhoz:
00048 * \code
00049 * SET MCC_INCLUDE=C:\MCC18\h
00050 * \endcode
00051 * -# A C:\\MCC18\\src könyvtárban adjuk ki az alábbi parancsot:
00052 * \code
00053 * make_one_device_t.bat 18F14K50
00054 * \endcode
00055 * -# Az alkalmazások fordításánál ügyeljünk arra, hogy az általunk módosított xlcd.h állományt
00056 * és az C:\\MCC18\\lib mappában megjelenő új könyvtár(aka)t csatoljuk a projekt-hez!
00057 * Legegyszerűbb, ha biztonsági másolatot készítünk a régi állományokról és bemásoljuk
00058 * a helyükre az új <b>xlcd.h</b> és <b>p18f4520.lib</b> állományokat.
00059 *
00060 * <b>Megjegyzés:</b> Az OpenXLCD() függvény paraméterezése azt sejteti, hogy futáskor
00061 * választhatunk a 4 vagy 8 bites üzemmód között. Ez, sajnos, nem így van, mivel a
00062 * perifériakönyvtár fordításakor a forráskódban elhelyezett feltételes fordítási direktívák
00063 * miatt eleve csak egyféle üzemmód vezérlő parancsai fordulnak le, s utólagos módosítás
00064 * csak újrafordítással lehetséges.
00065 * Így tehát az OpenXLCD() függvény paraméterezésénél már csak a
00066 * hibás vagy a hibátlan beáálítás között választhatunk (hibátlan a beállítás akkor, amikor
00067 * a megadott üzemmód megegyezik azzal, amire a programkönyvtárat fordítottuk).
00068 *
00069 *<b>Egy mintapélda az LCD kezelésére a "gyári" perifériakönyvtár felhasználásával</b>
00070 *
00071 * Az alábbi mintaprogramban 8 bites adatúttal, kétsoros módban inicializáljuk az LCD modult,
00072 * az 5x7-es fontméret használva. Mindkét sorba kiírunk egy-egy rövid szöveget.
00073 *
00074 *<b>Hardver követelmények:</b>
00075 * - PICCOLO projekt alapkapcsolás, PIC18F14K50 mikrovezérlővel
00076 * - 2x16 karakteres LCD kijelző. Az adatvonalak a LEDport-ra legyenek kötve, a vezérlő vonalak
00077 * pedig a B portra (E = RB7, R/W = RB6, RS = RB5)
00078 *
00079 *<b>Projekt konfiguráció:</b>
00080 * - Csak a HID_BOOTLOADER szimbólumot definiáljuk (az USB kapcsolatot és a programmegszakítást
00081 * most nem használjuk.
00082 * - Ha még nem történt meg, akkor a fentebb ismertetett módon konfiguráljuk az xlcd.h állományt
00083 * és lefordítjuk a PIC18F14K50 mikrovezérlő perifériakönyvtárát.
00084 * - Az MPLAB Project/Build Options/Project menüben az Include Search Path és Library Search
00085 * Path beállításánál ügyelünk arra, hogy az újonnan lefordított programkönyvtárat, és az általunk
00086 * módosított xlcd.h állományt "találja meg" a fordító! (A módosított xlcd.h állományt átneveztük
00087 * piccolo-xlcd.h névre, s a PICCOLO projekt include mappájában kapott helyet).
00088 \code
00089 #include "piccolo_all.h"
00090 #include "piccolo_xlcd.h"
00091 #include "delays.h"
00092
00093 void DelayFor18TCY(void) {
00094 Delay10TCYx(2);
00095 }
00096
00097 void DelayPORXLCD(void) {
00098 Delay10KTCYx(60);
00099 }
00100
00101 void DelayXLCD() {
00102 Delay1KTCYx(60);
00103 }
00104
00105 const rom char szoveg[]= "PICCOLO projekt";
00106
00107 void main(void) {
00108 DISABLE_ALL_ANALOG();
00109 OpenXLCD( EIGHT_BIT & LINES_5X7 );
00110 while( BusyXLCD() );
00111 putrsXLCD(szoveg);
00112 while( BusyXLCD() );
00113 SetDDRamAddr(0xC0);
00114 while( BusyXLCD() );
00115 putrsXLCD("PIC18F14K50 MCU");
00116 while(1);
00117 }
00118 \endcode
00119 *
00120 * \section adc_if Az adc.h állomány javítása I. (2010-08-05)
00121
00122 * A 3.22-es verziójú C18 fordítóval kapott <b>adc.h</b> header fájlban nincsenek definiálva
00123 * az ADC_V10 kategóriájú (PIC13K50, PIC14K50) mikrovezérlőkhöz az <b>OpenADC()</b>
00124 * paraméterezéséhez szükséges makrók egy része (pl. a konverziós órajelet és az adatgyűjtési
00125 * időt konfiguráló makrók).
00126 *
00127 * Javítása: a fájl elején az első hosszú
00128 \code
00129 #if defined ( ADC_V1 ) || defined ( ADC_V2 ) ... stb.
00130 \endcode
00131 * litániába vegyük fel a <b>|| defined(ADC_V10)</b> tagot is!
00132 *
00133 * \section andmasks Az adc.h állomány javítása II. (2010-08-05)
00134 * Az ADC_V10 kategóriájú (PIC13K50, PIC14K50) mikrovezérlőknél hibás néhány AND típusú maszk definíciója. Helyesen így néznek ki:
00135 \code
00136 #define ADC_REF_VDD_VDD 0b11110011 // ADC voltage source VREF+ = AVDD
00137 #define ADC_REF_VDD_VREFPLUS 0b11110111 // ADC voltage source VREF+ = ext. source at VREF+
00138 #define ADC_REF_VDD_FVREF 0b11111011 // ADC voltage source VREF+ = FVREF+
00139 \endcode
00140 * Eredetileg hibásan, egy helyiértékkel jobbra csúszva vannak definiálva!
00141 *
00142 * \section enable_anx Az adc.h állomány kiegészítése (2010-08-05)
00143 *<b>ENABLE_AN3....ENABLE_AN11 makrók definiálása a piccolo-14k50.h állományban</b>
00144 *
00145 * A <b>PIC18F14K50</b> analóg csatornái egymástól függetlenül engedélyezhetők.
00146 * Ehhez nincs jó gyári makró, ezért definiáltam néhányat az OpenADC() függvény negyedik
00147 * paraméterének (az ANSEL és ANSELH registerekbe írandó érték) kényelmes összeállításához.
00148 \code
00149 #define ENABLE_AN3 0x0008
00150 #define ENABLE_AN4 0x0010
00151 #define ENABLE_AN5 0x0020
00152 #define ENABLE_AN6 0x0040
00153 #define ENABLE_AN7 0x0080
00154 #define ENABLE_AN8 0x0100
00155 #define ENABLE_AN9 0x0200
00156 #define ENABLE_AN10 0x0400
00157 #define ENABLE_AN11 0x0800
00158 \endcode
00159 * Ezeket a makrókat az <b>OpenADC()</b> függvény utolsó paraméterének (PORTCONFIG)
00160 * összeállításához használhatjuk. Például az alábbi kódrészletben az AN10 és AN11 csatornákat engedélyezzük:
00161 \code
00162 #include "adc.h"
00163 #define USE_OR_MASKS
00164 OpenADC(ADC_FOSC_64 | ADC_RIGHT_JUST | ADC_20_TAD,
00165 ADC_CH10 | ADC_INT_OFF,
00166 ADC_REF_VDD_VDD | ADC_REF_VDD_VSS,
00167 ENABLE_AN10 | ENABLE_AN11);
00168 \endcode
00169 */