UART mudullal aszinkron kapcsolat két mikrokontroller közt

 

EUSART mudullal aszinkron kapcsolat két mikrokontroller közt (Pic18F4550) rádókapcsolatos modulok felhasználásával

Pic könyv I. 177-182 old.

http://www.microcontrollerboard.com/pic_serial_communication.html

http://www.tankonyvtar.hu/hu/tartalom/tamop412A/2010-0017_41_mikrovezerlok_alkalmazasa/ch15s04.html

Pic16 : http://ww1.microchip.com/downloads/en/AppNotes/00944A.pdf

/sites/kovacsistvan.kkfh.hu/files/Pic18F4550.pdf

Példaprogramok (saját):
5 karakterből álló stringet elküldök a számítőgépről a mikrokontrollerhez, ami aztán az "OKE: " stringet eléfűz és visszaküldi. Ez direkt UART on is és rádiómodulok közbeiktatásával is működik: Letölthető .txt formátumban.

 

 

 

 

 

Az USART-tal kapcsolatos regiszterek:
•TXSTA: adás vezérlőés státuszjelzőbitek
•RCSTA: vétel vezérlőés státuszjelzőbitek
•SPBRG: bitsebesség generátor beállító regisztere
•TXREG: adás puffer•RCREG: vételi puffer
•Ide vonatkozó megszakításokkal kapcsolatos regiszterek

USART használata esetén a többfunkciós IC lábakat (Mindkettőt!) bemenetté kell állítani és az USART-modult kell aktiválni  
TRISC<7> = 1 vagyis: BSF TRISC,7;
TRISC<6> = 1 vagyis: BSF TRISC,6;
RCSTA<7> = 1 vagyis BSF RCSTA,SPEN ; (SPEN -> RCSTA <7>)

 

Használt regiszterek megnevezése:

  • INTCON /Intcon Control Register/ Megszakítás beállító regiszter
  • PIR1 /Pheripheal Interrupt Flag register/ Periféri (Pld.: adó, vevő) megszakításjelző bitek regisztere
  • PIE1 /Peripheal Interrupt Enable Register/  Periféria (Pld.: adó, vevő) megszakítás engedélyező regiszter
  • IPR1 ?megszakítás pioritásbeállító?
  • RCSTA /RECEIVE STATUS AND CONTROL REGISTER/  Vételi állapot és vezérlő regiszter
  • TXREG /Transmit Register/
  • RCREG
  • TXSTA /TRANSMIT STATUS AND REGISTER/ Adó állapot és vezérlő regiszter
  • BAUDCON
  • SPBRGH /Serial Port Baud Rate Generator High Register/ Soros órajel 16 biten beállító regiszter felső bájtja  BRG16=1 esetén
  • SPBRG /Serial Port Baud Rate Generator Register/ Soros órajel 8 biten beállító regiszter BRG16=0 esetén vagy BRG16=1 esetén az alsó bájt megadott (kiszámolt) értéke.

 

 

 
Regiszter 7. bit 6. bit 5.bit 4. bit 3. bit 2. bit 1. bit 0. bit Dok.
old.
INTCON GIE/GIEH
R/W-0
PEIE/GIEL
R/W-0
TMR0IE
R/W-0
INT0IE
R/W-0
RBIE
R/W-0
TMR0IF
R/W-0
INT0IF
R/W-0
RBIF
R/W-x
101
PIR1 SPPIF
R/W-0
ADIF
R/W-0
RCIF
R-0
TXIF
R-0
SSPIF
R/W-0
CCP1IF
R/W-0
TMR2IF
R/W-0
TMR1IF
R/W-0
104
PIE1 SPPIE
R/W-0
ADIE
R/W-0
RCIE
R/W-0
TXIE
R/W-0
SSPIE
R/W-0
CCP1IE
R/W-0
TMR2IE
R/W-0
TMR1IE
R/W-0
106
IPR1 SPPIP
R/W-1
ADIP
R/W-1
RCIP
R/W-1
TXIP
R/W-1
SSPIP
R/W-1
CCP1IP
R/W-1
TMR2IP
R/W-1
TMR1IP
R/W-1
108
RCSTA SPEN
R/W-0
RX9
R/W-0
SREN
R/W-0
CREN
R/W-0
ADDEN
R/W-0
FERR
R-0
OERR
R-0
RX9D
R-x
245
TXREG EUSART adat regiszter elküldésre  
RCREG EUSART adat regiszter adat fogadásra  
TXSTA CSRC
R/W-0
TX9
R/W-0
TXEN
R/W-0
SYNC
R/W-0
SENDB
R/W-0
BRGH
R/W-0
TRMT
R-1
TX9D
R/W-0
244
BAUDCON ABDOVF
R/W-0
RCIDL
R-1
RXDTP
R/W-0
TXCKP
R/W-0
BRG16
R/W-0
--- WUE
R/W-0
ABDEN
R/W-0
246
SPBRGH (E)USART Baud Rate regiszter magas bájtja 248
SPBRG (E)USART Baud Rate regiszter alacsony bájtja 248

