Láb hozzárendelés PIC18FxxK42

 

Adatlap (Angol és pdf): itt
PPS oldal: itt
PPS leírás külön link: itt

70 old többszöri lehetoseg
Video: https://www.youtube.com/watch?v=tf2SfSm6fQg


Konfiguráláskor be kell állítani, hogy programból viszonylag szabadon kapcsolgathatjuk az egységeket a lábakhoz, vagy csak egyszer, miáltal ez a szabad átkapcsolgatási lehetőség megszűnik.
Fontos! Tehát a mikrokontroller konfigurálásakor meg kell adni azt, hogy az alábbi műveletek csak egyszer, vagy többször is elvégezhetők a programból. Az egyszeri elvégezhetőség a biztonság végett van. Utóbbi esetben beállítjuk a programból, és aztán végleg az a porthozzárendelés lesz az érvényes. Módosítása csak a módosított program újra feltöltésével lehetséges! 

A katalógus 284. oldalán találhatók azok a periféria elemek a PPS regiszterükkel együtt, melyek alkalmasak ilyen műveletre. Mindegyik ilyen  xxxPPS regiszternél (0.bit-4.bit) 5 bittel tudja kiválasztani a pirját.

A fogadó lábakat pedig RxyPPS<5:0> regiszterrel lehet meghatározni. Így 6 bittel határozhatók meg ezek a lábak, 3 bittel a port (pld.: A, B, C stb.), és 3 bittel a port láb, ami 0-7 lehet. A katalógus 281. oldalátók kezdődően lehet a lehetséges megoldásokról tájékozódni.


FORDÍTÁS:

17.0    PERIFÉRIA KI ÉS BEMENET (LÁB) VÁLASZTÁSA  PPS MODULLAL

   
   
PERIFÉRIA LÁB KIVÁLASZTÓ (PPS) MODUL (PIC18FxxK42 dokumentáció 275. old.)

PPS / Peripheral Pin Select/ modul csatlakoztatja a periféri (modulok) bemenetekeit és kimeneteit a mikrokontroller I/O (be és kimenet) lábaihoz. Csak a digitális be és kimenetek szerepelnek a választásban. Minden analóg bemenet és kimenet rögzítve van a hozzárendelt lábhoz. A bemeneti és kimeneti kijelölések függetlenek mint ahogy azt az egyszerűsített blokkdiagram 17-1 ábrája mutatja. Katakógus 275 oldal .
A perifériás bemenet kiválasztása a perifériás xxxPPS regiszterrel (17-1. Regiszter) történik. A perifériás kimenet pedig a PORT RxyPPS regiszterrel (17-2 regiszter) válastrható ki. Például, ha az UART1 RX bemenetként a PORTC <7> -t választja, állítsa az U1RXPPS-t 0b1 0111-re, és válassza ki a PORTC <6> -ot az UART1 TX kimenetnek, az RC6PPS-nek a 0b01 0011-et.
17.0 PERIPHERAL PIN SELECT (PPS) MODULE

The  Peripheral  Pin  Select  (PPS)  module  connects peripheral inputs and outputs to the device I/O pins. Only digital signals are included in the selections. All analog inputs and outputs remain fixed to their assigned pins. Input and output selections are independent as shown in
the simplified block diagram Figure 17-1.
The peripheral input is selected with the peripheral xxxPPS register (Register 17-1), and the peripheral output is selected with the PORT RxyPPS register (Register 17-2). For example, to select PORTC<7> as the UART1 RX input, set U1RXPPS to 0b1 0111, and to select PORTC<6> as the UART1 TX output set RC6PPS to 0b01 0011.
PPS bemenet

Mindegyik periféria rendelkezik egy PPS regiszterrel, amellyel a perifériák bemeneteit lehet kiválasztani. A bemenetek számítanak az IC lábak. A több periféria egyidejűleg ugyanazon forrásból (lábról) működtethető. Ahhoz, hogy a port beolvassa a lábon levő szintet a periféri PPS kiválasztó regiszterrel be kell állítani. Ha a lábnak van analóg funkciója is, az adott lábhoz tartozó ANSEL-bitet törölni kell az analóg bemenet tiltásához és a digitális bemeneti puffer engedélyezéséhez.
Bár minden periféria saját PPS bemeneti kiválasztási regiszterrel rendelkezik, a kijelölések azonosak. Lásd a 17-1. ábra.
Fontos megjegyzés: 
A "xxx" jelölés a regiszternévben jelenti a periféria nevét (azonosítóját). Például: INT0PPS.

 
17.1 PPS Inputs

