teplotní senzor kód potřebný USING PIC18F452

H

helloarloha

Guest
jsme povinni nastavení PIC18F452 a umožní modul ADC číst teplotní čidlo uisng PIC ... může někdo pomoci, aby kód?thx předem ...

 
Ahoj,
Co senzor, který chcete použít, a co je nejvyšší limit teploty?Jaké by měly být jazyk, montáž nebo C nebo Mikrobasic?

 
to může být v V MPLAB nebo Micro C nebo CCS ... já jsem s použitím LM 35 a teplotní rozsah není uvedeno .. ale můžeme Juz nastavit jako možná 10-50 ...Přidáno po 2 minutách:pokud montáž je vhodnější, protože učím se těžko na to ... pokud ne mikro C nebo CCS kód také přijatelná .... thx ...

 
helloarloha napsal:

budeme muset nastavit PIC18F452 a umožní modul ADC číst teplotní čidlo uisng PIC ... může někdo pomoci, aby kód?
thx předem ...
 
Ahoj helloarloha,
Zde uvádím jednoduchý teplotní čidlo pomocí PIC18F452 a LCD v mikroBASIC.

Kód:

program thermometer452dim LCD_RS jako sbit na RB4_bit

LCD_EN jako sbit na RB5_bit

LCD_D4 jako sbit na RB0_bit

LCD_D5 jako sbit na RB1_bit

LCD_D6 jako sbit v RB2_bit

LCD_D7 jako sbit na RB3_bitLCD_RS_Direction jako sbit na TRISB4_bit

LCD_EN_Direction jako sbit v TRISB5_bit

LCD_D4_Direction jako sbit v TRISB0_bit

LCD_D5_Direction jako sbit na TRISB1_bit

LCD_D6_Direction jako sbit na TRISB2_bit

LCD_D7_Direction jako sbit na TRISB3_bitdim ADCResult jako longword

dim hodnotu jako slovo [3]

dim vstring jako string [3]sub postup GlobInit

TRISB = 0

PORTB = 0

TRISA = 1

ADCON1 = $ 4E

LCD_Init

LCD_Cmd (_LCD_CLEAR)

LCD_Cmd (_LCD_CURSOR_OFF)

LCD_Out (1, 1, "Temp:")