(E)USART adáskor és vételkor egyaránt használt bitek
(E)USART csak adáskor használt bitek
(E)USART csak vételkor használt bitek
(E)USART használatkor egyéb beállítandó bitek
(E)USART használata esetén nincsenek hatással, vagyis figyelmen kívül hagyhatók

 

 

 

 
Regiszter neve
Bit neve és sorszáma
 
INTCON  
GIE vagy GIEH
INTCON <7>
GIE: Globálisan a megszakítások engedélyezése egyszintű megszakítás esetén.
GIEH: globálisan a magas szintű megszakítások engedélyezése kétszintű megszzakítás esetén.
Megj.: RCON regiszter, IPEN bitjével (RCON,IPEN=1) engedélyezzük vagy (RCON,IPEN=0) tiltjuk a kétszintű megszakítást.
INTCON,
PEIE vagy GIE
PEIE: Periféria (belső is, így pld. TMRx) által generált megszakítás (INTCON,PEIE=1) engedélyezése vagy (INTCON,PEIE=0) tiltása egyszintű megszakítás esetén.
GIEL: Globálisan az alacsony szintű megszakítások engedélyezése kétszintű megszzakítás esetén.
Megj.: RCON regiszter, IPEN bitjével (RCON,IPEN=1) engedélyezzük vagy (RCON,IPEN=0) tiltjuk a kétszintű megszakítást.
RCIF
PIR1<5>
UART soros port RX bemenetére érkező jelre a megszakításbit "1"-re vált (PIR1,RCIF=1), amit majd a programból kell törölni.
TXIF
PIR1<4>
 
RCIE
PIE1<5>
Engedélyezzük (PIR1,RCIE=1) az UART soros port RX bemenetére érkező jelre a megszakítást.
TXIE
PIE1<4>
 
RCIP
IPR1<5>
Az UART soros port RX bemenetére érkező jelre a megszakítás pioritását lehet beállítani a bittel *1
0 = Alacsony szintű megszakítás
1 = Magas szintű megszakítás 

 *1 Megvalósulásához további beállítások is szükségesek.
TXIP
IPR1<4>
Az USART soros portnál a kiment adatra történő megszakítás proritását (szintjét) lehet beállítani a bittel *1
0 = Alacsony szintű megszakítás
1 = Magas szintű megszakítás

*1 További beállításokra is szükség van a megszakításhoz
SPEN
RCSTA<7>
SPEN /Serial Port Eneble bit/: Soros portot engedélyező bit
0 = Tiltja a soros portot (Reset esetén megmarad a "0")
1 = Soros portként konfigurálja  (RX/DT és a TX/CK lábakat soros por lábaknak állítja be)
Megj.:  A megfelelő lábakat előbb bemenetté kell konfigurálni, legalábbis szerintem, a biztonság kedvéért!
RX9
RCSTA<6>
RX9 / 9-Bit Receive Enable bit/ 9 bites adathosszúságú vételt engedélyező bit
0 = 8 bites vétel
1 = 9 bites vétel
SREN
RCSTA<5>
SREN /Single Receive Eneble bit/ Egyszeri vételt engedélyező bit
Aszinkron üzemmód:
0 = Egyszeri vétel tiltása
1 = Egyenkénti vétel engedélyezése
Megj.: A vétel megtörténte után az SREN bit törlődik
Szinkron módban szolgakénti vételkor hatástalan.
Aszionkron módban hatástalan, de a katalógusben nem szerepel, de lehet, hogy ??????????
SREN: Egyetlen befogadó bit engedélyezése. Ez a bit nincs hatással aszinkron üzemmódra és szinkron slave üzemmódra. Ennek a bitnek a beállítása lehetővé teszi az Egyszeri fogadást. Ez a bit a vétel befejezése után törlődik.
CREN
RCSTA<4>
CREN /Continous Receive Eneble bit/Folyamataos vételt engedélyező bit
    Aszinkron üzemmód: 