Each peripheral has a PPS register with which the inputs to the peripheral are selected. Inputs include the device pins. Multiple peripherals can operate from the same source simultaneously. Port reads always return the pin level regardless of peripheral PPS selection. If a pin also has analog functions associated, the ANSEL bit for that pin must be cleared to enable the digital input buffer.
Although every peripheral has its own PPS input selection register, the selections are identical for every peripheral as shown in Register 17-1.
Note:
The notation “xxx” in the register name is a place holder for the peripheral identifier. For example, INT0PPS.
17.2 PPS kimenetek

Minden egyes I/O-lábnak van egy PPS regisztere, amellyel a láb kimeneti forrása választható ki. Néhány kivételtől eltekintve, a porthoz tartozó TRIS vezérlő regiszter megtartja a szerepét a ki- vagy  bemenet megválasztásához. Azok a perifériák, amelyek vezérlik a kimenet I/O megválasztását, a működésüknek megfelelően szükség szerint felülbírálják a TRIS vezérlést. Ezek a perifériák a következők:
• UART
Habár minden lábnak saját PPS perifériás szelekciós regisztere van, a kiválasztási módok azonosak a 17-2.
Fontos megjegyzés: 
Az "Rxy" jelölés a láb azonosítóját (nevét) jelenti. Például RA0PPS.
 
17.2 PPS Outputs

Each I/O pin has a PPS register with which the pin output source is selected. With few exceptions, the port TRIS control associated with that pin retains control over the pin output driver. Peripherals that control the
pin output driver as part of the peripheral operation will override the TRIS control as needed. These peripherals include: 
•UART
Although every pin has its own PPS peripheral selection register, the select ions are identical for every pin as shown in Register 17-2. 
Note:
The notation “Rxy” is a place holder for the pin identifier. For example, RA0PPS.

 


Lábak modulokhoz rendelését, módosítását előbb a lezárás feloldásával kell kezdeni.
Ez egy bonyolult procedúra a biztonság véget!!!
Lásd a katalógus 276. oldalán. Ennek a kódja:

; Disable interrupts:
    BCF     INTCON0,GIE ; letiltjuk globálisan a megszakításokat
; Bank to PPSLOCK register
    BANKSEL PPSLOCK
    MOVLB   PPSLOCK  ; BSR regiszter feltoltese be nem tudom
    MOVLW   55h  ; h'55'
; Required sequence, next 4 instructions
    MOVWF   PPSLOCK
    MOVLW   AAh  ; h'AA'
    MOVWF   PPSLOCK
; Clear PPSLOCKED bit to enable writes - Torolni a PPSLOCK<PPSLOCKED> (0. bit)
; Only a BCF instruction will work - Csak bcf utasitasra enhedelyzi a periferiahozzarendelesek beirasat
    BCF     PPSLOCK,0
; Enable Interrupts
    BSF     INTCON0,GIE ; újból engedélyezzük glábálisan a megszakításokat

Magyarázat: A PPSLOCK regiszternek csak egy bitje van, a 0. bit, más néven  a PPSLOCKED bit ( PPSLOCK<PPSLOCKED> ). Tulajdonsága: R/W-0/0


 

xxxPPS: PERIPHERAL xxx INPUT SELECTION
U-0 U-0 R/W-m/u(1,3) R/W-m/u(1) R/W-m/u(1) R/W-m/u(1) R/W-m/u(1) R/W-m/u(1)
--- --- xxxPPS<5:0>
7.bit 6.bit 5.bit 4.bit 3.bit 2.bit 1.bit 0.bit

 

Magyarázat:    
 R = Readable bit   W = Writable bit   -n/n = Value at POR and BOR/Value at all other Resets
 u = Bit is unchanged     x = Bit is unknown   q = value depends on peripheral
 ‘1’ = Bit is set   U = Unimplemented bit, 
        read as ‘0’
  m = value depends on default location for that input
 ‘0’ = Bit is cleared  

2. tablazat:

2-0. bit xxxPPS<2:0>: Peripheral xxx Input PORTx Pin Selection bits
111 = Peripheral input is from PORTx Pin 7 (Rx7)
110 = Peripheral input is from PORTx Pin 6 (Rx6)
101 = Peripheral input is from PORTx Pin 5 (Rx5)
100 = Peripheral input is from PORTx Pin 4 (Rx4)
011 = Peripheral input is from PORTx Pin 3 (Rx3)
010 = Peripheral input is from PORTx Pin 2 (Rx2)
001 = Peripheral input is from PORTx Pin 1 (Rx1)
000 = Peripheral input is from PORTx Pin 0 (Rx0)
3-5. bit xxxPPS<5:3>: Peripheral xxx Input PORTx Pin Selection bits
See Table17 - 1 for the list of available ports and default pin locations.
101 = PORTF(2)
100 = PORTE(3)
011 = PORTD (3)
010 = PORTC
01 = PORTB
000 = PORTA
 
