Meranie teploty pomocou LM92: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
Riadok 79: Riadok 79:
 
== I2C ==
 
== I2C ==
  
Aj keď aj pre toto sériové rozhranie existuje hardéverový blok, rozhodli sme sa, že si naprogramujeme vlastný softvér pre implementáciu tohto rozhrania.
+
Aj keď aj pre toto sériové rozhranie existuje hardéverový blok, rozhodli sme sa, že si naprogramujeme vlastný softvér pre implementáciu tohto rozhrania. Toto naše rozhranie nebude potrebovať vonkajšie PULL-UP rezistory.
 +
 
 +
Ako prvé vytvoríme súbor napr. ''i2c.inc'', v ktorom sa nachádzajú deklarácie pre rozhranie I2C. Jeho obsah je nasledovný:
 +
 
 +
<source lang="asm">
 +
 
 +
; Definicia portu a pinov
 +
; upravit podla aktualneho nastavenia
 +
 
 +
PORT: equ PORT_1         ; PORT_0, PORT_1, PORT_2
 +
SDA: equ P_5 ; P_0, P_1, ... P_7
 +
SCL: equ P_4 ; P_0, P_1, ... P_7
 +
 
 +
;=============================================================================
 +
; Globalne definicie
 +
I2C_WRITE: equ %00000000
 +
I2C_READ: equ %00000001
 +
I2C_ACK: equ %00000010
 +
I2C_NOACK: equ %00000100
 +
 
 +
PORT_2: equ PRT2DR
 +
PORT_1: equ PRT1DR
 +
PORT_0: equ PRT0DR
 +
P_7: equ %10000000
 +
P_6: equ %01000000
 +
P_5: equ %00100000
 +
P_4: equ %00010000
 +
P_3: equ %00001000
 +
P_2: equ %00000100
 +
P_1: equ %00000010
 +
P_0: equ %00000001
 +
;-----------------------------------------------------------------------------
 +
; Makra pre set/clear pinov SDA, SCL
 +
MACRO SET_SDA
 +
mov A, reg[PORT]
 +
or A, SDA
 +
mov reg[PORT],A
 +
call BitDly
 +
ENDM
 +
 
 +
MACRO CLR_SDA
 +
mov A, reg[PORT]
 +
xor A, 0xFF
 +
or A, SDA
 +
xor A, 0xFF
 +
mov reg[PORT],A
 +
call BitDly
 +
ENDM
 +
 
 +
MACRO SET_SCL
 +
mov A, reg[PORT]
 +
or A, SCL
 +
mov reg[PORT],A
 +
call BitDly
 +
ENDM
 +
 
 +
MACRO CLR_SCL
 +
mov A, reg[PORT]
 +
xor A, 0xFF
 +
or A, SCL
 +
xor A, 0xFF
 +
mov reg[PORT],A
 +
call BitDly
 +
ENDM
 +
; Makra pre nastavenie priznakov premennej [Flag]
 +
MACRO SET_NO_ACK
 +
mov [Flag], 0x80
 +
ENDM
 +
 
 +
MACRO CLR_NO_ACK
 +
mov [Flag], 0x00
 +
ENDM
 +
 
 +
MACRO BIT_DELAY
 +
call  BitDly
 +
ENDM
 +
</source>

Verzia zo dňa a času 11:49, 25. jún 2010

Teplotný snímač LM92

Všeobecný popis

LM92 je digitálny teplomer a tepelný komparátor s I2C rozhraním, jeho presnosť je ±0.33ºC. Môže byť napájaný v rozsahu napätí 2,7V až 5,5V. Sériová zbernica, 12-bitový znamienkový výstup a rozsah 128 ºC je ideálny pre široký rozsah aplikácií, napr. teplotný manažment a ochrana aplikácií v PC, elektronické testovacie náradie, kancelárska technika, elektronika, automobilové a medicínske aplikácie.

Obr. 1. Bloková schéma

Charakteristické znaky

- jednoduchý dizajn

- zaznamenávanie a kontrola teploty

- sériové rozhranie

- výstup pre vypnutie systému pri kritickej teplote

- minimálna spotreba energie pri Shut-down móde

- až 4 teplotné snímače LM92 je možné pripojiť na jednu zbernicu

- 12 bitový znamienkový výstup

- Operuje až do 150 ºC


Špecifikácie

- napájanie 2,7V až 5,5V

- spotreba počas behu 350 μA

- spotreba počas shut-down 5 μA

- Rozlíšenie 0,0625 ºC


Obr. 2. Popis pinov

SDA – sériová obojsmerná dátová linka

SCL – hodinový vstup

T_CRIT_A – výstup alarmu pri kritickej teplote

INT – výstup pre prerušenie