0 = Folyamatos vétel tiltása. Katalógus szerint: Letiltja a vételt
1 = Folyamatos vétel engedélyezése. Katalógus szerint: Engedélyezi a vételt

    Szinkron üzemmód:
0 = Letiltja a folyamatos vételt
1 = Engedélyezi a folyamatis vételt míg a CREN-t nem törlik, ha törlik, akkor a CREN felülbírálja az SREN-t
---------------------------------------------------------------------
bcf RCSTA,CREN; Hiba torlese, gondolom mert nem olvastuk ki a regiszter
    bsf RCSTA,CREN; Engedélyezzük a vetel adatregiszteret.
--------------------------------------
CREN: Folyamatos fogadás engedélyezése bit. A bit beállítása lehetővé teszi a folyamatos fogadás funkciót. A szinkron üzemmódban a CREN felülírja a SREN-t.
ADDEN
RCSTA<3>
ADDEN /Address Detect Enable bit/ Címzésként érzékeli az adatot mód bekapcsiolása
0 = Letiltja a címek detektálását, minden bitet fogad, így a 9. bitet paritásbitnek lehet használni.
      Aszinkron módban a 8. bit (RX9 = 0): nem hatásos
1 = Engedélyezi a címek detektálását, engedélyezi a megszakítást és betülti a fogadási puffert ha RSR<8> értéke 1.
FERR
RCSTA<2>
FERR /Freming Error bit/ Frame hiba jelzőbit. A freme (keret) a START bittel kezdődik és a STOP bittel végződik. 
0 = Nincs frame hiba
1 = frame hiba (nincs stopbit)
OERR
RCSTA<1>

 
OERR /Overrun Error bit/ Ráfutást jelző bit
0 = Nincs réfutási hiba
1 = Ráfutás történt (Törlése: CREN bit törléssel ami az RCSTA regiszterben van)
RX9D
RCSTA<0>
Kilencedik adatbit.
Vett adat 9. bitje, pld. paritásbit. Paritásbitet nekünk kell előállítani.
TXREG<0..7>  
RCREG<0..7>  
CSRC
TXSTA<7>
CSRC /Clock Source Select bit/ Óraforrás kiválasztó bit
Aszinkron módban:
Nincs értelme mert csak belső előállítás van, mégpedig összehangban a két hardver egység között.  Az összehangolás lesz a lényeges.