6-7. bit Unimplemented: Read as ‘0’

 

  • 1: The Reset value ‘m’ of this register is determined by device default locations for that input.
    2: Reserved on PIC18LF26/27/45/46/57K42 parts.
    3: Reserved on PIC18LF26/27K42 parts. 

 

 

 

A kiválasztott portot (lábat, lábakat) felszabadítjuk a kiválasztott modulhoz történő csatlakozásra:

Fontos! A mikrokontroller konfigurálásakor meg kell adni azt, hogy az alábbi műveletek csak egyszer, vagy többször is elvégezhetők a programból. Az egyszeri elvégezhetőség a biztonság végett van. Utóbbi esetben beállítjuk a programból, és aztán végleg az a porthozzárendelés lesz az érvényes. Módosítása csak a módosított program újra feltöltésével lehetséges! 
A tablazat az adatlap 277. oldalan van, itt pedig a 2. tablazat, mely alapjan az ertekek (bitek) megallapitasara tortenik.
A katalógus 288. oldalán kezdődő táblázat segítségével megtervezzük azt, hogy megyik perifériát melyik láb vagy lábakhoz szándékozzuk kapcsolni.
Programkód:
; RE0 láb
    bsf RE,0  ; bemenet legyen az E port 0. (láb)  Megj.: lehet, hogy ez a muvelet el is maradhat    
    movwf RE0PPS b'100000'  ; Jobbrol nezve 3 bittel kijelolom a por erintkezojet, a 0-adikot, majd balra haladva a masik 3 bittel a portot, itt az E portot

; RE1 lab
    bsf RE,1  ; bemenet legyen az E port 1. (láb)  Megj.: lehet, hogy ez a muvelet el is maradhat 
    movwf RE1PPS b'100001'  ; Jobbrol nezve 3 bittel kijelolom a por erintkezojet, a 1-elsot, majd balra haladva a masik 3 bittel a portot, itt az E portot
; Ezzel a kivalasztott portok (IC labak) szabadda valtak és hozzarendelhetjuk a kivalasztott modul labait


 

I2C kommunikáció megvalósításához a katalógus 288. oldalától kezdődő táblázat segítségével megtervezzük az összekapcsolást, ha ezt korábban még nem tettük meg.
Megállapítható, hogy I2C2 Clock és az I2C2 Data perifériát kapcsolhatjuk a korábban felszabadított RB1 és RB kivezetésekhez, illetve IC lábakhoz. Így az I2C 2. modulját tudjuk használni I2C kommunikációra.
Programkód:
    movlw b'100000'
    movwf I2C2SCLPPS  ; orajel vonal hozzarendelese az RE0 labhoz
    movlw b'100001' ;
    movwf I2C2SDAPPS ; adatvonal hozzarendelese RE1 lábhoz

 

 

 


Végezetül le kell zárni a lábhozzárenelési, módosítási lehetőséget, amit a lockolas..
Lásd a katalógus 276. oldalán.
Ez egy bonyolult procedúra a biztonság végett!!!
Ennek a kódja:

; Disable interrupts:
    BCF     INTCON0,GIE ; letiltjuk globálisan a megszakításokat
; Bank to PPSLOCK register
    BANKSEL PPSLOCK
    MOVLB   PPSLOCK
    MOVLW   55h
; Required sequence, next 4 instructions
    MOVWF   PPSLOCK
    MOVLW   AAh
    MOVWF   PPSLOCK
; Set PPSLOCKED bit to disable writes
; Only a BSF instruction will work
    BSF     PPSLOCK,0
; Enable Interrupts
    BSF     INTCON0,GIE  ; újból engedélyezzük glábálisan a megszakításokat

Magyarázat: A PPSLOCK regiszternek csak egy bitje van, a 0. bit, más néven  a PPSLOCKED bit ( PPSLOCK<PPSLOCKED> ). Tulajdonsága: R/W-0/0

 

Példaprogram PIC18F45K42-re



;config_I2C1_SSP:   Meg nem teszteltem!!!    
  nop 
    
; FELADAT: 
; RC3-hoz rendelem az SCL -t
; RC4-hez rendelem az SDA -t      
   
; Digitalis I/O legyen az RE3 es RE4 ic lab  
   banksel ANSELC 
   bcf ANSELC,ANSELC3  ; ne legyen az RE3 IC lab analog bemenet pld. az A/D-hez
   bcf ANSELC,ANSELC4  ; ne legyen az RE4 IC lab analog bemenet pld. az A/D-hez   
;          ..........
   
