Füvesi Viktor
Elektrotechnikai és Elektronikai Tanszék
2008. május . 8
Alapkapcsolások Kommunikáció uC–k közti Programozási példák, egyszerű progik
Tápegység Nyomógomb Billentyűzet LED meghajtás Potencióméter Relé vezérlés Optikai leválasztás Motor vezérlés
Tápegység ~
230 V AC
Tr -
+
7805 +
~
+5 V DC
C1
C2 +
C3
Nyomógomb 1k 1k-470Ω – 470 ?
270Ω
+5V S1
270 ? S2
Billentyűzetek RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7
Sor (Kimenet)
Oszlop (Megszakításos bement)
Soros
Mátrix
Billentyűzetek
Billentyűzet ellenálláscsoport
A/D konverter
Analóg
Kiérteékelés
LED meghajtás
I/O
LED
I/O
LED
‘0’
ON
‘0’
OFF
‘1’
OFF
‘1’
ON
Analóg jel digitalizálása Feszültség osztás Potméterrel
Vbe
Mérési határ szűkítése
Mérési határ bővítése
A/D konverter
Bináris szám
Feszültség osztó és potenciométer
RB0
Vbe
(1 x)10k Vdd (1 x)10k x10k
RB0 RB1 RB2
R2
(1 - x) * 10k
RB1 RB2
+5V
R1
x * 10k
+5V
10k
Mérési határ szűkítés A 1
2k 1k
3
2k +5V 1k Vmért (0 - 1.7V)
-
10k
(0 - 5V)
+
100n
Nem invertáló bementről vezérelt erősítő használata
RA0 RA1 RA2
Mérési határ bővítés +5V 16.7k 50k
Vmért (-15 - 15V)
(-5 - 5V)
RA0 RA1
25k
100n
RA2
Relé vezérlés
(+5 - 12V)
relé 1k npn
Optoleválasztás +5V
+24V
DC motor vezérlés Sebesség változtatás ▪ Középfeszültség változtatás ▪ Négyszögjelek használata Impulzus szélesség változtatás Frekvencia változtatás
Forgásirány változtatás ▪ Áramirány változtatás ▪ H híd kapcsolás
DC motor vezérlés Sebesség változtatás ▪ Középfeszültség változtatás
Vki Vmax
▪ Négyszögjelek használata Impulzus szélesség változtatás Frekvencia változtatás
Vközép w
t T
T
Vközép
Vmax w T
Vmax w f
DC motor vezérlés Forgásirány változtatás ▪ Áramirány változtatás
VDD
VDD
▪ H híd kapcsolás S1
S1
S2
S3
S4
Állapot
1
0
0
1
Forgás jobbra
0
1
1
0
Forgás balra
0
0
0
0
Lassú megállás
0
0
1
1
Hirtelen megállás
S2
S1
M
M S3
S4
VSS
S2
S3
S4
VSS
DC motor vezérlés
VDD
Teljesítmény modul
S1
S2
Meghajtás
Védelem
Leválasztás
Érzékelők
Vezérlés
M S3
µC
Fordulatszám érzékelők
VSS
S4
Az uC perifériák területén a legnagyobb fejlődésen a kommunikációs perifériák mentek keresztül. A modern eszközök nagy sebességigényének kiszolgálására megjelentek új perifériák. A legnépszerűbb interfészek:
I2C SPI USART LIN CAN USB
I2C IIC = Inter Integrated Circuit ▪ IC-k közötti busz EEPROM
Atmega169 Fram
Philips fejlesztette ki 2 vezeték ▪ SDA: Serial Data ▪ SCL: Serial Clock
SDA
2
SCL
Sebesség: 100-400 kb/s Félduplex (felváltva adás-vétel)
A/D
I C-busz PIC
I2C
I2C Alaphelyzet: SDA és SCL ‘H’ állapotban vannak Az eszközök tranzisztora ‘L’ szintre tudja húzni a
vezetéket Szerepek ▪ MST: Mester – kezdeményezi az átvitelt és órajelet generál ▪ SLV: Slave – a mester által megcímzett egység
Funkciók ▪ TRX: Transmitter – Egység amelyik adatot küld a sinre ▪ RCV: Receiver – Egység amelyik adatot fogad a buszról
I2C Egyszerre 1 MST vezérelheti a buszt
Multi-master kialakítás lehetséges
Bájt átvitel
I2C szolga cím ▪ 4 bit: típuscím ▪ 3 bit: hardvercím ▪ 1 bit: i/o bit
LSB Memória cím
Szolga küldi
FRAM adott címre történő írása
Adat bájt
STOP
MSB Memória cím
ACK
X
ACK
0
ACK
A szolga címe
ACK
START
Mester küldi
SPI
Serial Peripherial Interface Motorola μP-nál vezették be 4 vezetékes kommunikáció Multimaster kialakítás lehetséges ▪ Mester adja az órajelet
Duplex (adás és vétel történhet egyszerre) Mhz-es adatátviteli sebesség Shift regiszterek vannak két vonalon összekötve
SPI MISO: Master Input Slave Output
MOSI: Master Output Slave Input MISO
SCK: Slave Clock SS: Slave Select
MESTER
SZOLGA MOSI
Órajel generátor
SCK
SS
SPI
USART Universal Synchronous Asynchronous Receiver
Transmitter Soros adatátvitel Szinkron / aszinkron átviteli módszer Küldés és fogadás egyaránt lehetséges Teljes duplex kommunikáció PC-vel való kommunikációhoz használják főleg
USART
Logika
TTL
High (H) +2V … +5V
RS-232 -15V … -3V
Low (L) 0V … +0.8V +3V … +15V
USART PIC 2 PC
USART Csatlakozó
9 tűs D SUB micro csatlakozó (kani)
1. CD
Carrier Detect
2. RXD
Receive Data
3. TXD
Transmit Data
4. DTR
Data terminal Ready
5. GND
Ground
6. DSR
Data Set Ready
7. RTS
Request To Send
8. CTS
Clear To Send
9. RI
Ring Indicator
USART MAX232
USART Protokoll ▪ Adatbit szám ▪ 4,5,7,8
▪ Paritásbit ▪ Páros,páratlan
▪ Stopbitek száma ▪ 1,1.5,2
▪ Adatátviteli sebesség ▪ ▪ ▪ ▪
110 9600 115200 921600
USART
USART
USART Regiszterek ▪ SPBRG – Baud arány beállító regiszter ▪ Másodpercenként a jelváltások száma (baud = bps)
▪ ▪ ▪ ▪ ▪ ▪
TXSTA – Adó státusz és vezérlő regiszter RCSTA – Vevő státusz és vezérlő regiszter TXREG – Küldött adat regiszter RXREG - Fogadott adat regiszter PIR1 – periféria megszakítás flag regiszter PIE1 – periféria megszakítás engedélyező regiszter
USART Baud beállítása SPBRG regiszter segítségével ▪ Baud = Fosc / (n * (SPBRG + 1) ) ▪ SPBRG = ( Fosc / (n * baud) ) – 1 ▪ n = 16, BRGH = 1 ▪ n= 64, BRGH = 0
USART Példa ▪ 4Mhz kvarc ▪ Kívánt átviteli sebesség: 9600 baud ▪ SPBRG = ( 4000000 / (16 * 9600) ) – 1 = 25.04 ▪ SPBRG = ( 4000000 / (64 * 9600) ) – 1 = 5.51
LIN Local Interconnect Network
Európai autóipar által kifejlesztett hálózat jellemzők ▪ Rövid távolság: max 40m ▪ Alacsony sebesség: 20 kbps ▪ Kétirányú kommunikációt valósít meg ▪ 1 vezetékes
LIN RS232 és I2C keveréke ▪ Alapállapotban ‘H’ szinten van a sin, amit bármelyik eszköz ‘L’ jelszintre húzhat ▪ Minden bájt START és STOP bitekkel kerül kiküldésre
Tápfesz: 9- 18V ▪ Egységeknek max. 40V-ot el kell tudni viselni
Állapot: ▪ H : recessziv ▪ L: domináns
Mester vezérli a kommunikációt ▪ Szolgák között csak a mesteren keresztül történhet adatcsere
LIN
30k
30k
30k
LIN Kommunikáció folyamata ▪ 13 bitidőnyi L szint (Sync break) ▪ 1 bájt adat = 01010101B (Sync Field) ▪ Bitidő megállapítására ▪ 4 egymást követő lefutóél összidejének = t ▪ Bitidő = t / 8 << 3
▪ Azonosító bájt (Ident field) ▪ Szolga címe (4 bit) ▪ üzenet hossza (2,4,8 bájt) ▪ paritás
CAN Controller Area Network Robert Bosch cég definiálta 1980-as évek végén, hogy
növelje a gépjárművek megbízhatóságát, komfortfokozatát és egyszerűsítse a kábelezést A szabvány nem tesz említést a kommunikáció közegéről ▪ ▪ ▪ ▪ ▪
Jelvezeték + föld Csavart érpár Galvanikusan leválasztott Rádiófrekvenciás infravörös
CAN A buszra csomópontok csatlakoznak (node) ▪ A node-ok azonos jogokkal rendelkeznek ▪ Könnyű leválasztás
2 vezeték (CANH és CANL) ▪ az információt a két vezeték közti feszültség hordozza
UCAN
3,5V
min. 1 sec CANH
2,5V 1,5V
CANL
recesszív domináns ‘1’ ‘0’ VCANH = VCANL = 2.5V VCANH = 3.5V VCANL = 1.5V
recesszív ‘1’
idő
CAN Max adatátvitel 1Mbps, 40m vezetékhossz esetén Szinkron soros adatátvitel ▪ Nincs órajel ▪ Start/stop keretezés ▪ Bit-stuffing (bitbeszúrás ▪ 5. azonos polaritású bit után beszúr egy ellentétes polaritásút
Üzenet-alapú kommunikáció ▪ Nincsenek címek ▪ Az üzenetet mindenki megkapja és a ID alapján a megfelelő eszköz dolgozza fel ▪ Bármikor új csomópont fűzhető fel vagy távolítható el
CAN Üzenettipusok (adatkeretek) ▪ Standard adatkeret ▪ Kibővített adatkeret ▪ Adatkérő-keret ▪ Túlterhelés-keret ▪ hibakeret
CAN Protokoll
Standard adatkeret
CAN Protokoll Startbit
•A szinkronizációban játszik szerepet •Keretet ad a kommunikációnak
CAN Protokoll
Üzenet azonosító
Távoli üzenetkérést pótló bit
Távoli adatkérés bit ID kibővítés
Kibővített ID
CAN Protokoll
Hány adatbit lesz a kereten belül
CAN Protokoll
CAN Protokoll
CRC lezáró bit
CAN Protokoll
CAN Protokoll
Adó 0-ba állítja
Ack lezáró bit
CAN Protokoll
Szintaktika Értékadás
Ciklusok
Példák Port kezelés
Időzítő kezelés
Szintaktika Értékadás ▪ PORTB = 0b10110101 ▪ TRISB = 0xB5 ▪ T1CON = 32+16+1
Ciklusok ▪ for(i = 0; i < 10; i++) { … } ▪ do { … } while(k < 10) ▪ while(k < 10) { … }
T1CKPS1-0: 1. időzítő előosztójának beállítása (11=1:8;10=1:4;01=1:2;00=1:1) TMR1ON: időzítő be (1) v. ki(0) kapcsolása
Port kezelés és LED
#include
#define BUTTON RC1 //bit 1 of PORTC main(void){ unsigned char i, j; TRISB = 0; /* all pins are outputs */ TRISC = 1; /*first pin is input*/ j = 0; for(;;) { PORTB = 0x00; / * turn all on */ for(i = 100 ; i >= 0 ; --i ) continue; PORTB = ~j; /* output value of j */ for(i = 100 ; i >= 0; --i ) continue; if(BUTTON == 0) j++; /* if switch pressed, increment */ } }
Példák Időzítő kezelés
#include #define PERIOD 1000000 // period in uS - one second here #define XTAL 4000000 // crystal frequency - 4MHz #define IPERIOD (4 * 1000000 / XTAL) // Period of instruction clock in uSeconds #define SCALE 256 // Timer 0 prescaler #define T0_TICKS 256 // Number of counts for interrupt #define TICK_PERIOD (SCALE * IPERIOD) // Period (uSec) of one increment of timer 0 #define RELOADS ((PERIOD/T0_TICKS)/TICK_PERIOD) unsigned long seconds; // second count char reload = 0;
void interrupt timer0_isr(void){ if(reload == 0){ reload = RELOADS + 1; seconds++; PORTB++; } reload--; T0IF = 0;} main(){
}
// initialize timer 0; OPTION = 0b0111; // prescale by 256 T0CS = 0; // select internal clock T0IE = 1; // enable timer interrupt GIE = 1; // enable global interrupts TRISB = 0; // output changes on LED for(;;) continue; // let interrupt do its job
Laborbemutató Egyszerű példaprogram ▪ LED ▪ időzítő Összetettebb példa ▪ Motorvezérlés PWM-mel
Köszönöm a figyelmet!