Szinkron módban:
0 = Szolga üzemmódban külső órajelből
1 = Mester módban belső előállítás BRG (Baud Rate Generator) egységból
TX9
TXSTA<6>
TX9 /9-Bit Transmit Enable bit/ Adathosz választó bit (8 vagy 9 bites)
0 = 8 bites adatküldés (ehhez hozzáadósik a START és a STOP bit) történik
1 = 9  bites adatküldés (ehhez hozzáadósik a START és a STOP bit) történik. A 9 bit lehet paritásbit vagy címadatot jelző vit a konfigurálásnak megfelelően
TXEN
TXSTA<5>
TXEN*1 /Transmir Enable bit/ Adatküldést engedélyező bit
0 = Adatküldés tiltva van
1 = Adatküldés engedélyezve van
*1: A SREN/CREN felülbírálja a TXEN szinkron módot, azzal a kivétellel, hogy a SREN nincs hatással a szinkron Slave üzemmódban.
SYNC
TXSTA<4>
SYNC /EUSART Mode Select bit/ Szinkron/aszinkron üzemmód kiválasztó bit
0 = Aszinkron üzemmód
1 = Szinkron üzemmód
SENDB
TXSTA<3>
SENDB /Send Break Character bit/ ?Küldje el a Break karakterbitet?
???????
BRGH
TXSTA<2>
BRGH /High Baud Select bit/ Magas baud engedélyező bit. Baudrata kiszámításnál fontos.
0 = Alacsony sebesség
1 = magas sebesség
Szinkron módban: Nincs használatban 
TRMT
TXSTA<1>
TRMT /Transmit Shift Register Status bit/  Adatküldés shift regiszter stásuszát jelző bit.
Adatküldéskor ezt a regisztert kell fogyelni, hogy áttöltődöt-e az adat a tényleges adatküldő shift regiszterne. ha 0-ra vált, betölthetjük a következő adatot.
0 = TSR regiszter tele van, vagyis megtelt
1 = TSR regiszter üres, így beletölthető a (következő) adat elküldésre.
TX9D
TXSTA<0>
TX9D /9th bit of Transmid Data/ 9. adatbit, ami a beállítástól függően lehet címadatot jelző bit és lehet paritásbit. Mi írjuk be még az adatregiszter (TXREG) feltöltése előtt.
ABDOVF
BAUDCON<7>
ABDOVF /Auto-Baud Acquisition Rollover Status bit/ Automatikus baud (adatátviteli sebesség) megkeresés engedélyező bit 
0 = Nincs automatikus baudsebesség megállapítás a vevőnél, ezt nekünk kell beállítani programból
1 = Van automatikus baudsebesség megállapítás. Ilyenkor 55H (h'55') adatot illetve karaktert kell az adónak elküldeni, amiből a fogadó (vevő) meg tudja állapítani az adatsebességet (Baud-ot). ha a megállapítás megtörtént, tudtommal törölni kell ezt a bitet az üzemszerű adatátvitelhez.
RCIDL
BAUDCON<6>
RCIDL /Received operation Idle Status bit/ Adatfogadást Idle üzemmódban bekapcsoló bit
0 = Adatfogadás csak aktív üzemmódban 
1 = Az adat fogadása Idle üzemmódban is
RXDTP
BAUDCON<5>
RXDTP /Received Data Polarity Select bit/ A vett adat polaritását beállító bit
Aszinkron üzemmódban:
0 = A beérkezett adatok nincsenek invertálva
1 = A vett adatok fordított polaritásúak, vagyis invertáltak
Szinkron Üzemmód:
0 = Nem fordítottak (nem invertáltak) a vett adatok. Az Idle (készenléti) állapot magas szintű???
1 = A vett adatok invertáltak.Az Idle állapot alacsony szintű.
TXCKP
BAUDCON<4>
TXCKP /Clock and Data Polaríty Select bit/ A kimenő órajel és adatok polaritását beállító bit
Aszinkron üzemmódban:
0 = A kimenő adatok nem invertáltak.
1 = A kimenő adatok invertáltak.
Szinkron üzemmódban:
0 =  A kimenő szinkronjel nem fordított polaritású (nem invertált)
1 = A kimenő szinkronjel fordított polaritású (invertált). Idle állapot alacsony szintű???
BRG16
BAUDCON<3>
BRD16 /16-Bit Baud Rate Generator Register Enable bit/ 
0 = 8 bites Baud Rate generáló baudsebesség beállító használata. Ilyenkor az SPBRGH figyelmen kívül van hagyva, csak az SPBRG számít, viszont a generálásban benne van az SPBRGH, így mindenképpen 16 bites szálálóként fog működni. (Kompatibilitás végett van ez a megoldás)
1 = 16 biten történik a Baud Rate generálóban baudsebesség beállítása. Így SPBRGH és SPBRGH együttes értéke számít.
WUE
BAUDCON<1>
WUE /Wake-up Enable bit/ Ébresztést engedélyezőú bit / ! Törölnöm kellett, mert máskülönben nem voltak korrektak az adatok, főként az első néhány adat, valamint nem ott állt meg a beolvasáso folyamat, ahol kellett volna !!!!!!!!!
Aszinkron üzemmód:
0 = Nem figyeli az RX adatfogadó lábat, hogy adat érkezik-e, így nem is lesz megszakítás
1 = EUSART-nál folyamatosan figyeli az RX adatfogadó lábat, ha jelváltozás történik, akkor megszakítást vált ki és elindítja az órajelet

