Gingl Zoltán, 2013, Szeged
Mikrovezérlők Alkalmazástechnikája
2015.12.06. 11:18
Digitális perifériák és használatuk
1
2015.12.06. 11:18
Digitális perifériák és használatuk
2
Tulajdonságok Írási lehetőség
Olvasás (konstansok) Scratchpad memory, flash program memory Endurance – hányszor írható (≈10k-100k)
Data retention – az adatokat meddig őrzi
(≈20-100 év) Biztonsági bitek: titkosítás lehetséges a flash olvasása tiltható (törölhetőség) 2015.12.06. 11:18
Digitális perifériák és használatuk
3
Debug adaterrel (JTAG vagy C2) A debug adapter előre programozott chipen is
elérhető MOVX utasítással is írható (bitek 0-ra állítása) Törlés: az összes bit 1-re állítása A tápfeszültség-monitort kötelező bekapcsolni és RESET forrásként konfigurálni!
2015.12.06. 11:18
Digitális perifériák és használatuk
4
Engedélyező bitek PSWE (program store write enable)
PSEE (program store erase enable)
Írás: PSWE=1 Törlés: PSWE=1 és PSEE=1 Az íráshoz/törléshez még kulcs is kell: FLKEY=0xA5; FLKEY=0xF1;
512-byte blokkok, lapok törölhetők 512-byte blokkba lehet írni egy engedélyezéssel 2015.12.06. 11:18
Digitális perifériák és használatuk
5
void FLASH_PageErase (unsigned int addr) { bit ea_save = EA; // Preserve EA char xdata * data pwrite; // FLASH write pointer
}
EA = 0; // Disable interrupts VDM0CN = 0xA0; // Enable VDD monitor RSTSRC = 0x02; // VDD mon reset source pwrite = (char xdata *) addr; // set pointer FLKEY = 0xA5; // Key Sequence 1 FLKEY = 0xF1; // Key Sequence 2 PSCTL |= 0x03; // PSWE = 1; PSEE = 1 VDM0CN = 0xA0; // enable VDD monitor RSTSRC = 0x02; // VDD mon resetsource *pwrite = 0; // Initiate page erase PSCTL &= ~0x03; // PSWE = 0; PSEE = 0 EA = ea_save; // Restore interrupts
2015.12.06. 11:18
Digitális perifériák és használatuk
6
void FLASH_ByteWrite (unsigned int addr, char byte) { bit ea_save = EA; // Preserve EA char xdata * data pwrite; // FLASH write pointer EA = 0; // Disable interrupts VDM0CN = 0xA0; // Enable VDD monitor RSTSRC = 0x02; // VDD monitor reset pwrite = (char xdata *) addr; // set pointer FLKEY = 0xA5; // Key Sequence 1 FLKEY = 0xF1; // Key Sequence 2 PSCTL |= 0x01; // PSWE=1, enable write VDM0CN = 0xA0; // Enable VDD monitor RSTSRC = 0x02; // VDD monitor reset *pwrite = byte; // Write the byte PSCTL &= ~0x01; // PSWE=0,disable write EA = ea_save; // Restore interrupts } 2015.12.06. 11:18
Digitális perifériák és használatuk
7
lock byte: 0x7DFF (F410, 32k) flash címen n = lock byte értéke negálva: ennyi blokk zárolva (első n-1 blokk és a 0x7DFF blokk) Az alábbi példa: 0xFC negálva: 0x03
Page 1
Page 2
Page 63 RESERVED
Page 62 0xFC
Page 0
0x0000
0x0200
0x0400
0x7C00
0x7E00 0x7DFF (lock byte)
2015.12.06. 11:18
Digitális perifériák és használatuk
8
VDD monitort RESET után azonnal engedélyezni
kell RESET forrásként Írás előtt a lapot törölni kell Íráskor, törléskor belső órajelre célszerű kapcsolni Írás: 50 us Blokk törlés: 20 ms Olvasás: 40ns! Max: 25MHz
2015.12.06. 11:18
Digitális perifériák és használatuk
9
2015.12.06. 11:18
Digitális perifériák és használatuk
10
A processzorok adatbuszán csak rövid ideig
érvényes az adat Számos periféria azonos buszt használ Kétirányú busz A busz szélessége adott, korlátozott
Megoldás: portok létrehozása Programozható ki és bemenetre Bármikor olvasható A beírt adat a következő írásig azonos marad, a
kimeneten logikai jel formájában megjelenik 2015.12.06. 11:18
Digitális perifériák és használatuk
11
SET
DATA BUS
D WRITE
Q PORT OUT
C
CLEAR
DIGITAL PERIPHERAL
PORT DRIVER PORT IN
READ READ-MODIFY-WRITE
pl: ANL P0,#32 ANALOG PERIPHERAL 2015.12.06. 11:18
Digitális perifériák és használatuk
ANALOG I/O
12
Ha a portra írunk, a D-tárolót írjuk minden bithez külön tároló tartozik A bit beállítható és törölhető is, RESET után értéke 1 A port olvasásakor a 3-állapotú drivert engedélyezi a
READ jel A READ, WRITE, SET, CLR jeleket a processzor generálja
2015.12.06. 11:18
Digitális perifériák és használatuk
13
Logikai jellel vezérelhető eszközökhöz: Áramkörök logikai bemeneteinek meghajtása
LED Külső meghajtó-fokozattal: relé (jelfogó), mágnesszelep, motorok, stb.
Logikai jeleket adó eszközökhöz, olvasásra: Kapcsoló, nyomógomb, billentyűzet Áramkörök logikai kimeneteinek figyelése Külső elektronikával: fénykapuk, Hall-detektorok, stb. 2015.12.06. 11:18
Digitális perifériák és használatuk
14
PORT DRIVER WEAK PULL-UP
OR
ANALOG MODE
Vdd
AND
Rp
PUSH-PULL MODE
Vdd
Vdd
PORT OUT OUT ENABLE
OR
PORT IN ANALOG IN 2015.12.06. 11:18
Digitális perifériák és használatuk
15
Alapmód: open-drain
Rp
Vdd
0: erős kötés GND-re
1: 100k Vdd-re 1: input mód is
PORT OUT
2015.12.06. 11:18
Digitális perifériák és használatuk
16
Vdd
Push-pull mód 0: erős kötés GND-re 1: erős kötés Vdd-re
PORT OUT
2015.12.06. 11:18
Digitális perifériák és használatuk
17
OPEN-DRAIN MÓD
Logikai 1 kimenet esetén bementként is funkcionálhat kevés perifériát lehet jól
meghajtani kicsi áramot tud adni a kimenet Ha a kimeneten kapacitás van, lassú a felfutás (≈RC) Ha a kimeneten ellenállás van, könnyen elhúzhatja
Logikai 0 kimenet esetén
PUSH-PULL MÓD
Erős meghajtás mindkét állapot esetére Mindig érdemes használni, kivéve amikor open-drain szükséges (pl. wired-OR) Kimondottan fontos, ha
gyors jeleket kell előállítani nagyobb áramot kell adni
erős meghajtás nagy áramot tud húzni 2015.12.06. 11:18
Digitális perifériák és használatuk
18
Rp
Vdd
Digitális mód
Vdd
Schmitt-trigger input
100k gyenge felhúzóellenállás
Vdd
Analóg mód IL
Kikapcsolja a felhúzóellenállást Kikapcsolja a port inputot Nagyimpedanciás bemenet
2015.12.06. 11:18
Digitális perifériák és használatuk
19
parameter
min
typ
max
units
Voltage on any Port 0 Pin
-0.3V
-
5.5
V
Voltage on any Port I/O Pin (except Port 0 pins)
-0.3V
-
Vio+0.3
V
Maximum output current sunk by any Port pin
-
100
mA
Maximum output current sourced by any Port pin
-
100
mA
500
mA
Maximum Total current through Vdd, Vio,... and GND
2015.12.06. 11:18
Digitális perifériák és használatuk
conditions
20
parameter
conditions
min
typ
max
units
-
V
Output High Voltage (Port I/O push-pull )
IOH = –3 mA IOH = –70 μA
Vio – 0.5 Vio – 50mV
-
Output Low Voltage
Vio = 2.0 V: IOL = 70 μA IOL = 8.5 mA Vio = 4.0 V: IOL = 70 μA IOL = 8.5 mA
-
50 800 mV 40 400
Input High Voltage
Vio x 0.7
-
-
Input Low Voltage
-
-
Vio x 0.3
-
<0.1
1
μA
-
120
-
k
Input Leakage Current
Weak Pullup Off
Weak Pullup Impedance
2015.12.06. 11:18
Digitális perifériák és használatuk
21
Mindig tartsuk be a feltételeket! Ha megsértjük az ABSOLUTE MAXIMUM RATINGS
feltételeket az áramkör károsodhat az áramkört azonnal selejtezni kell! nem szabad egy próbateszttel „megmenteni”
Ha megsértjük az ELECTRICAL CHARACTERISTICS
feltételeket az áramkör helyes működése nem garantált más részfunkciók is hibásan működhetnek! maradéktalanul meg kell szüntetni az okokat 2015.12.06. 11:18
Digitális perifériák és használatuk
22
BEMENŐ FESZÜLTSÉG
>Vdd: áram a táp felé
érték választása
külső áramkörös védelem
A PORT TÚLTERHELÉSE
Nem megfelelő logikai szint jöhet létre Hibás működés A portok összárama a Vdd/GND áramához járul A Vdd/GND kivezetések árama korlátos! Károsodás történhet soros ellenállás védhet
érték választása
2015.12.06. 11:18
Digitális perifériák és használatuk
23
Idd csökkentés: külső meghajtók pl. 74AHCT541, 74AHCT125, 74AHCT138
Melyik logikai család megfelelő? HC, HCT, AHC, AHCT, LVC?
5V vagy 3,3V? Még nagyobb áram szükséges? tranzisztor tranzisztortömb (pl. ULN2803)
2015.12.06. 11:18
Digitális perifériák és használatuk
24
1 OE
541
Vcc 20
138
Vcc 16
2
OE 19
1
A0
3
18
2
A1
Y0 15
4
17
3
A2
Y1 14
5
16
4
E1
Y2 13
6
15
5
E2
Y3 12
7
14
6
E3
Y4 11
8
13
7
Y7
Y5 10
9
12
8
GND
Y6
10 GND
11
2015.12.06. 11:18
Digitális perifériák és használatuk
9
25
1 OE
574
Vcc 20
74x574
2
D0
Q0 19
D
3
D1
Q1 18
CP
4
D2
Q2 17
5
D3
Q3 16
6
D4
Q4 15
7
D5
Q5 14
8
D6
Q6 13
9
D7
Q7 12
10 GND
2015.12.06. 11:18
CP
C
Q
74x574
D
Q
CP
11
Digitális perifériák és használatuk
26
Vcc 16
DS: soros adat bemenet
Q2
Q0 15
SHC: soros clock
3
Q3
DS
4
Q4
OE 13
5
Q5
STC 12
6
Q6
SHC 11
7
Q7
MR 10
MR: reset (törlés)
8
GND
Q7S 9
OE: kimenet engedélyezés
1
Q1
2
2015.12.06. 11:18
595
14
STC: kimenetre tárolás Q0..Q7: kimenetek Q7S: soros kimenet
Digitális perifériák és használatuk
27
74AHCT595 DS
B7 B6 B5 B4 B3 B2 B1 B0
SHC STC Q
2015.12.06. 11:18
Előző érték
Digitális perifériák és használatuk
B7..B0
28
Q1 Q2
Q3 Q4 Q5 Q6 Q7 GND
Q1 Q2 Q3 Q4
Q5 Q6 Q7
GND
1
2 3 4 5 6 7 8
1
2015.12.06. 11:18
2 3 4 5 6
7 8
595
595 14
Digitális perifériák és használatuk
14
Q7S 9
MR 10
SHC 11
STC 12
OE 13
DS
Q0 15
Vcc 16
Q7S 9
MR 10
SHC 11
STC 12
OE 13
DS
Q0 15
Vcc 16
LOAD CLOCK DATA
29
V+
V+ BC817 500mA
10k
R
MCU
MCU R
BC817 500mA
Digitális perifériák és használatuk
V+ 10k
V+
2015.12.06. 11:18
IRLML2502 4A
IRLML2502 4A
30
ULN2803
COM
IN
OUT
2k7
7k2
3k GND
2015.12.06. 11:18
Digitális perifériák és használatuk
1
18
2
17
3
16
4
15
5
14
6
13
7
12
8
11
9
GND COM 10
31
A mikrovezérlőt tartalmazó eszközt gyakran a
felhasználó beállíthatja, a működést ellenőrizheti Szükség van adatok bevitelére megjelenítésére
Általában digitális adatokról van szó, ezek
lebonthatók kétállapotú elemekre
2015.12.06. 11:18
Digitális perifériák és használatuk
32
A portokon csak digitális jel olvasható A nyomógomb és kapcsoló rövidzár vagy
szakadás Ebből kell logikai 0 és 1 értéknek megfelelő feszültséget előállítani Egyszerű mód: tápfeszültség (logikai 1) kötünk egy ellenállást és vele
sorba a nyomógombot, amit a GND pontra (logikai 0) kötünk benyomott állapot: 0, kiengedett: 1 2015.12.06. 11:18
Digitális perifériák és használatuk
33
R
C
2015.12.06. 11:18
Digitális perifériák és használatuk
Vdd
Vdd
R
Vdd
R
Vdd
R
Mekkora legyen az ellenállás? A portokon eleve van felhúzó ellenállás Zavarérzékenyebb Kondenzátor segít
34
Mekkora legyen az ellenállás? A portokon eleve van felhúzó ellenállás Zavarérzékenyebb Kondenzátor segít
C8051Fxxx Vdd
Vdd
Rp
Rp
Vdd
C8051Fxxx Vdd
C
2015.12.06. 11:18
Digitális perifériák és használatuk
35
A kapcsolás
Rövid ideig csak prell,
pillanatában zavarjelek Sok parazita kapcsolgatás Hogyan javítsuk?
hosszabbra valódi kapcsolás! A kondenzátor segít További javítás szoftveres hardveres
2015.12.06. 11:18
Digitális perifériák és használatuk
36
#define BUTTON_ON (!P0.3) void main(void) { while (1) { if (BUTTON_ON) { while (BUTTON_ON); DoShortProcess(); } } }
Milyen hátrányok vannak? Hogy lehet javítani? 2015.12.06. 11:18
Digitális perifériák és használatuk
37
#define BUTTON_ON (!P0.3) #define BUTTON_ON_TICK 10
volatile bit ButtonPressed; void TMRHandler __interreupt TMRVECTOR // 10ms period { static bit buttonstate=0, detected=0; static unsigned char counter=0; if (ButtonPressed) return; // not yet handled // nothing to do
2015.12.06. 11:18
Digitális perifériák és használatuk
38
if (BUTTON_ON) // it is pressed { if (buttonstate) // it was on { counter++; if (counter == BUTTON_ON_TICK) detected=1; } buttonstate=1; // save state }
2015.12.06. 11:18
Digitális perifériák és használatuk
39
else { buttonstate=0; counter=0; if (detected) { ButtonPressed=1; detected=0; } }
// it is released // save state // reset counter // notify main program // reset, end of detection
} … if (ButtonPressed) { DoSomething(); ButtonPressed=0; } 2015.12.06. 11:18
Digitális perifériák és használatuk
40
Ne várja meg a felengedést
1. Egyforma hosszú detektálási idők
2. Az első detektálási idő hosszabb legyen 3. Gyorsuló detektálás
2015.12.06. 11:18
Digitális perifériák és használatuk
41
Sok nyomógomb beolvasása telefonbillenytűzet point-of-sale (POS) terminál automated teller machine (ATM)
A szükséges jelek redukálására
mátrix A beolvasáshoz minden lehetőséget meg kell nézni Megállhatunk, ha megtaláltunk egyet Több is lenyomva? 2015.12.06. 11:18
Digitális perifériák és használatuk
42
2015.12.06. 11:18
Digitális perifériák és használatuk
43
Pn.0
Pn.0-Pn.2 kimenetek Pn.3-Pn.6 bemenetek 1. oszlop tesztje:
Pn.1
Pn.2=0, Pn.1=1, Pn.0=1
MCU
Pn.2 Pn.3 Pn.4 Pn.5 Pn.6 2015.12.06. 11:18
1
2
3
4
5
6
Pn.3-Pn.6 beolvasása
2. oszlop tesztje: Pn.2=1, Pn.1=0, Pn.0=1 Pn.3-Pn.6 beolvasása
7
8
9
3. oszlop tesztje: Pn.2=1, Pn.1=1, Pn.0=0
*
0
Digitális perifériák és használatuk
#
Pn.3-Pn.6 beolvasása 44
Negatív logika Vdd
R
Rp
C8051Fxxx
Vdd
PORT OUT
2015.12.06. 11:18
Digitális perifériák és használatuk
45
Negatív logika
Vdd
R
C8051Fxxx
Vdd
PORT OUT
2015.12.06. 11:18
Digitális perifériák és használatuk
46
Pozitív logika is: a kimenet push-pull legyen
PORT OUT
2015.12.06. 11:18
Digitális perifériák és használatuk
Vdd
R
C8051Fxxx
47
G
F Vdd A
B Vdd
A
A
D
E
F
G
DP
R
R
R
R
R
R
E
R
B G
Pn.0
Pn.1
Pn.2
Pn.3
Pn.4
Pn.5
Pn.6
Pn.7
C D
E
C
R
F
B
D Vdd C
2015.12.06. 11:18
DP
DP
Digitális perifériák és használatuk
48
Negatív logika: PORT=~ledbits; // bytewise BCD
G
F
E
D
C
B
A
ledbits
0
0
1
1
1
1
1
1
3Fh
1
0
0
0
0
1
1
0
06h
2
1
0
1
1
0
1
1
5Bh
3
1
0
0
1
1
1
1
4Fh
4
1
1
0
0
1
1
0
66h
5
1
1
0
1
1
0
1
6Eh
6
1
1
1
1
1
0
1
7Eh
7
0
0
0
0
1
1
1
07h
8
1
1
1
1
1
1
1
7Fh
9
1
1
0
1
1
1
1
6Fh
2015.12.06. 11:18
Digitális perifériák és használatuk
49
Fényesség – nagyobb áram meghajtó lehet szükséges
tranzisztorok vagy tranzisztortömb (pl. ULN2803A)
Több kijlező? külső latch (pl. 74HCT574) időosztásos kapcsolás (a fényerő csökken)
2015.12.06. 11:18
Digitális perifériák és használatuk
50
GND VDD Vo RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 BLA/C BLC/A 1
Táp (bemenet) GND Vdd (5V vgy kisebb)
16
Vo (bemenet)
kontraszt, Vdd-hez közeli
Vezérlőjelek (bemenet) RS: cím vagy adat RW: olvasás, írás E: engedélyezés
DB0-DB7 DB4-DB7 négybites
Legelterjedtebb kiépítések:
módban
2x16 karakter 2x20 karakter 4x16 karakter 4x20 karakter
háttérvilágító LED (BL) Anód és katód, nem
Opcionális háttérvilágítás
2015.12.06. 11:18
Adatbusz (kétirányú)
Digitális perifériák és használatuk
standard 50mA-300mA
51
READ TIMING
WRITE TIMING RS R/W
RS Tas >40ns
Tah >10ns
R/W
Tpw >230ns
E
Tddr >160ns
Th >10ns
VALID TcycE >500ns
E lefutó éle ír be Érvényes a lefutó élnél 2015.12.06. 11:18
Tpw >230ns
Tah >10ns
E Tdsw >40ns
DATA IN
Tas >40ns
Digitális perifériák és használatuk
DATA OUT
Th >5ns
VALID TcycE >500ns
E felfutó éle indít olvasást Érvényes a lefutó élnél 52
UTASÍTÁSREGISZTER ELÉRÉSE
RS=0 Inicializálás Üzemmód beállítása Kijelző törlése Kurzorpozíció beállítása Villogó kurzor Automatikus kurzorléptetés …
2015.12.06. 11:18
Digitális perifériák és használatuk
ADATREGISZTER ELÉRÉSE
RS=1 karakterek írása a kijelzőre aktuális kurzorpozícióra Karakter kódjának írásával Egysoros kijelzők kurzorcímei 0x00+i
Kétsoros kijelzők kurzorcímei 1. sor: 0x00+i 2. sor: 0x40+i
Négysoros kijelzők kurzorcímei 1. sor: i 2. sor: 0x40+i 3. sor: sorhossz+i 4. sor: 0x40+ sorhossz+i 53
Utasítás
adatbitek
megjegyzés
B7
B6
B5
B4
B3
B2
B1
B0
Clear display
0
0
0
0
0
0
0
1
A teljes kijelző törlése
Return home
0
0
0
0
0
0
1
-
A kurzor és beviteli mód alaphelyzetbe hozása
Entry mode set
0
0
0
0
0
1
ID
S
Beviteli mód: ID=1:kurzor jobbra S=1:teljes kijelző eltolás
Display on/off
0
0
0
0
1
D
C
B
Kijelző: D=1 bekapcsolás, C=1 kurzor be, B=1 kurzor villog
Cursor or display shift
0
0
0
1
SC
RL
-
-
SC=1:kijelző, 0:kurzor RL=1:jobbra, 0: balra mozgatás
Function set
0
0
1
DL
N
F
-
-
DL=1:8-bites, 0:4-bites mód N=1:2 sor, 0:1 sor F=1:5x10, 0:5x8 képpont egy betű
2015.12.06. 11:18
Digitális perifériák és használatuk
54
Utasítás
adatbitek
megjegyzés
B7 B6 B5 B4 B3 B2 B1 B0 Set CGRAM address
0
1
A5 A4 A3 A2 A1 A0 karaktertáblába írás címe saját karakterek definiálására
Set DDRAM address
1
A6 A5 A4 A3 A2 A1 A0 a kijelzőre írás címe, azaz a kurzor pozicionálása
RS=0 és R/W=0 kell az utasítások küldéséhez Az utasítások valamennyi ideig futhatnak (~40us) Ez alatt nem szabad a kijelzőbe írni! Megoldás: megfelelő szoftveres késleltetés az utasítás kiadása után az állapotbit beolvasása (B7), R/W=1 állításával 2015.12.06. 11:18
Digitális perifériák és használatuk
55
#define #define #define #define
LCD_RS LCD_RW LCD_E LCD_PORT
P0.5 P0.6 P0.7 P1
unsigned char line_address[4]; void LCD_Init(unsigned char rows, unsigned char cols) { unsigned char i; line_address[0]=0; line_address[1]=0x40; line_address[2]=cols; line_address[3]=0x40+cols;
2015.12.06. 11:18
Digitális perifériák és használatuk
56
LCD_RW=0; LCD_E=0; LCD_RS=0; Delay_ms(50); LCD_DATA=0x30; LCD_PulseE(); Delay_ms(5); LCD_PulseE(); Delay_ms(1); LCD_PulseE(); LCD_Write(0x38); LCD_Write(0x08); LCD_Write(0x01); LCD_Write(0x06); LCD_Write(0x0C);
// Special initialization sequence // 8-bit mode
// 8-bit mode // // // // // //
8-bit mode 8-bit mode, 2 lines display off display clear entry mode: increment cursor display on, no cursor, no blink
} 2015.12.06. 11:18
Digitális perifériák és használatuk
57
void LCD_PulseE(void) { unsigned char i; for(i=0;i<100;i++); LCD_E=1; for(i=0;i<100;i++); LCD_E=0; } void LCD_Write(unsigned char a) { LCD_DATA=a; LCD_PulseE(); Delay_ms(2); // or check busy flag }
2015.12.06. 11:18
Digitális perifériák és használatuk
58
void LCD_Clear(void) { LCD_RS=0; LCD_Write(1); LCD_RS=1; } void LCD_MoveTo(unsigned char line, unsigned char pos) { LCD_RS=0; LCD_Write(0x80 | (line_address[line]+pos)); LCD_RS=1; }
2015.12.06. 11:18
Digitális perifériák és használatuk
59
Két részletben lehet írni a regisztereket A felső négy bitet először
Az alsó négy bitet ezután
A D7..D4 adatbiteket kell használni
2015.12.06. 11:18
Digitális perifériák és használatuk
60
stdio átirányítás? printf? void putchar(char c) { LCD_Write(c); } … LCD_MoveTo(0,10); // first line, 10th position printf("x=%d",x); // write …
A /r és /n kezelése nincs megoldva nem nagyon van rá igény, inkább LCD_MoveTo A további LCD függvények szükségesek clear, move, blink on/off, etc. 2015.12.06. 11:18
Digitális perifériák és használatuk
61
A crossbar engedélyezése nélkül nem aktív RESET-kor a port I/O még nem aktív A külső elektronika ezt figyelembe kell vegye! motorvezérlés külső áramkörök fals jeleket kaphatnak megfelelő inicializálás a többi áramkörnek
2015.12.06. 11:18
Digitális perifériák és használatuk
62
2015.12.06. 11:18
Digitális perifériák és használatuk
63
PERIPHERAL #1
CROSSBAR
PERIPHERAL #2
PORT CELL
P0.0 P0.7
PERIPHERAL #3 PORT CELL
P0
P1.0 P1.7
P1
2015.12.06. 11:18
Digitális perifériák és használatuk
64
Peripheral #1
Selected peripherals
Peripheral #2
inactive peripheral
Peripheral #3 Port latches #1
Port input #1
Port latches #2
Port input #2
Port latches #3
Port input #3
Pin skip Selected #1
Pins #1 Pins #2 Pins #3
Selected #2
2015.12.06. 11:18
Digitális perifériák és használatuk
65
TX
P0.4
UART
P0.4 LATCH P0.4 INPUT
RX
P0.5 P0.5 LATCH P0.5 INPUT
C8051F410 2015.12.06. 11:18
Digitális perifériák és használatuk
66
A perifériák prioritási sorrendben kapcsolódnak a
kivezetésekre (a portcella bitek sorrendjében) A bekapcsolt perifériák foglalnak kivezetést átveszik a kivezetés kezelését a processzortól a társított kivezetés olvasható a processzor számára
A maradék kivezetések normál portbitek a processzor közvetlenül írhatja, olvashatja Lehetséges kivezetések kihagyása is (pin skip) ekkor a crossbar a következő szabad kivezetést köti be 2015.12.06. 11:18
Digitális perifériák és használatuk
67
2015.12.06. 11:18
Digitális perifériák és használatuk
68
Ha a crossbar nincs engedélyezve, az I/O sem Ha a program futása közben változtatni kell a
kiosztást: a crossbar kikapcsolása új kiosztás definiálása a crossbar bekapcsolása a külső jeleket ez befolyásolhatja!
2015.12.06. 11:18
Digitális perifériák és használatuk
69
2015.12.06. 11:18
Digitális perifériák és használatuk
70
Időzítési feladatok felhasználói felület kezelése mechatronikai rendszerek periodikus megszakítások adatátvitel, kommunikáció ütemezése időtartamtok mérése timeout generálás Számlálás események számlálása frekvenciamérés 2015.12.06. 11:18
Digitális perifériák és használatuk
71
overflow pulse (H7: 10)
Timer mode
EXTERNAL SIGNAL
1
D L0 L1 L2 L3 L4 L5 L6 L7 H0 H1 H2 H3 H4 H5 H6 H7
OSCILLATOR
SET
Counter mode
low byte
high byte
Q
FLAG
C CLEAR to peripherals UART, PCA,…
16-bit counter
clock signal counter value
max value-1
max value
initial value
initial value+1
overflow 2015.12.06. 11:18
Digitális perifériák és használatuk
72
Bemenet: periodikus vagy külső jel Túlcsordulás pulzust generál beállít egy flaget
A flag törlésig 1 marad A pulzus meghajthat más perifériákat
(független
a flagtől)
2015.12.06. 11:18
Digitális perifériák és használatuk
73
Klasszikus 8051 periféria
Sokféle üzemmód Silicon Laboraories továbbfejlesztés teljes sebesség is (SYSCLK)
rugalmasabb megszakításkezelés
2015.12.06. 11:18
Digitális perifériák és használatuk
74
SYSCLK/12 SYSCLK/4 SYSCLK/48
CLK0
EXT OSC/8 SYSCLK T0 /INT0 IN0PL GATE0
AND TR0
XOR OR
TCLK0
AND
CLOCK0 az órajelforrásokból áll elő TR0 engedélyezi a számlálást GATE0 engedélyezi a külső jellel való kapuzást IN0PL invertálja a külső kapuzó jelet TCLK0 = (TIMER ? CLK0 :T0) & TR0 & (!GATE0 | (INT0 ^ IN0PL)) Timer1 számára hasonló, de független beállítás
2015.12.06. 11:18
Digitális perifériák és használatuk
75
MODE 0
TCLK0
TL0, 5 LSBs
TH0
TF0
MODE 1
TCLK0
TL0
TH0
TF0
13-bites számláló Minden TCLK0 lefutóél egyet növel a számláló értékén A számláló két 8-bites részből áll TH0: a nagyobb helyi értékű byte TL0: a kisebb helyi értékű byte TL0-nak csak az alsó 5 bitje aktív, a felső három határozatlan TF0 1-re vált, ha a számláló túlcsordul TF0 megszakítást válthat ki, ha engedélyezve van, ekkor
automatikusan törlődik, egyébként szoftveresen kell törölni Mode 1 azonos, de mind a 16 bit aktív 2015.12.06. 11:18
Digitális perifériák és használatuk
76
Késleltetés generálás Megszakítás generálás hardveres (fix időzítés) szoftveresen felülírható
Frekvencia (rezonáns szenzorok, VFC, R vagy C) Periódus Időtartam (gate használata)
2015.12.06. 11:18
Digitális perifériák és használatuk
77
A függvényhívás és műveletek ideje is hozzáadódik steps lépés idejéig várakozik
void Delay(unsigned short steps) { TMOD=(TMOD & 0xF0) | 0x01; // 16-bit timer CKCON=CKCON | 0x04; // timer0 clk=sysclk TH0=-steps >> 8; // 65536-steps TL0=-steps; TF0=0; TR0=1; while (!TF0); TR0=0; } 2015.12.06. 11:18
Digitális perifériák és használatuk
78
RESET érték: timer0 és 1 órajel=sysclk/12 steps timer lépésenként megszakítás (túlcsordulás) Megszakítási késleltetés befolyásolja, kicsit szoftverfüggő
TMOD=(TMOD & 0xF0) | 0x01; // 16-bit timer TR0=1; // run timer IE=0x82; // enable global & timer0 interrupts void Timer0Handler(void) __interrupt 1 { TR0=0; // stop timer TH0=-steps >> 8; // 65536-steps TL0=-steps; TR0=1; // start timer … } 2015.12.06. 11:18
Digitális perifériák és használatuk
79
Frekvencia, szenzorok, VFC, R vagy C mérése Adott ideig számláljuk a lefutó éleket Tartomány 0-fmax vagy fmin-fmax Felbontás? Két timer az egyik számlálja az eseményeket a másik az időtartamot (pontosság?)
T0 TH0,TL0 TR0 2015.12.06. 11:18
0
1
2
3
4
5
6
Counting Digitális perifériák és használatuk
80
TCON=0; // stop timers TMOD=0x15; // T0:16-bit counter T1:timer TH0=0; // initialise counter TL0=0; // initialise counter TH1=-steps >> 8; // 65536-steps TL1=-steps; // TR0=1 for steps*timer period TF1=0; // clear timer 1 flag TCON=0x50; // run both timers while (!TF1); // assembly? TCON=0; // stop both timers
Az eredmény TH0/TL0 regiszterekben van Esetleges megszakítások ronthatják az eredményt! A timerek másra ezalatt nem használhatók Összességében: kicsit szoftverfüggő, nem teljesen hardveres megoldás
2015.12.06. 11:18
Digitális perifériák és használatuk
81
N periódust megszámlálunk Megmérjük, mennyi T ideig tart T Kt t = timer lépésidő
Periódus = T/N Kt/N Két timer használata számlálás N esemény bekövetkeztéig a szükséges időtartam megmérése, azaz K mérése
2015.12.06. 11:18
Digitális perifériák és használatuk
82
N periods (L=65536-N) T0 TH0,TL0
L
L
L+1
65534 65535
0
2
K-3 K-2 K-1
K
TF0 T1 CLK TH1,TL1
0
0
1
Kt
TR0,TR1 2015.12.06. 11:18
Counting Digitális perifériák és használatuk
83
TCON=0; TMOD=0x15; TH1=0; TL1=0; TH0=-N >> 8; TL0=-N; TF0=0; TCON=0x50; while (!TF0); TCON=0;
// // // // // // // // // //
stop timers T0:16-bit counter T1:timer clear T1 timer value clear T1 timer value 65536-N N events to overflow (TF0=1) clear timer 0 flag run both timers wait for N events (assembly?) stop both timers
Az eredmény a TH1/TL1 regiszterekben van (K) Esetleges megszakítások ronthatják az eredményt! A timerek másra ezalatt nem használhatók Összességében: kicsit szoftverfüggő, nem teljesen hardveres megoldás
2015.12.06. 11:38
Digitális perifériák és használatuk
84
Digitalizálás timer periódusok számlálásával A timerek GATE bemenete használható
Megoldás: A számláló adott órajellel megy A külső jel aktív idejéig engedjük a számlálást Elég egy timer INT0 engedélyezése a crossbaron szükséges
2015.12.06. 11:18
Digitális perifériák és használatuk
85
T0 CLK TH0,TL0
0
0
1
K-2 K-1
K
Kt /INT0 TR0 Counting waiting while high 2015.12.06. 11:18
Digitális perifériák és használatuk
waiting for falling edge 86
TR0=0; TH0=TL0=0 TMOD=0x09; IT0=0; IE0=0; while (!IE0); IT0=1; IE0=0; TR0=1; while (!IE0); TR0=0;
// // // // // // // // // // //
stop timer clear timer T0:16-bit gated timer mode level triggered /INT0 clear INT0 flag wait for input going down edge triggered /INT0 clear INT0 flag enable timer wait for end of pulse stop timer
Az eredmény a TH0/TL0 regiszterekben van A pulzusnak TR0=1 után kell indulnia! Erre várakozás a kódban INT0-t a crossbaron engedélyezni kell, megszakításban is kezelhető Esetleges megszakítások ronthatják az eredményt! Kicsit szoftverfüggő, nem teljesen hardveres megoldás
2015.12.06. 11:18
Digitális perifériák és használatuk
87
t
TL0 0 1
TF0 0 0
8-bites számláló 4t TH0 tartalmazza a kezdőértéket Ez TL0 túlcsordulásakor beíródik innen folytatódik a számlálás Példa: TL0=0; TH0=252; TF0=0; 4t Periódus: (256-TH0)t TF0: szoftver vagy megszakítás törli
255 252 253 254 255 252 253 254 255 252 253
0 1 1 1 1 1 1 0 0 1 1
TCLK0
TL0
TF0
TH0
2015.12.06. 11:18
Digitális perifériák és használatuk
CLR TF0
88
Soros bitátviteli ráta: baud rate (UART) Periodikus megszakítások generálása
Kiszolgáló a PCA-hoz (Timer0, lásd később) 8-bit: korlátozott felbontás és pontosság Nagyobb periódus – nagyobb pontosság
Mindig ellenőrizzük, mennyi lett a periódus
2015.12.06. 11:18
Digitális perifériák és használatuk
89
Period 256 TH 0 t 256 TH 0 / f clk 1 / Period f desired f actual f clk / 256 TH 0 TH 0 256 f clk / f desired 0.5 f actual f clk / 256 256 f clk / f desired 0.5 2015.12.06. 11:18
Digitális perifériák és használatuk
90
1
Actual frequency/fclk
0,8 0,6 0,4 0,2 0
0
0,2
0,4
0,6
0,8
1
Desired frequency/fclk 2015.12.06. 11:18
Digitális perifériák és használatuk
91
50
Error [%]
25
0
-25
-50
0
0,2
0,4
0,6
0,8
1
Desired frequency/fclk 2015.12.06. 11:18
Digitális perifériák és használatuk
92
Baud rate = Timer1 overflow rate / 2 F410 SYSCLK: 191406Hz
9600 bit/s = 191406/(256-TH1) / 2 TH1=256-SYSCLK/BAUDRATE/2246=0xF6 BAUDRATE=9570 bit/s, jó ez? SYSCLK: 2%! TMOD=(TMOD & 0x0F) | 0x20; // mode 2 CKCON=CKCON | 0x08; // timer1clk=sysclk TH1=0xF6; TR1=1;
2015.12.06. 11:18
Digitális perifériák és használatuk
93
Interrupt rate = Timer0 overflow rate F410 SYSCLK: 191406Hz
TH0=256-SYSCLK/IRQRATE Elvi tartomány: 748Hz-191406Hz
(TH0=0-255) A periódus > IRQ végrehajtási idő legyen TMOD=(TMOD & 0xF0) | 0x02; // mode 2 CKCON=CKCON | 0x04; // timer0clk=sysclk TH0=65; // 1000Hz TR0=1; IE=0x82; // enable interrupt 2015.12.06. 11:18
Digitális perifériák és használatuk
94
SYSCLK/12 SYSCLK/4 SYSCLK/48
CLK0
EXT OSC/8
TH0
TF1
TL0
TF0
SYSCLK T0 /INT0 IN0PL GATE0
AND TR0
XOR OR
AND
TCLK0
Két független 8-bites számláló (Timer 1 inaktív ekkor) TL0-t a szokásos komplex órajel hajtja TH0-t a skálázott órajel vagy SYSCLK 2015.12.06. 11:18
Digitális perifériák és használatuk
95
Periodikus megszakítások generálása TL0 számlálásra, megszakítások generálására
Órajel a perifériák számára
2015.12.06. 11:18
Digitális perifériák és használatuk
96
Az MCS-51 mikrovezérlőben: Timer 0 és 1 8052: Timer 2 hozzáadása
Silicon Labs további timerek hozzáadása kétféle megoldás (pl. F120 és F410) 16-bit auto reload – nagyobb tartomány, pontosság
2015.12.06. 11:18
Digitális perifériák és használatuk
97
SYSCLK SYSCLK/12 AND
EXT OSC/8
TCLKn
TMRnL
TMRnH
TMRnRLL
TMRnRLH
TFnH
TRn
C8051F410
2015.12.06. 11:18
Digitális perifériák és használatuk
98
SYSCLK/12 SYSCLK/4
SYSCLK
0xFF
0xFF
TMRnL
TMRnH
EXT OSC/8
Tn
AND
TFn
TRn TnEX
EXENn
D Q AND
OR
TMRnRLL
TMRnRLH
C Q
Tn EXFn
C8051F120 2015.12.06. 11:18
Digitális perifériák és használatuk
99
TMR2 =TMR2H*256 +TMR2L TMR2RL =TMR2RLH*256 +TMR2RLL
TMR2 TMR2RL TMR2RL+1 Nt 65534 65535 TMR2RL TMR2RL+1
Nt TMR2RL
2015.12.06. 11:18
TF2H ( interrupt) 0 t 0
65534 65535 TMR2RL TMR2RL+1
Digitális perifériák és használatuk
0 0 Hardware sets TF2H 1 generates interrupt 1 Software clears TF2H 0 0 1 1
100
/************************** steps = period/dt dt=1/timer clock steps = timer clock*period reload value = 65536-steps ***************************/ unsigned long period; unsigned long tmrclk; unsigned short tmrrl;
// in us // timer clock in Hz // reload value
tmrrl = -tmrclk*period/1000000L;
2015.12.06. 11:18
A C8051Fxxx mikrovezérlők felépítése és programozása
101
SYSCLK SYSCLK/12 AND
EXT OSC/8
TMRnH
TFnH
TRn
TMRnRLH TMRnL
SYSCLK
TFnL
TMRnRLL
2015.12.06. 11:18
Digitális perifériák és használatuk
102
Flag felhasználásával (megszakítás engedélyezés): Periodikus megszakítások generálása A túlcsordulási pulzussal (timer megszakítás nincs!): Baud rate generátor (UART) SMBus bit rate, timeout A/D konverzió indítása, mintavételezéses mérés D/A konverzió indítása, időfüggő jel generálása F120 processzoron kimeneti négyszögjel Code profiling SYSCLK legyen a számláló órajele a kódrészlet elején a számláló nullázása és indítása a kódrészlet végén a számláló állása a futási időt adja 2015.12.06. 11:18
Digitális perifériák és használatuk
103
$include (C8051F410.INC) LED
EQU
P0.2
CSEG at 0000h jmp Main
; reset, jump to the main
ORG 002Bh anl TMR2CN,#07Fh cpl LED reti
2015.12.06. 11:18
; ; ; ;
Timer 2 IRQ vector clear interrupt flag complement LED return from interrupt
A C8051Fxxx mikrovezérlők felépítése és programozása
104
Main: anl mov mov mov mov mov mov mov mov jmp
PCA0MD, PCA0MD, XBR1, TMR2RLL, TMR2RLH, TMR2L, TMR2H, TMR2CN, IE, $
#0BFh #000h #040h #0B2h #0C1h #0B2h #0C1h #004h #0A0h
; watchdog off ; crossbar on ; Timer 2 reload register ; ; Timer 2 counter initial value ; Start Timer 2 ; enable interrupts ; repeat forever
END
fclk=1/t=191406/12 Hz 15950 Hz (RESET utáni alapérték) 1 sec = 15950t TMR2RL = 65536-15950 = 49586 = 0xC1B2 2015.12.06. 11:18
A C8051Fxxx mikrovezérlők felépítése és programozása
105
Kevés a 16-bit? Szoftveres kiterjesztés: Túlcsorduláskor egy változó értékét növeljük Megszakítási rutinban void TimerIRQ(void) __interrupt TIMER_VECTOR { static unsigned char counter=0;
counter = (counter+1) % countermax; if (!counter) Process(); // overflow } 2015.12.06. 11:18
Digitális perifériák és használatuk
106
2015.12.06. 11:18
TMR (HW)
TF
COUNTER (SW)
65534 65535 0 1
0 0 1 1
0
65534 65535 0 1
0 0 1 1
Digitális perifériák és használatuk
INT+SW DELAY
1
107
2015.12.06. 11:18
Digitális perifériák és használatuk
108
Adott órajellel fut egy 16-bites számláló Mellette van több 16-bites regiszter
Lehetőségek A számláló értéke átmásolódik a regiszterbe A számláló értékének összehasonlítása a regiszterével A kétféle esemény detektálható (megszakítás) Külső jel állítható elő (hardware output) Külső jel használható (hardware input)
2015.12.06. 11:18
Digitális perifériák és használatuk
109
SFR BUS
SYSCLK/12 SYSCLK/4
SNAPSHOT REGISTER
TIMER0 EXT CLK IN
PCA0L READ
EXT OSC/8
PCA0L
PCA0H
CF
PCA0CPL0 PCA0CPL1 PCA0CPL2 PCA0CPL3 PCA0CPL4 PCA0CPL5
PCA0CPH0 PCA0CPH1 PCA0CPH2 PCA0CPH3 PCA0CPH4 PCA0CPH5
CCF0
RTC OSC/8
TO PORT I/O
CEX0 CEX1 CEX2 CEX3 CEX4 CEX5 2015.12.06. 11:18
Digitális perifériák és használatuk
CCF1 CCF2 CCF3 CCF4 CCF5
TO INTERRUPT HANDLER
SYSCLK
110
SYSCLK/12
SFR BUS
SYSCLK/4 TIMER0 EXT CLK IN SYSCLK EXT OSC/8
PCA0L
SNAPSHOT REGISTER
PCA0L READ
PCA0H
CF
RTC OSC/8
Sokféle órajelforrás Akár Timer0 8-bit auto-reload túlcsordulás Timer 0 16-bittel való kiterjesztése Lassabb, programozható órajel 16-bites biztonságos olvasás (PCA0L először) 2015.12.06. 11:18
Digitális perifériák és használatuk
111
PCA0CPLn PCA0CPHn CEXn
CCFn
PCA clock
PCA0L
PCA0H
Külső jel felfutó, lefutó vagy mindkét átmeneténél A PCA0 számláló a PCACPn regiszterekbe kerül A CCFn flag 1-re vált, megszakítás is létrejöhet Események, jelváltások időpillanatainak detektálására Frekvencia, periódusidő, pulzusszélesség, kitöltési
tényező mérésére alkalmas 2015.12.06. 11:18
Digitális perifériák és használatuk
112
Pulzusszélesség mérése Felfutó él engedélyezése
Megszakítás engedélyezése A megszakításban: capture regiszter elmentése lefutó él engedélyezése következő megszakításban capture regiszter aktuális és előző értékének különbsége
Feladat: a kód megírása
2015.12.06. 11:18
Digitális perifériák és használatuk
113
CAPTURE REGISTER=K
CAPTURE REGISTER=L
PCA CLK PCA0
0
1
2
K-1
K
K+1
L-1
L
L+1
CEXn (L-K)t INTERRUPT
2015.12.06. 11:18
Digitális perifériák és használatuk
INTERRUPT
114
RESET Write to PCA0CPLn
OR
PCA0CPLn PCA0CPHn 0
Write to PCA0CPHn
1
16-bit COMPARATOR PCA0L
PCA clock
CCFn
PCA0H
FONTOS! Írási sorrend: PCA0CPLn, PCA0CPHn A CCFn 1-re vált, ha a PCA0 és PCA0CPn regiszter azonos Detektálás után CCFn törlése, új PCA0CPn érték beírása Változatos szoftveres időzítésekhez 2015.12.06. 11:18
Digitális perifériák és használatuk
115
Software updates compare register COMPARE REGISTER=K
COMPARE REGISTER=L
PCA CLK PCA0
0
1
2
K-1
K
K+1
L-1
L
L+1
CCFn software clears CCFn 2015.12.06. 11:18
Digitális perifériák és használatuk
116
Programozható késleltetés Adott idő múlva bekövetkező megszakítás
Növekvő/csökkenő időnként bekövetkező
megszakítás Forráskódok?
2015.12.06. 11:18
Digitális perifériák és használatuk
117
RESET
Write to PCA0CPLn
OR
PCA0CPLn PCA0CPHn 0
Write to PCA0CPHn PCA clock
1
D Q C Q
16-bit COMPARATOR PCA0L
CEXn CCFn
PCA0H
FONTOS! Írási sorrend: PCA0CPLn, PCA0CPHn Azonos a software timer móddal, de kimenő jelet is ad Általános váltási idejű logikai jelek előállítására 2015.12.06. 11:18
Digitális perifériák és használatuk
118
Software updates compare register COMPARE REGISTER=K
COMPARE REGISTER=L
PCA CLK PCA0
0
1
2
K-1
K
K+1
L-1
L
L+1
CEXn (L-K)t
2015.12.06. 11:18
Digitális perifériák és használatuk
119
Periodikus négyszögjel Növekvő/csökkenő időnként változó jel
Változó szélességű impulzusok (PWM) Változó időközönkénti impulzusok Egymáshoz képest precízen időzített jelváltások több modul használatával több jel
A jelváltásokkor megszakítás ez állíthatja be a következő jelváltási időt részben szoftveres, befolyásolja a minimális időt! 2015.12.06. 11:18
Digitális perifériák és használatuk
120
PCA0CPLn
Enable
8-bit comparator
PCA clock
PCA0L
8-bit adder
PCA0CPHn D Q C Q
CEXn
8-bit felbontású teljesen hardveres négyszögjel-forrás 50% kitöltési tényező f=fPCA/PCA0CPHn/2 2015.12.06. 11:18
Digitális perifériák és használatuk
121
PCA0CPHn=3 PCACLK PCA0L PCA0CPLn
255
0
1
2
3
4
5
6
7
8
9
10
0
3
3
3
6
6
6
9
9
9
12
12
CEXn
2015.12.06. 11:18
Digitális perifériák és használatuk
122
PCA0CPHn PCA0CPLn
Enable
PCA clock
8-bit comparator
S Q
PCA0L
OVERFLOW
CEXn
R
8-bites PWM, programozható kitöltési tényező fPCA/256 frekvencia FONTOS! Írási sorrend: PCA0CPLn, PCA0CPHn 2015.12.06. 11:18
Digitális perifériák és használatuk
123
PCA CLK PCA0L
255
0
1
K-1
K
K+1
254 255
0
1
CEXn Kt
(256-K)t 256t
2015.12.06. 11:18
Digitális perifériák és használatuk
124
PCA0CPLn
Enable
PCA0CPHn
16-bit comparator
S Q
CEXn
R PCA clock
PCA0L
PCA0H
OVERFLOW
16-bites PWM, programozható kitöltési tényező fpca/65536 frekvencia FONTOS! Írási sorrend: PCA0CPLn, PCA0CPHn
2015.12.06. 11:18
Digitális perifériák és használatuk
125
1
0
65535
65534
K+1
K
K-1
1
0
PCA0
65535
PCA CLK
CEXn Kt
(65536-K)t 65536t
2015.12.06. 11:18
Digitális perifériák és használatuk
126
Lassú rendszerek vezérlése LED/lámpa fényerő
Motor fordulatszám Fűtőszál Peltier elem
Hangszóró
2015.12.06. 11:18
Digitális perifériák és használatuk
127
Analóg jel? A frekvencia elég nagy a rendszer sebességéhez
képest? Szűrés szükséges? Mekkora a hullámossága szűrés után? A logikai jel amplitúdója mekkora és milyen stabil? Ha mérjük a hatást, javítható a pontosság CEXn
VREF R
R C
C CEXn
2015.12.06. 11:18
Digitális perifériák és használatuk
128
Vref R C
V
Vref
CEXn
Közelítés A legnagyobb
ingadozás: 50% kitöltés T/2 ideig I=(Vref/2)/R Töltés:IT/2 2015.12.06. 11:18
Digitális perifériák és használatuk
T VREF I Q T 2 2 V C C RC 2 V T VREF 4 RC 129
T V REF RC 4 U Ha RC nő, a feltétel egyre jobban teljesül 8-bit PWM példa SYSCLK=191406 Hz
T=256/191406s1,34ms legyen U/VREF<1/256 RC>641,34ms pl.: 10k, 10uF 2015.12.06. 11:18
Digitális perifériák és használatuk
130
Általánosabban, a rendszer időállandójából a rendszer időállandója: A vezérlőjel 0 állapotához tartozó érték: xmin A vezérlőjel 1 állapotához tartozó érték: xmax Megengedett ingadozás: x A PWM jel periódusideje: T
x T 4 xmax xmin 2015.12.06. 11:18
Termikus példa: =50s A gerjesztés 80⁰C-ot emel 0,5⁰C ingadozáshoz: T<450s0,5/80=1,25s
Digitális perifériák és használatuk
131
PCA0CPH5 Enable
8-bit comparator
match AND
RESET
PCA0L overflow PCA clock
PCA0L
PCA0H
Write to PCA0CPH5 enables adder
8-bit adder
PCA0CPL5
Bizonyos C8051Fxxx processzorokon Elfoglal egy PCA csatornát, ha aktív Ha engedélyezve van, zárolva van a PCA clock Ez alkalmazásokat korlátozhat 2015.12.06. 11:18
Digitális perifériák és használatuk
132
PCA0CPLn=4 PCA0L overflow PCA0H PCA0CPH5
PCA CLK/256
255
0
1
2
3
4
5
6
7
8
x
x
3
3
3
6
6
8
8
8
8
8
x
x
Write to PCA0CPH5
/RESET
2015.12.06. 11:18
Digitális perifériák és használatuk
133
2015.12.06. 11:18
Digitális perifériák és használatuk
134
Valós idő mérésére, óra Elemről önállóan megy, ha a táp ki van kapcsolva
Ébresztő funkció, felkelti a processzort Alacsony fogyasztás
RTC
2015.12.06. 11:18
Digitális perifériák és használatuk
8051 CORE
135
ALARM5
ALARM4
ALARM3
ALARM2
ALARM1
ALARM0
ALARM IRQ
47-bit COMPARATOR
44444444333333333322222222221111111111000000000X 76543210987654321098765432109876543210987654321 RTC5
RTC4
RTC3
RTC2
RTC1
RTC0
CAPTURE5
CAPTURE4
CAPTURE3
CAPTURE2
CAPTURE1
CAPTURE0
2015.12.06. 11:18
Digitális perifériák és használatuk
32768Hz OSC
136
Processzor órajelét adhatja alacsony fogyasztás pontos PCA órajelét adhatja RTC clock/8, (4096Hz, 65536 lépés: 16s) Óra, naptár másodpercek (5 byte : RTC5..RTC1) másodperc konvertálása dátummá (1970-től) Alarm megszakítás hosszú idejű altatások (nagyon alacsony fogyasztás) 2015.12.06. 11:18
Digitális perifériák és használatuk
137