Mester adatot küld a szolgának

Mester adatot küld a szolgának  

MESTER SZOLGA
Megelőző lépések:

1.1.
;A PIC lábak digitális I vagy O-vá konfigurálása. Példa PIC18F25K42-nél:

    banksel ANSELC ; 11/28  : RC0  ; Digitális I/O legyen
    bcf ANSELC,ANSELC0,BANKED  ; ne legyen az RC0 IC lab analog bemenet 
    
1.2.
; Mindkét kivezetés egy közös lábra fog menni.
; Be vagy kimenet legyen a két láb ( TX és RX ):    

    banksel TRISC ; 0-val kimenetnek kell beállítani
    bcf TRISC,0,BANKED ; kimenet legyen FONTOS! 

1.3.
Az UART  TX kimenet és RX  bemenet IC lábhoz  rendelése PPS eljárással.
Példa az unlock és lock eljárások nélkül:

 ; TX ;
    banksel RC0PPS  ; 279. old.  6 bites adat!! 
    movlw b'00010011' ;    JAVÍTANI, HELYETTESÍTENI VÁLTOZÓVAL!!!  
    banksel RC0PPS
    movwf RC0PPS,BANKED ;  UART1 Lin1 PPS csoroszják bal     
    
 ; RX  
  banksel U1RXPPS ; T: ez a 3 sor elvileg nem kell
  movlw b'010000' ; 6 bites adat 275.old. 11/28  : RC0 
  movwf U1RXPPS,ACCESS ;

1.4. 
Baudsebesség beállítása:

1.4.1. baudgenerátor beállítása
    banksel U1BRG ;
    movlw d'0' ;  x.old.
    movwf U1BRGH,BANKED ;     
    movlw d'51' ;  D:505. old.
    movwf U1BRGL,BANKED ;  

1.4.2.
Baudsebesség szorzójának beállítása
    banksel U1CON0
    bcf U1CON0,BRGS ; 16 szoros szorzó választása (normál seb.)
    bsf U1CON0,BRGS ; 4 szeres szorzó választása

1.5. További beállítások, bekapcsolás

1.5.1. Üzemmód beállítása
    banksel U1CON0 ;
    movlw b'1100' ;  LIN mester/szolga üzemmód    
    movwf U1CON0,MODE ;

1.5.2.
    bsf U1CON0,TXEN ; Adatküldés engedélyezése

1.5.3.
    bsf U1CON0,RXEN ; Adatfogadás engedélyezése

1.5.4.
   banksel U1CON2 ; Adatok polaritásának beállítása
   bcf U1CON2,TXPOL ; Nem fordított polaritású

1.5.5. STOP jel szélességének és dupla szélesség esetén érzékelésének beállítása.
    ;  U1CON2,STP = 0b00; ( STP= <5:4>)  D:500. old.
    bcf  U1CON2,4  ; 00 esetén 
    bcf  U1CON2,5  ; normát 1 bit széles

1.5.6. Ellenőrzőösszeg hatályának beálélítása
    bcf  U1CON2,C0EN ; 0 esetén nem számolja bele a PID-et.
                                     ; 1 esetén a PID-et is beleszámolja

1.6.  A modul bekapcsolása
    banksel U1CON1 ;
    bsf U1CON1,ON_U1CON1 ;
 


1.1.
;A PIC lábak digitális I vagy O-vá konfigurálása. Példa PIC18F25K42-nél:

    banksel ANSELC ; 11/28  : RC0  ; Digitális I/O legyen
    bcf ANSELC,ANSELC0,BANKED  ; ne legyen az RC0 IC lab analog bemenet 
    
1.2.
; Mindkét kivezetés egy közös lábra fog menni.
; Be vagy kimenet legyen a két láb ( TX és RX ):    

    banksel TRISC ; 0-val kimenetnek kell beállítani
    bcf TRISC,0,BANKED ; kimenet legyen FONTOS! 

1.3.
Az UART  TX kimenet és RX  bemenet IC lábhoz  rendelése PPS eljárással.
Példa az unlock és lock eljárások nélkül:

 ; TX ;
    banksel RC0PPS  ; 279. old.  6 bites adat!! 
    movlw b'00010011' ;    JAVÍTANI, HELYETTESÍTENI VÁLTOZÓVAL!!!  
    banksel RC0PPS
    movwf RC0PPS,BANKED ;  UART1 Lin1 PPS csoroszják bal     
    
 ; RX  
  banksel U1RXPPS ; T: ez a 3 sor elvileg nem kell
  movlw b'010000' ; 6 bites adat 275.old. 11/28  : RC0 
  movwf U1RXPPS,ACCESS ;

