Přečtěte si temp DS18S20 s teplotním čidlem

H

Hasher

Guest
Jsem pomocí PIC18F2420 s DS18S20 teplotní čidlo.
PIC ==> 10-bitové rozlišení A / D modul
TempSensor ==> 9-bitové rozlišení
TempSensor ==> rozsah: -55 ° C až 125 ° C

Chci si přečíst Temp.Senzorové volt jako hodnota teploty.

Udělal jsem tohle:

unsigned int volt;
unsigned int temp;

Kód:

void main ()

(

while (1)

(

volt = ADC_Read (2);

temp = 5 * volt * / 1024;

)

)
 
Promiňte, není DS18S20 digitální čidlo teploty!

Proč by potřebujete ADC-li čidlo produkce je již binární.Jen její přeměně desetinná za aktuální.

 
Přesně DS18S20 je digitální senzor, který komunikuje s 1-Wire protokolu.
Přečtěte si o tom, provedení (viz www.maxim-ic.com pro více informací - přesně: http://www.maxim-ic.com/products/1-wire/) a to
bude fungovat výborně.

 
Nazdar,

Zde je příklad:

/ *
* Název projektu:
Onewire_Test (Propojení s DS18x20 teplotní čidlo - všechny verze)
* Copyright:
(c) MikroElektronika, 2005-2008.
* Popis:
Po resetování PIC čte teplotu z čidla a vytiskne jej na LCD.
Na displeji se formát je teplota 'xxx.xxxx ° C'.Chcete-li získat správné
výsledky, 18x20
je teplota usnesení je třeba upravit (konstantní
TEMP_RESOLUTION)
* Testovací sestava:
MCU: PIC16F877A
Dev.Board: EasyPIC4
Oscilátor: ZÚ, 08,0000 MHz
Ext.Moduly: DS18x20 připojen k RE2 pin, LCD_2x16
SW: mikroC v8.0.0.0
* Poznámky:
- Zvedni to a vypnutí diody na pin použita pro jeden drát autobus může být požadováno (v tomto příkladu PORTE)
* // / Nastavit TEMP_RESOLUTION na odpovídající rozlišení použitých DS18x20 sonda:
/ / 18S20: 9 (výchozí nastavení, může být 9,10,11 nebo 12)
/ / 18B20: 12
const unsigned krátké TEMP_RESOLUTION = 9;

char * text = "000.0000";
unsigned temp;

void Display_Temperature (unsigned int temp2write)
(
const unsigned krátké RES_SHIFT = TEMP_RESOLUTION - 8;
char temp_whole;
unsigned int temp_fraction;

/ / Check-li teplota je záporná
if (temp2write & 0x8000)
(
text [0] = '-';
temp2write = ~ temp2write 1;
)

/ / Výpis temp_whole
temp_whole = temp2write>> RES_SHIFT;

/ /
Convert temp_whole se znaky
if (temp_whole/100)
text [0] = temp_whole/100 48;

text [1] = (temp_whole/10%) 10 48 / / extrahovat desítky digit
text [2] = temp_whole% 10 48 / / extrahovat ty digit

/ / Výpis temp_fraction a přeměnit ji na unsigned int
temp_fraction = temp2write <<(4-RES_SHIFT);
temp_fraction & = 0x000F;
temp_fraction *= 625;

/ /
Convert temp_fraction se znaky
text [4] = temp_fraction/1000 48 / / extrakt tisíce digit
text [5] = (temp_fraction/100%) 10 48 / / extrakt stovky digit
text [6] = (temp_fraction/10%) 10 48 / / extrahovat desítky digit
text [7] = temp_fraction% 10 48 / / extrahovat ty digit

/ /
Print teploty na LCD
Lcd_Out (2, 5, text);
) / / ~

void main ()
(
ADCON1 = 7; / / konfiguraci pinů jako digitální I / O
Lcd_Init (& PORTD); / / Lcd_Init_EP4, viz Automatické
Lcd_Cmd (LCD_CURSOR_OFF);
Lcd_Out (1, 1, "Teplota:");
/ / Tisk stupni znak 'C' za stupňů
Lcd_Chr (2,13,223);
Lcd_Chr (2,14, 'C');

//--- Hlavní smyčkou
while (1)
(
//--- Provádět teplotní čtení
Ow_Reset (& PORTE, 2); / / Onewire reset signál
Ow_Write (& PORTE, 2,0 xCC); / / Vydání příkazu SKIP_ROM
Ow_Write (& PORTE, 2,0 x44); / / Vydání příkazu CONVERT_T
Delay_ms (750);

Ow_Reset (& PORTE, 2);
Ow_Write (& PORTE, 2,0 xCC); / / Vydání příkazu SKIP_ROM
Ow_Write (& PORTE, 2,0 xBE); / / Vydání příkazu READ_SCRATCHPAD

temp = Ow_Read (& PORTE, 2);
temp = (Ow_Read (& PORTE, 2) <<

<img src="images/smiles/icon_cool.gif" alt="Chladný" border="0" />

Temp;

//--- Formát a zobrazení výsledku na LCD
Display_Temperature (temp);

)
)

 
Ooooooooh!

Díky Budy!

Ale nemůžu použít mikroC mám použít Hi-Tech & C kompilátor ji nemá 1 drát knihovně?

??

 
Není to, že dificult napsat 1 drát lib v C. ..

check this out:

http://www.pichobby.bravehost.com/DS18B20.html

 
pokud chcete ADC typu použití LM35, který je také levnější tan DS1820

 

Welcome to EDABoard.com

Sponsor

Back
Top