megj.: ha 1, akkor automatikus ébresztés engedélyezve van vételnél (más leírás) Eredeti lefordítva: *1
-------------------------------------------------------------------------------
With the auto-wake-up option enabled by setting the WUE bit (BAUDCON<1>), the RCIF (PIR1<5>) bit will become set on a high-to-low transition on the RX pin. However, the WUE bit may not clear within 1 TCY of a low-to-high transition on RX. While the WUE bit is set, reading the receive buffer, RCREG, will not clear the RCIF interrupt flag. Therefore, the first opportunity to automatically clear RCIF by reading RCREG may take longer than expected.
ABDEN
BAUDCON<0>
ABDEN /Auto-Baud Detect Eneble bit/ A baudsebességet automatikusan megállapító műveletet engedélyező bit
Aszinkron üzemmódban:
0 = Nincs használva
1 = Engedélyezi az automatikus baud sebesség megállapítását a következő karakter segítségével. Ez a karakter 55H = 01010101. A megállapítás után törölve???
SPBRGH<0..7> SPBRGH /Serial Port Baud Rate Generator High Register/ Soros adatátvitel órajelet 16 biten beállító regiszter felső bájtja  BRG16=1 esetén
SPBRG<0..7> SPBRG /Serial Port Baud Rate Generator Register/ Soros adatátvitel órajelet 16 biten beállító regiszter alsó bájtja  BRG16=1 esetén, vagy BRG16=0 esetén egy bájton megadva.
   
   
   
   
   

*1 : Alvás üzemmódban az összes óra az EUSART-hoz tartozik
felfüggesztett. Emiatt a Baud Rate Generátor
inaktív, és a megfelelő bájtvétel nem lehet
teljesített. Az automatikus ébresztés funkció lehetővé teszi a
vezérlő az ébresztés miatt az aktivitás az RXx / DTx
míg az EUSART aszinkronban működik
mód.
Az automatikus ébresztés funkció engedélyezve van a
WUE bit (BAUDCONx <1>). Egyszer beállítva, tipikus
az RXx / DTx szekvenciája nem engedélyezett, és a
Az EUSART készenléti állapotban van, figyelemmel kísérve a
ébresztő esemény a CPU üzemmódtól függetlenül. Felébred
Az esemény a nagy-alacsony átmenetből áll
RXx / DTx vonal. (Ez egybeesik a Sync kezdetével
Break vagy Ébresztő jel karakter a LIN protokollhoz.)
Ébresztő esemény után a modul egy
RCxIF megszakítás. A megszakítást szinkron módon generálják
a Q órákhoz normál üzemmódban
(20-8 ábra) és aszinkron módon, ha a készülék be van kapcsolva
Alvó üzemmód (20-9. Ábra). A megszakítási feltétel
törölve az RCREGx regiszter olvasásával.
A WUE bit automatikusan törlődik, ha alacsony a toaugár
az RX vonalon az átmenet figyelhető meg
ébresztő esemény. Ezen a ponton az EUSART modul van
Készenléti üzemmód és visszatér normál működésbe. Ez jelzi
hogy a Sync Break esemény véget ért.

 

http://www.microchip.com/forums/m571452.aspx

n= ((Fosc / Desired Baud rate) / 64) -1

 

 

 

 

 

Számítás 248 old

https://www.hobbielektronika.hu/cikkek/egyszeru_soros_kommunikacio_avr-rel_uart.html?pg=3

 

Hasznos: http://forum.chipcad.hu/printable.asp?m=3294

Példaprogram: http://www.uni-obuda.hu/users/molnarzs/PIC_mikrovez_II.pdf

-----------------------------------------------------

Más rádiókapcsolatos leírások: https://www.hobbielektronika.hu/forum/getfile.php?id=191152

http://www.radiotechnika.hu/images/319-321o12.pdf

http://www.pictutorial.net/2015/10/how-to-interface-RF-module-with-microcontroller.html