1.4. A baudsebességet később, a szinkronizáló (0x55) jel megérkezése után fogja kiszámolni a modul

1.5. További beállítások, bekapcsolás

1.5.1. Üzemmód beállítása
    banksel U1CON0 ;
    movlw b'1011' ;  LIN (csak) szolga üzemmód    
    movwf U1CON0,MODE ;

1.5.2.
    bsf U1CON0,TXEN ; Adatküldés engedélyezése

1.5.3.
    bsf U1CON0,RXEN ; Adatfogadás engedélyezése

1.5.4.
   banksel U1CON2 ; Adatok polaritásának beállítása
   bcf U1CON2,TXPOL ; Nem fordított polaritású

1.5.5. STOP jel szélességének és dupla szélesség esetén érzékelésének beállítása.
    ;  U1CON2,STP = 0b00; ( STP= <5:4>)  D:500. old.
    bcf  U1CON2,4  ; 00 esetén 
    bcf  U1CON2,5  ; normát 1 bit széles

1.5.6. Ellenőrzőösszeg hatályának beállítása
    bcf  U1CON2,C0EN ; 0 esetén nem számolja bele a PID-et.
                                 ; 1 esetén a PID-et is beleszámolja



1.6.1. ha a mester használja a LIN kommunikációs vonalat, akkor  a szolga ezt érzékelve megszakítást generál, hogy le tudja kezelni kezelni a mester által küldött további jeteket.
    banksel IPR3          ; { ha adat érkezik au U2RXB-be    
    bcf IPR3,U1IP,BANKED ; UART2 alacsonyszintú megszakítás    
    bcf IPR3,U1RXIP,BANKED ; <U2RXP>=<2>=0 alacsony szintű megszakítás legyen 
    
    banksel PIE3 ;     
    bsf PIE3,U1IE ; engedélyzve au UART2-nek a mgszakítás    
    bsf PIE3,U1RXIE,BANKED ; <2>=1 UART2 vételnél a tényleges megszakítás 

1.6.2. Ha alvó üzemmódot is használunk a szolgánál, akkor LIN-nél az ébresztést a WUE bit 1-re állításával valósíthatjuk meg.

    bsf U1CON1,WUE ; 1-el ébresztés engedályezése

U1CON1,RXBIMD
RXBKIF


1.7.  A modul bekapcsolása
    banksel U1CON1 ;
    bsf U1CON1,ON_U1CON1 ;

 
2. Meg kell adni, a PID-et az alsó 6 biten, vagyis a szolgák közül a kiválasztott 
szolga azonosítóját az U1P1L regiszterben, minek hatására azonnal adni kezd.
A másik 2 bitet automatikusan megadja a modul, amiket hibamegállapításra használ majd fel a szolga, mégpedig automatikusan.    
60 címet tudunk így megadni, a maradék 3 egyéb célra használható. A cím egyben tartalmazhatja azt is, hogy a szolgától mit vár el a mester, tehát a PID többes funkciójú.

a.)
 Konstanssal történő PID megadás:
    banksel U1P1L
    movlw d'8' ;  Itt 8 at adunk meg PID-nek. Maximun 6 bites érték lehet
    movwf U1P1L,BANKED ;    

b.)
Változóval történő PID megadás:
    banksel U1P1L
    movffl változó,U1P1L ; Korábban (max. 6 bites) értékkel feltöltött
                                   ; változóval megvalósított értékadás

A PID magadásával automatikusan kimegy a BREAK jel, a szinkronizáló (0x55) jelsorozat.
A PID <7:6> jeleket a modul állítja ba hibamegállapítás céljából.
 
A szolga ekkor már kész az adatvonolun a jelek feldolgozására, mindenekelőtt a mester által elküldendő BREAK jel, valamint egy bitnyi hibafigyelő felengedő jel, majd a PID jel fogadására, de ezekrél lentebb részletesen olvasható.
  ADATÁRAMLÁS (nem tényleges adat): BREAK jel
Magyarázat: A BREAK jel  úgy valósul meg, hogy a mester az adatvonalat lehűzza 0V-ra 13 óraimpulzus időtartamra.
A mestertől érkezett BREAK jelre a szolga mőködésbe lép. Mégpedig úgy, hogy megszakítást generál és elugrik a a mestertől érkező jelek lekezelésére írt kódrészekhez a szolgánál. Tehát most elsőként BREAK történt.

