A Microchip C18 v3.22 PIC18 perifériakönyvtár javításai, módosításai, használata

A PIC18 perifériakönyvtár újrafordítása (2010-11-18)

A C18 fejlesztői környzethez tartozó PIC18 perifériakönyvtárban az LCD kezelésére szolgáló függvényekbe "bele van drótozva", hogy az LCD vezérléséhez melyik portot, s hogy 4 vagy 8 bites módban használja adatútként, s hogy mely portlábakat használja vezérlésre (RS, R/W, E). Az xlcd függvények használatához tehát nagy valószínűséggel módosítani kell az xlcd.h állományt és újra kell fordítani az adott mikrovezérlőhöz tarozó perifériakönyvtárat (pl. a p18F14K50.lib állományt).

Feltételezett kiindulási helyzet: telepített MPLAB 8.15a és Microchip C18 v3.22 fordító (utóbbi a C:\Program Files\Microchip\MCC18 mappában).

  1. Készítsünk munkaterületet a C:\MCC18 mappában, s másoljuk bele a C18 telepítési mappa \h és \src mappáját (utóbbit az alkönyvtárak tartalmával együtt)!
  2. Hozzunk létre egy üres C:\MCC18\lib mappát is! (Ebbe kerülnek majd a fordítás során létrejövő programkönyvtárak)
  3. Módosítsuk a C:\MCC18\h mappában az xlcd.h állományt! Például 8 bites módhoz, adatport = PORTC és RS=RB5, RW=RB6, E=RB7 esetén az állomány elején a hardverspecifikus definíciókat az alábbiak szerint írjuk át:
     /* Interface type 8-bit or 4-bit
     For 8-bit operation uncomment the #define BIT8
     */
    #define BIT8
    
    /* When in 4-bit interface define if the data is in the upper
     or lower nibble.  For lower nibble, comment the #define UPPER
     */
    #define UPPER   //Ennek most nincs jelentősége
    
    /* DATA_PORT defines the port to which the LCD data lines are connected */
    #define DATA_PORT      PORTC
    #define TRIS_DATA_PORT TRISC
    
    /* CTRL_PORT defines the port where the control lines are connected.
     These are just samples, change to match your application.
     */
    #define RS_PIN   LATBbits.LATB5      /* PORT for RS */ 
    #define TRIS_RS  TRISBbits.TRISB5    /* TRIS for RS */ 
    #define RW_PIN   LATBbits.LATB6      /* PORT for RW */ 
    #define TRIS_RW  TRISBbits.TRISB6    /* TRIS for RW */ 
    #define E_PIN    LATBbits.LATB7      /* PORT for E  */ 
    #define TRIS_E   TRISBbits.TRISB7    /* TRIS for E  */
    
  4. Ellenőrizzük, hogy az alábbi programok elérhetők és parancssorból működőképesek:
    • MPLAB C18 (mcc18.exe)
    • MPASM assembler (mpasm.exe)
    • MPLIB librarian (mplib.exe)
  5. Állítsuk be az elérési útvonalat az include direktívákhoz:
           SET MCC_INCLUDE=C:\MCC18\h
    
  6. A C:\MCC18\src könyvtárban adjuk ki az alábbi parancsot:
           make_one_device_t.bat 18F14K50
    
  7. Az alkalmazások fordításánál ügyeljünk arra, hogy az általunk módosított xlcd.h állományt és az C:\MCC18\lib mappában megjelenő új könyvtár(aka)t csatoljuk a projekt-hez! Legegyszerűbb, ha biztonsági másolatot készítünk a régi állományokról és bemásoljuk a helyükre az új xlcd.h és p18f4520.lib állományokat.

Megjegyzés: Az OpenXLCD() függvény paraméterezése azt sejteti, hogy futáskor választhatunk a 4 vagy 8 bites üzemmód között. Ez, sajnos, nem így van, mivel a perifériakönyvtár fordításakor a forráskódban elhelyezett feltételes fordítási direktívák miatt eleve csak egyféle üzemmód vezérlő parancsai fordulnak le, s utólagos módosítás csak újrafordítással lehetséges. Így tehát az OpenXLCD() függvény paraméterezésénél már csak a hibás vagy a hibátlan beáálítás között választhatunk (hibátlan a beállítás akkor, amikor a megadott üzemmód megegyezik azzal, amire a programkönyvtárat fordítottuk).

Egy mintapélda az LCD kezelésére a "gyári" perifériakönyvtár felhasználásával

Az alábbi mintaprogramban 8 bites adatúttal, kétsoros módban inicializáljuk az LCD modult, az 5x7-es fontméret használva. Mindkét sorba kiírunk egy-egy rövid szöveget.

Hardver követelmények:

Projekt konfiguráció:

Az adc.h állomány javítása I. (2010-08-05)

A 3.22-es verziójú C18 fordítóval kapott adc.h header fájlban nincsenek definiálva az ADC_V10 kategóriájú (PIC13K50, PIC14K50) mikrovezérlőkhöz az OpenADC() paraméterezéséhez szükséges makrók egy része (pl. a konverziós órajelet és az adatgyűjtési időt konfiguráló makrók).

Javítása: a fájl elején az első hosszú

   #if defined ( ADC_V1 ) || defined ( ADC_V2 ) ... stb. 
litániába vegyük fel a || defined(ADC_V10) tagot is!

Az adc.h állomány javítása II. (2010-08-05)

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:
    #define ADC_REF_VDD_VDD  0b11110011 // ADC voltage source VREF+ = AVDD
    #define ADC_REF_VDD_VREFPLUS  0b11110111 // ADC voltage source VREF+ = ext. source at VREF+
    #define ADC_REF_VDD_FVREF         0b11111011 // ADC voltage source VREF+ = FVREF+
Eredetileg hibásan, egy helyiértékkel jobbra csúszva vannak definiálva!

Az adc.h állomány kiegészítése (2010-08-05)

ENABLE_AN3....ENABLE_AN11 makrók definiálása a piccolo-14k50.h állományban

A PIC18F14K50 analóg csatornái egymástól függetlenül engedélyezhetők. Ehhez nincs jó gyári makró, ezért definiáltam néhányat az OpenADC() függvény negyedik paraméterének (az ANSEL és ANSELH registerekbe írandó érték) kényelmes összeállításához.

    #define ENABLE_AN3  0x0008
    #define ENABLE_AN4  0x0010
    #define ENABLE_AN5  0x0020
    #define ENABLE_AN6  0x0040
    #define ENABLE_AN7  0x0080
    #define ENABLE_AN8  0x0100
    #define ENABLE_AN9  0x0200
    #define ENABLE_AN10 0x0400
    #define ENABLE_AN11 0x0800
Ezeket a makrókat az OpenADC() függvény utolsó paraméterének (PORTCONFIG) ö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:
  #include "adc.h"
  #define USE_OR_MASKS
  OpenADC(ADC_FOSC_64 | ADC_RIGHT_JUST | ADC_20_TAD,
    ADC_CH10 | ADC_INT_OFF,
    ADC_REF_VDD_VDD | ADC_REF_VDD_VSS,
    ENABLE_AN10 | ENABLE_AN11);  

Projekt: PICCOLO projekt - PIC18 támogatói programkönyvtár Készült: Thu Apr 7 21:00:25 2011 Készítette:   doxygen 1.5.9