; PPS UNLOCK szekvencia megirasa, hogy lehessen a labakat hozzarendelni
    BCF     INTCON0,GIE ; letiltjuk globálisan a megszakításokat
; Bank to PPSLOCK register
    BANKSEL PPSLOCK
;   MOVLB   PPSLOCK  ; BSR regiszter feltoltese be nem tudom
    MOVLW   h'55'  ; h'55'
; Required sequence, next 4 instructions
    MOVWF   PPSLOCK
    MOVLW   h'AA'  ; h'AA'
    MOVWF   PPSLOCK
; Engedelyezni a modul-lab osszerendeleseket  
; Torolni a PPSLOCK<PPSLOCKED> (0. bit) bitet
; CONFIG PPS1WAY = OFF ; eseten programbol sokszor, ON eseten csak egyszer    
; Csak bcf utasitasra enhedelyzi a periferiahozzarendelesek beirasat
    BCF     PPSLOCK,0 ; engedilyezve a porhozzarendeles modositas (UNLOCK)
    BSF     INTCON0,GIE ; újból engedélyezzük glábálisan a megszakításokat      
;          ...........
    
; RC3-at az SCL-hez rendelem      
    ; Két regiszter szolgál erre a célra:
    ; xxxPPS: PERIPHERAL xxx INPUT SELECTION (Kat:277.old)  6 bites 
    ; RxyPPS:  OUTPUT SOURCE SELECTION REGISTER  RxyPPS (Kat:280.old)   5 bites 
    ; PPSLOCK: PPS LOCK REGISTER (Kat:283.old.) 1 bites -> PPSLOCKED = 0. bit    
    banksel RC3PPS
    movlw h'21' ;  21h = 100001b  6 bites adat!!
    movwf RC3PPS ; cim: 3A13h  
    
    ; Kat. 277 oldal  xxxPPS regiszter h'13' RC3 
    banksel I2C1SCLPPS
    movlw h'13' ; 5 bites adat
    movwf I2C1SCLPPS  ; cím 3AE1h, 5 bites regiszter
    
; RC4-et az SDA-hoz rendelem    
    ; Kat 281 old szerint 22h 8 6 bites adat
    banksel RC4PPS
    movlw h'22' ; 22h = 100010b 6 bites adat!!!
    movwf RC4PPS ; cim: 3A14h, 5 bites regiszter RxyPPS -> xxxPPS
    
; Kat. 277 oldal  xxxPPS regiszter h'13' RC4    
    banksel I2C1SDAPPS
    movlw h'14' ; 5 bites adat
    movwf I2C1SDAPPS ; cím: 3AE2h 5 bites regiszter  
;          ...........
    
; PPS LOCK szekvencia megirasa, hogy ne lehessen innentol a labakat hozzarendelni    
    BCF     INTCON0,GIE ; letiltjuk globálisan a megszakításokat
; Bank to PPSLOCK register
    BANKSEL PPSLOCK
  ; MOVLB   PPSLOCK ; doksi szerint van, de szerintem nem kell, sot nem szabad!
    MOVLW   h'55'
; Required sequence, next 4 instructions
    MOVWF   PPSLOCK
    MOVLW   h'AA'
    MOVWF   PPSLOCK
    BSF     PPSLOCK,0
; Enable Interrupts
    BSF     INTCON0,GIE  ; újból engedélyezzük glábálisan a megszakításokat
;          ............    
    
; Nyitott kollektorossa kell tenni az SCL es SDA kimeneteket        
    bsf ODCONC,3 ;  RCA3
    bsf ODCONC,4 ;  RCA4
;          ............
     
; // Be kell állítani az I2C szintet     
    bsf RC3I2C,0 ; TH bit csak nem ismeri a fordító
    bsf RC4I2C,0 ; TH bit, csak nem ismeri a fordító
;          ............    
  
; A be/ki meneteket kimenette kell beallitani. Gondolom a szolgánál meg bemenetté!  
    
    bcf TRISC,3 ;
    bcf TRISC,4 ;
;          ............    
    
; IC LABAK TOVÁBBI BEALLITASA I2C KOMMUNIKACIORA (Kat.:271.old)
; 0-1 bit ->TH, 1-5. bit -> PU, 6. bit -> SLEW, a tobbi nem hasznalt
; RC3-hoz = SCL,   RC4-hez = SDA      
    movlw b'01010001' ;   
    movwf RC3I2C ; [ felhuzo ellenallasok es
    movwf RC4I2C ;   I2C kompatibilissa tetel  ]    
    
    ; ***** EZZEL VEGE A BEALLITASOKNAK *****
;Innentol engedélyezni kell, illetve lehet engedélyezni az I2C1 modult