Feltehetően a mester figyeli a saját BREAK jelének meglétét.
2. BREAK jel fogadása, lekezelése
Programból figyelhetjük (nem muszáj csak tanácsos) BREAK jel megszűnését. Megj.: Mivel a megszakítást a BREAK jel váltja ki és így már BREAK alatt idekerül a programvégrahajtás. A szolgánál a megszakítás után a programból BREAK megszűnését célszerű figyelni.

    btfsc U1CON1,SENDB; 
    bra $-2 ; vagy  vissza egy cimkére például hibafigyelés használatakor.

3. A szolgának meg kell adni a címét, hogy a szinkronizáló jel után következő felengedő jel után érkező PID feldolgozásához meg legyenek az adatok. 
 

 
ADATÁRAMLÁS (nem tényleges adat): FELENGEDETT jel:
 
  4. A FELENGEDETT jel (nem tényleges adat) figyelése.
Ha az 1 bit hosszúságú FELENGEDETT jel sikeresen megtörténik, amit a szolga a TX-el közösített RX adatbemenet vonalon figyel, akkor további jelek várhat a mestertől. Ha viszont valami lehúzta az adatvonalat, akkor hibát fog érzékelni és feltehetően itt megáll a kommunikáció.
4. A SZINKRONIZÁLÓ jel, vagyis a 0x55 jelsorozat (nem tényleges adat) automatikus kiküldése a mester által az adatvonalra. 5. A SZINKRONIZÁLÓ jel, vagyis a 0x55 jelsorozat (nem tényleges adat) figyelése ami a mestertől érkezik.

Break fogadása
Az UART számlálók érzékelik, hogy az RX bemenet hosszabb ideig marad-e a térállapotban. Amikor ez megtörténik, az RXBKIF bit az UxERRIR regiszter be van állítva.
A szünetet akkor észleli, amikor az RX bemenet az aszinkron és LIN módok 11 bit periódusának térbeli állapotában marad, és DMX módban 23 bites időszak.
A felhasználó kiválaszthatja, hogy megkapja-e a szünet megszakítását, amint a szünetet észleli, vagy a Break, ha az RX bemenet visszatér az alapállapotba.
Ha az UXCON1 RXBIMD bitje „1”, akkor az RXBKIF azonnal megtörténik a Break felismerés után.
Ha az RXBIMD értéke „0”, akkor az RXBKIF akkor kerül beállításra, amikor az RX bemenet visszatér az alapállapotba.
 
31.19   Receiving a Break
The UART has counters to detect when the RX  input remains in the space state for an extended period of time. When this happens, the RXBKIF bit in the
UxERRIR register is set.
A Break is detected when the RX input remains in the space state for 11 bit periods for asynchronous and LIN modes, and 23 bit periods for DMX mode. 
The user can select to receive the Break interrupt as soon as the Break is detec ted or at the end of the
Break, when the RX input returns to the Idle state.
When the RXBIMD bit in the UxCON1 is ‘1’ then RXBKIF is set immediately upon Break detection.
When RXBIMD is ‘0’ then RXBKIF is set when the RX input returns to the Idle state. 
 
ADATÁRAMLÁS (nem tényleges adat): SZINKRONIZÁLÓ jel, vagyis a 0x55 jelsorozat amit a mester küld ADATÁRAMLÁS (nem tényleges adat): SZINKRONIZÁLÓ jel, vagyis a 0x55 jelsorozat amit a mester küld
5. Adatok betöltése elküldésre, hogy amikor odaér a programfutás, akkor mér csak el kelljen, hogy menjenek.  3 dolgot kell elvégeznünk, ezek a következők:
    
5.1. A PID btöltése U1P1L regiszterbe. A PID tartalmazza a szolga címét az alsó 6 <5:0> biten. Így decimális 60-ig tudunk címezni, mert 61-től 63-ig másra vannak fenntertva.  

;** Megadni, az PID-ta 6 biten, vagyis a szolgák közül a kiválasztott 
   ;szolga azonosítóját az U1P1L regiszterben, minek hatására azonnal adni kezd     
    banksel U1P1L
    movlw d'8' ; PID = 8
    movwf U1P1L,BANKED ;   


 
? ADATÁRAMLÁS (nem tényleges adat): BREAK jel
Magyarázat: A Mester BREAK jelet küld a szolgának.
A BREAK jel  úgy valósul meg, hogy a mester az adatvonalat lehűzza 0V-ra 13 óraimpulzus időtartamra.
7.  A szolga figyeli az adatvonalat és ha érzékeli az RX bemenetén (UART LIN) a jelváltozást, vagyis, hogy a feszültség leesik 0V körüli értékre, akkor a következők történnek:
  Ha alvó üzemmódban volt a szolga és ha be volt állítva az ébresztés az RX bemenetre, akkor megvalósul a felébrewsztés, vagyis futás üzemmódba kerül a szolga.
  Ha be volt állítva az RX bemenetre (UART LIN) a megszakítás, akkor megtörténik a beállított megszakítás. Tudtommal a megszakítást be lehet állítani, hogy a BREAK elején vagy végén valósuljon meg.