GND – zem

+Vs – napájanie

A0 – A1 – nastavenie adresy

Dátový formát teploty

Teplotné dáta môžu byť čítané z teplomera alebo z registrov pre SetPointy; a zapisované do Setpoint registrov. Teplotné dáta môžu byť čítané kedykoľvek. Ak bude frekvencia čítania dát vysoká, dáta v teplomery sa nestihnú obnoviť. Teplotné dáta sú reprezentované 13-bitovým binárnym číslom s LSB. Jeden bit je rovný 0, 0625 ºC.

Obr. 3. Teplotný register

Ako vidíme na obr. 3, bity D0 až D2 sú stavové bity. Teplota je na D3 až D14 a D15 je znamienko. Ak D15 je 1, znamienko je -. Príklady reprezentácie teploty sú na obr. 4. Treba si uvedomiť, že ak prečítame tento register získame 16 bitov, čo nie je hneď konkrétna nameraná teplota. Ak chceme získať teplotu, musíme sa zbaviť stavových bitov D0 až D2.

Obr. 4. Digitálny výstup z teplomera


Spojenie LM92 s mikrokontrolérom Cypress

Pre spojenie potrebujeme sériové rozhranie I2C, ktoré slúži na komunikáciu mikrokontroléra s teplomerom a napríklad RS232 rozhranie pre komunikáciu mikrokontroléra s počítačom, kde môžme získané informácie ďalej spracovávať a vyhodnocovať.


RS232

Toto rozhranie zavedieme použitím hardvérového bloku UART, ktorý Cypress obsahuje. Rýchlosť komunikácie bude 19200Bd, čo znamená frekvenciu 153kHz. Keď chceme nastaviť túto frekvenciu, musíme deliť základnú frekvenciu Cypress 24Mhz/156. Použijeme delič frekvencie VC3, ktorý bude následne zdroj frekvencie pre UART. Pre príjímané dáta použijeme pin P0_4 a pre odosielané dáta použijeme pin P0_2. Konkrétne nastavenia bloku UART priamo v PSoC dizajneri sú na obr. 5. Na obr.6. je vidieť umiestnenie blokov UART s schéme zapojenia.

Obr. 5. Konkrétne nastavenia bloku UART
Obr. 6. Umiestnenie bloku UART v schéme zapojenia

I2C

Aj keď aj pre toto sériové rozhranie existuje hardéverový blok, rozhodli sme sa, že si naprogramujeme vlastný softvér pre implementáciu tohto rozhrania. Toto naše rozhranie nebude potrebovať vonkajšie PULL-UP rezistory.

Ako prvé vytvoríme súbor napr. i2c.inc, v ktorom sa nachádzajú deklarácie pre rozhranie I2C. Jeho obsah je nasledovný:

; Definicia portu a pinov 
; upravit podla aktualneho nastavenia

PORT:		equ		PORT_1	        ; PORT_0, PORT_1, PORT_2
SDA:		equ		P_5		; P_0, P_1, ... P_7
SCL:		equ		P_4		; P_0, P_1, ... P_7

;=============================================================================
; Globalne definicie
I2C_WRITE:	equ		%00000000
I2C_READ:	equ		%00000001	
I2C_ACK:	equ		%00000010
I2C_NOACK:	equ		%00000100

PORT_2:		equ 	PRT2DR
PORT_1:		equ 	PRT1DR
PORT_0:		equ 	PRT0DR
P_7:		equ		%10000000
P_6:		equ		%01000000
P_5:		equ		%00100000
P_4:		equ		%00010000
P_3:		equ		%00001000
P_2:		equ		%00000100
P_1:		equ		%00000010
P_0:		equ		%00000001
;-----------------------------------------------------------------------------
; Makra pre set/clear pinov SDA, SCL
MACRO SET_SDA
	mov A, reg[PORT]
	or A, SDA
	mov reg[PORT],A
	call BitDly
ENDM

MACRO CLR_SDA
	mov A, reg[PORT]
	xor A, 0xFF
	or A, SDA
	xor A, 0xFF
	mov reg[PORT],A
	call BitDly
ENDM

MACRO SET_SCL
	mov A, reg[PORT]
	or A, SCL
	mov reg[PORT],A
	call BitDly
ENDM

MACRO CLR_SCL
	mov A, reg[PORT]
	xor A, 0xFF
	or A, SCL
	xor A, 0xFF
	mov reg[PORT],A
	call BitDly
ENDM
; Makra pre nastavenie priznakov premennej [Flag]
MACRO SET_NO_ACK
	mov [Flag], 0x80
ENDM

MACRO CLR_NO_ACK
	mov [Flag], 0x00
ENDM

MACRO BIT_DELAY
	call  BitDly
ENDM