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.)
A 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