A programolvasás elkerül a fentebb említett módon vagy pollinggal a LIN fogadás programrészhez.


 
? ADATÁRAMLÁS (nem tényleges adat): FELENGEDETT jel:

A 13 bit hosszü 0V-os BREAK jel után 1 bit időtartamra a mester felengedi az adatvonalat pozitív feszültség irányába. Ha valami hiba végett nem érzékeli a mester a pozitív feszültséget az adatvonalom, akkor valószínűleg hibával megáll és valószínűleg hibabitet is beállít.
A 13 bit hosszü 0V-os BREAK jel után 1 bit időtartamra a mester felengedi az adatvonalat a pozitív feszültség irányába.

A szolga feladata ilyenkor az, hogy ne csináljon semmit, vagyis haggya hogy a felhúzó ellenállások felhúzzák az adatvonalon a feszültséget.
4. A SZINKRONIZÁLÓ jel, vagyis a 0x55 jelsorozat (nem tényleges adat) automatikus kiküldése a mester által az adatvonalra. 6. Szolga feldolgozza  a 0x55 SZINKRONIZÁLÓ és ezzel automatikusan felveszi a mester LIN szinkronjelét. Minden újabb adatkapcsokatnál ez az órajel szinkronizálás megtörténik.
? ADATÁRAMLÁS (nem tényleges adat): FELENGEDETT jel:

A  0x55 szinkronizáló jelsorozat után 1 bit időtartamra a mester felengedi az adatvonalat pozitív feszültség irányába.
Figyeli az RX bemenetet, hogy valami hiba végett nem érzékeli a mester a pozitív feszültséget az adatvonalom, akkor valószínűleg hibával megáll és valószínűleg hibabitet is beállít.
A  0x55 szinkronizáló jelsorozat után 1 bit időtartamra a mester felengedi az adatvonalat a pozitív feszültség irányába.

A szolga feladata ilyenkor az, hogy ne csináljon semmit, vagyis haggya hogy a felhúzó ellenállások felhúzzák az adatvonalon a feszültséget.
? ADATÁRAMLÁS (nem tényleges adat): PID jel:
A korábban beállított és létrehozott 8 bites PID jel amester általi elküldése az adatvonalra, vagyis a szolgáknak.
A szolga veszi a PID jelet és fel is dolgozza.
 
? ADATÁRAMLÁS (nem tényleges adat): LEHÚZOTT/FELENGEDETT jel:
Felengedi a mester az adatvonalat és figyeli az RX bemenetet, hogy a szolga jelzi-e azt az adatvonalon, hogy kész kommunikálni. Ezt úgy teszi, hogy 1 bitnyi hosszúságú ideig 0V körüli feszültségre lehúzza az adatvonalat.
A <7:6> bitek segítségével megállapítja az információtévesztést és a hibabit beállításával jelzi, valamint majd jelzi is azt az adatvonalon úgy, hogy nem jelez vissza az adatvinal 1 bitnyi hosszúságú 0V körüli feszültségre történő lehúzásával. Tehát, hivaérzékelés esetén nem jelet vissza.
Ugyancsak akkor sen jelez vissza, ha nem a vele megegyező címmel küldte a mester a PID jelet., bizonyára másik szolgával akar kommunikálni a mester.
   
?.?. Az első tényleges adatot is célszerű betölteni elküldésre. 
Megj.: Célszerű a FIFO ürességéről meggyőződni és üríteni, ha van benne adat. Kérdés az, hogy hogyan???
a.) 1. módszer változó felhasználásával
    movf Adat_1,W,ACCESS ; Ha ACCESS-ramban van a változó
    movwf U1TXB ;küldésre bemásoljuk az adatot
    banksel U1TXB ;
    movwf U1TXB,BANKED ;küldésre bemásoljuk az adatot

b.) 2. módszer újabb mikrokontrollereknél  változó felhasználásával 
    movffl Adat_1,U1TXB ;küldésre bemásoljuk az adatot
    banksel U1TXB ;
    movwf U1TXB,BANKED ;küldésre bemásoljuk az adatot

b.) 3. módszer  konstans (literal) felhasználásával 
    movlw d'23' ; des. 23 a W regiszterbe 
    banksel U1TXB ;
    movwf U1TXB,BANKED ;küldésre bemásoljuk az adatot