LCD_Out (1, 15, '"C")

End Subhlavní:

GlobInit

To je sice pravda

ADCResult = (ADC_Read (0) * 500)>> 10

hodnota [0] = ADCResult div 100

hodnota [1] = (ADCResult div 10) mod 10

hodnotu [2] = ADCResult mod 10

vstring [0] = hodnota [0] 48

vstring [1] = hodnota [1] 48

vstring [2] = hodnota [2] 48

LCD_Out (1, 10, vstring)

delay_ms (50)

zamířit

konce roku.
 
Ahoj helloarloha,
Zde je ekvivalentní zdrojový kód v mikroC:

Kód:

unsigned long ADCResult;

unsigned int hodnota [3];

char vstring [3];neplatné GlobInit (void) (

TRISB = 0;

PORTB = 0;

TRISA = 1;

ADCON1 = 0x4E;

LCD_Config (& PORTB, 4, 5, 6, 3, 2, 1, 0);

LCD_Cmd (LCD_CLEAR);

LCD_Cmd (LCD_CURSOR_OFF);

LCD_Out (1, 1, "Temp:");

LCD_Out (1, 15, '"C");

)void main () (

GlobInit ();

while (1) (

ADCResult = (ADC_Read (0) * 500)>> 10;

hodnota [0] = ADCResult / 100;

hodnota [1] = (ADCResult / 10)% 10;

hodnotu [2] = ADCResult% 10;

vstring [0] = hodnota [0] 48;

vstring [1] = hodnota [1] 48;

vstring [2] = hodnota [2] 48;

LCD_Out (1, 10, vstring);

delay_ms (50);

)

)
 
/ *
************************************************** *****************************
* PIC digitální teploměr USING MICROCHIP MCP9700A ANALOG SENSOR
************************************************** *****************************
*
* Zdrojový kód například pro uživatele mikroC
* Klidně použijte tento kód na vaše vlastní nebezpečí
*
* Cíl: PIC16F877A, 8 Mhz krystal
* HS hodiny, bez hlídací pes.
*
* EasyPIC4 nastavení:
* MCP9700A na socket DS1820, viz webové stránky pro více informací.
*
* Autor: Bruno Gavand, září 2007
* Viz více informací o http://www.micro-examples.com/
*
************************************************** *****************************
* /

/ *
* LCD_printfix konstanty
* /
# Define INT_RANGE 1000 / / číslo části: 3 číslice
# Define DEC_RANGE 10 / / desetinnou část: 1 digit

/ *
* Tento čítač je zvýšeno na každé TIMER0 přetečení
* /
unsigned int cntr;

dlouho temp; / / teplota ve stupních Celsia * 10
int Fahr; / / teplota v jednotkách Fahrenheit * 10

/ *
* Offset odkaz na senzoru: 0 ° C je 500 mV => 102,4
* Protože senzor je kalibrován továrny, není třeba při opravě
* /
int ref = 1024; / / offset se vynásobí 10 až získat desetinu stupně

/ *
* LCD charakteru definic generovaných mikroC LCD Vlastní nástroj znaků:
* /
char characterC [] = (8,20,8,0,3,4,4,3); / / ° C
char characterF [] = (8,20,8,0,7,4,6,4); / / ° F

/ *
* Tisk znak, na níž odkazuje na def pos_row sloupci řádku pos_char na LCD
* /
neplatné CustomChar (const char * def, unsigned char n, char pos_row, char pos_char)
(
char i;

LCD_Cmd (64 n *

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Chladný" border="0" />

;
pro (i = 0; i <= 7; i )
(
LCD_Chr_Cp (def );
)
LCD_Cmd (LCD_RETURN_HOME);
LCD_Chr (pos_row, pos_char, n);
)

/ *
* Tisk v s pevnou-velikost celé číslo a desetinné části
* /
neplatné LCD_printFix (unsigned int v)
(
unsigned int w;
unsigned int d;
unsigned char n;
unsigned char BLK = 1; / / nula blank

if (v> = 0)
(
LCD_Chr_Cp (' ');
)
jiný
(
LCD_Chr_Cp ('-');
)

v = abs (v);
w = v / DEC_RANGE;
na (d = INT_RANGE / 10; d> 0, d = 10)
(
n = (w / d)% 10;
if (n)
(
BLK = 0;
)
if (BLK)
(
LCD_Chr_Cp ('');
)
jiný
(
LCD_Chr_Cp ('0 ' n);
)
)
LCD_Chr_Cp ('.');
w = v% DEC_RANGE;
na (d = DEC_RANGE / 10; d> 0, d = 10)
(
LCD_Chr_Cp ('0 ' (w / d)% 10);
)
)

/ *
* Přerušení rutinní, vyzval každý timer0 přetečení
* /
neplatné přerušení (void)
(
if (INTCON.T0IF) / / časovač 0 přetečení?
(
cntr ; / / přírůstek počítadlo
INTCON.T0IF = 0; / / Konec
)
)

/ *
* Program vstupní
* /
void main ()
(
ADCON1 = 0x00, / / soubor PORTA jako analogové vstupy
TRISA = 0xFF; / / set PORTA jako vstupy
TRISD = 0; / / PORTD je výstup
LCD_Init (& PORTD); / / Inicializace LCD připojené k PORTD
LCD_Cmd (Lcd_CLEAR); / / Clear displeji
LCD_Cmd (Lcd_CURSOR_OFF); / / Zapnout cursor off
LCD_Out (1, 1, "MCP9700A PŘÍKLAD"); / / Print uvítací zprávu

OPTION_REG = 0x80, / / start časovač 0, žádná prescaler
INTCON = 0xA0, / / aby časovač 0 přetečení přerušení

for (;

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Mrknutí" border="0" />

/ / Navždy
(
if (cntr> = 4000) / / pokud dost času od posledního vzorku
(
/ *
* Přečtěte si senzor
* /
temp = Adc_Read (7) * 10 - ref; / / čtení R.sup.2.n. ADC, nastavte na 0 ° C

/ *
* Získat výsledek v celcius * 10
* Čidlo teplotní koeficient je 10 mV / ° C
* ADC rozlišení je 5000/1024 = 4,88 mV tak jeden ADC bod je 0,488 ° C
* /
temp *= 488;
temp / = 1000;

Fahr = ((9 * temp) / 5) 320, / / convert C stupňů F * 10

/ *
* Tisk teplota ve ° C na LCD
* /
LCD_Out (2, 1, "");
LCD_printFix (temp);
CustomChar (characterC, 0, 2, 7);

/ *
* Tisk teplota ve ° F na LCD
* /
LCD_Out (2, 10 "");
LCD_printFix (Fahr);
CustomChar (characterF, 1, 2, 16);

cntr = 0; / / jasný počítadlo
)
)
)

 
Ahoj, dělám projekt, který využívá PIC18F452 číst LM35DZ teplotu .. Nevím, proč se hodnota teploty na mé LCD je 0,00 'C.. Existuje nějaký kódování musím napsat nastavit snímač?

 
Ahoj sunahm,
Vy jste pravděpodobně není čtení LM35 správně, zkontrolujte ADC inicializaci a čtení část v kódu.
Pokud můžete, vysílání kódu by pomohla.
Doufám, že to pomůže.
Tahmid.

 

Welcome to EDABoard.com

Sponsor

Back
Top