D
dimas_lilik
Guest
Spoštovani vsi ..
Lahko pomagaš?
Želim LCD zaslon z 2 x 16
prosim pomoč mi
/***************************
DS2760 Interfacing
****************************/
# include <stdio.h> / / printf (), uchar, uint, ....
# include <reg51.h> / / interals procesorja
# include "1wire.h" / / 1-wire napravo lib
/************************
Port Izjava
*************************/
/ / DS2760 pristanišče izjavo 1wire.c
/************************************************* ******************
T-tip (Copper / Constantan) temperaturni podatki (0C reference)
Avtor: zbral Parallax
Updated: 19 JAN 2004
************************************************** ******************/
const uint Cnv_table [401] =
(
/ * T000 * / 0, 39, 78, 117, 156, 195, 234, 273, 312, 352,
/ * T010 * / 391, 431, 470, 510, 549, 589, 629, 669, 709, 749,
/ * T020 * / 790, 830, 870, 911, 951, 992, 1032, 1074, 1114, 1155,
/ * T030 * / 1196, 1238, 1279, 1320, 1362, 1403, 1445, 1486, 1528, 1570,
/ * T040 * / 1612, 1654, 1696, 1738, 1780, 1822, 1865, 1908, 1950, 1993,
/ * T050 * / 2036, 2079, 2121, 2165, 2208, 2250, 2294, 2338, 2381, 2425,
/ * T060 * / 2468, 2512, 2556, 2600, 2643, 2687, 2732, 2776, 2819, 2863,
/ * T070 * / 2909, 2952, 2998, 3043, 3087, 3132, 3177, 3222, 3266, 3312,
/ * T080 * / 3358, 3403, 3447, 3494, 3539, 3584, 3631, 3677, 3722, 3768,
/ * T090 * / 3814, 3859, 3907, 3953, 3999, 4046, 4092, 4137, 4185, 4232,
/ * T100 * / 4278, 4325, 4371, 4419, 4466, 4512, 4561, 4608, 4655, 4701,
/ * T110 * / 4750, 4798, 4844, 4892, 4940, 4988, 5036, 5084, 5131, 5179,
/ * T120 * / 5227, 5277, 5325, 5373, 5421, 5469, 5519, 5567, 5616, 5665,
/ * T130 * / 5714, 5762, 5812, 5860, 5910, 5959, 6008, 6057, 6107, 6155,
/ * T140 * / 6206, 6254, 6304, 6355, 6403, 6453, 6504, 6554, 6604, 6653,
/ * T150 * / 6703, 6754, 6804, 6855, 6905, 6956, 7006, 7057, 7107, 7158,
/ * T160 * / 7209, 7259, 7310, 7360, 7411, 7463, 7515, 7565, 7617, 7668,
/ * T170 * / 7719, 7770, 7823, 7874, 7926, 7977, 8028, 8080, 8133, 8185,
/ * T180 * / 8237, 8288, 8340, 8393, 8445, 8496, 8550, 8602, 8653, 8707,
/ * T190 * / 8759, 8811, 8865, 8916, 8970, 9022, 9076, 9128, 9182, 9234,
/ * T200 * / 9288, 9341, 9394, 9448, 9500, 9554, 9608, 9662, 9714, 9769,
/ * T210 * / 9822, 9875, 9929, 9984, 10.038, 10.092, 10.146, 10.200, 10.253, 10.307,
/ * T220 * / 10.362, 10.416, 10.471, 10.525, 10.580, 10.634, 10.689, 10.743, 10.798, 10.852,
/ * T230 * / 10.907, 10.961, 11.016, 11.072, 11.127, 11.182, 11.237, 11.291, 11.346, 11.403,
/ * T240 * / 11.458, 11.512, 11.569, 11.624, 11.679, 11.734, 11.791, 11.846, 11.902, 11.958,
/ * T250 * / 12.012, 12.069, 12.125, 12.181, 12.237, 12.293, 12.349, 12.405, 12.461, 12.518,
/ * T260 * / 12.573, 12.630, 12.686, 12.743, 12.798, 12.855, 12.912, 12.968, 13.025, 13.082,
/ * T270 * / 13.139, 13.195, 13.253, 13.310, 13.365, 13.423, 13.480, 13.537, 13.595, 13.652,
/ * T280 * / 13.708, 13.766, 13.823, 13.881, 13.938, 13.995, 14.053, 14.109, 14.168, 14.226,
/ * T290 * / 14.282, 14.341, 14.399, 14.455, 14.514, 14.572, 14.630, 14.688, 14.746, 14.804,
/ * T300 * / 14.862, 14.919, 14.977, 15.035, 15.095, 15.153, 15.211, 15.269, 15.328, 15.386,
/ * T310 * / 15.445, 15.503, 15.562, 15.621, 15.679, 15.737, 15.797, 15.855, 15.913, 15.973,
/ * T320 * / 16.032, 16.091, 16.149, 16.208, 16.268, 16.327, 16.387, 16.446, 16.504, 16.564,
/ * T330 * / 16.623, 16.682, 16.742, 16.801, 16.861, 16.920, 16.980, 17.039, 17.100, 17.158,
/ * T340 * / 17.219, 17.278, 17.338, 17.399, 17.458, 17.518, 17.577, 17.638, 17.698, 17.759,
/ * T350 * / 17.818, 17.879, 17.939, 17.998, 18.059, 18.120, 18.179, 18.240, 18.301, 18.362,
/ * T360 * / 18.422, 18.483, 18.542, 18.603, 18.664, 18.725, 18.786, 18.847, 18.908, 18.969,
/ * T370 * / 19.030, 19.091, 19.152, 19.213, 19.274, 19.335, 19.396, 19.457, 19.518, 19.579,
/ * T380 * / 19.641, 19.702, 19.763, 19.824, 19.885, 19.946, 20.009, 20.070, 20.132, 20.193,
/ * T390 * / 20.255, 20.317, 20.378, 20.440, 20.501, 20.563, 20.625, 20.687, 20.748, 20.810,
/ * T400 * / 20872
);
/*************************************************
Konstante & Globalna spremenljivka
************************************************** /
const uchar readnet = 0x33; / / bere OW net naslov
const uchar skipnet = 0xcc; / / preskočite OW net naslov
const uchar rdreg = 0x69; / / bere register
/ * blizu uchar IDX; / / števec zanke (4-bitni)
blizu uchar type; / / tip naprave (4-bitni)
blizu uchar char_; / / izpis byte / char
blizu uint vin, / / v milivoltih * /
blizu uint tmpCJ; / / naprava temp v C
blizu uint tCuV; / / temperaturni milivoltih
blizu uint znak; / / TC znak bit
blizu uint cjComp; / / temp nadomestilo
blizu uint tempC; / / v temp Celzija
blizu uint tblLo, tblHi, eePntr; / / table napotke
blizu uint testVal; / / test vrednosti iz tabele
blizu uchar napak; / / 1 = izven območja (1-bit)
/ / v bližini uchar store8; / / 8-bit buffer
/**********************************************
Subroutines
***********************************************/
/ * Inisialisasi UART @ 9600 bps, 8-N-1 * /
void init232 (void)
(
TMOD = (TMOD & 0x0F) | 0x20; / / Timer 1 način 2 (Auto reload)
SCON = 0x52; / / Serial Mode 1 (8-bit UART), REN = 1 (Receiver Vklopi)
/ / TI = 1 (Transmit buffer prazno)
PCON = PCON &0x7F; / / SMOD = 0 (Double baud rate onemogoči)
TH1 = 0xFD; / / 9600 bps (11.059 MHz)
ET1 = 0; / / Onemogoči Timer 1 prekinitev
TR1 = 1; / / Timer 1 Run
)
/ * Bere sedanji register pridobiti TC napetost
- Vsako primarno bit = 15,625 uV
- TCuV v microvolts * /
void Read_TC_Volts (void) (
uchar BUF;
uint buf16;
ow_reset (); / / berejo sedanji register
ow_writebyte (skipnet);
ow_writebyte (rdreg);
ow_writebyte (0x0e);
tCuV = ow_readbyte ();
BUF = ow_readbyte ();
ow_reset ();
tCuV <<= 8;
tCuV = BUF;
znak = tCuV>> 15; / / shranite znak bit
tCuV>> = 3; / / pravilen polozaj
if (znak == 1) (
tCuV | = 0xf000; / / pad 2's-kompliment bits
tCuV = ~ tCuV; / / tCuV =-tCuV
tCuV = 1;
)
/ * TCuV *= 156; / / x 15,625 uV
tCuV / = 10; * /
/ * TCuV x 15,625 uV == (tCuV x 15) (tCuV x 0,625) * /
buf16 = tCuV * 15, / / tCuV x 15
tCuV *= 5; / / tCuV x 0,625 == (tCuV x 5) / 8
tCuV>> = 3;
tCuV = buf16;
)
/ * Bere hladni spoj (naprava) temperature
- Vsako primarno bit = 0,125 stopinj C
- Vrne tmpCJ v celoti stopinj C * /
void Read_CJ_Temp (void) (
uchar BUF;
ow_reset ();
ow_writebyte (skipnet);
ow_writebyte (rdreg);
ow_writebyte (0x18);
tmpCJ = ow_readbyte ();
BUF = ow_readbyte ();
ow_reset ();
tmpCJ <<= 8;
tmpCJ = BUF;
if (tmpCJ> = 0x8000) (/ / preveri podpis
tmpCJ = 0; / / Zavreči negativno
) else (
tmpCJ>> = 8; / />> 5 x 0,125 (> 3)
)
)
/ * Search trenutno izbrani TC tabela za najbližje vstop
- Spremenjene binarne uporablja algoritem za iskanje cjComp
- Visoka konec iskanja je pred pristajajo (tblHi)
- Uspešno iskanje nizov tempC * /
void TC_Lookup (void) (
tblLo = 0; / / nizko vnos tabele
tempC = 22; / / default na sobno temp
testVal = Cnv_table [tblHi], / / preveri, max temp
if (cjComp> testVal) (
error = 1; / / izven območja
) else (
while (1) (
eePntr = (tblLo tblHi) / 2; / / razpolovišča iskanja span
testVal = Cnv_table [eePntr], / / branje vrednosti iz razpolovišča
if (cjComp == testVal) (
goto exitTC; / / našel!
) else (
if (cjComp <testVal) (tblHi = eePntr
/ / search spodnji polovici
else (tblLo = eePntr
/ / search zgornja polovica
)
if ((tblHi-tblLo) <2) (/ / span pri minimalni
eePntr = tblLo;
goto exitTC;
)
)
exitTC:
tempC = eePntr;
)
)/*******************************************
GLAVNI: Start here!
********************************************/
void main (void) (
uchar i;
uchar ID [8];
/ * Inisialisasi UART * /
init232 ();
/ * Check_Device * /
if (! ow_reset ()) (/ / zaslužiti serijska številka
printf ( "No Prisotnost! \ n");
goto exitMain;
)
ow_writebyte (readnet);
for (i = 0; i <8; i ) (
ID = ow_readbyte ();
)
ow_reset ();
printf ( "ID =");
for (i = 0; i <8; i ) (
printf ( "% X", ID );
)
printf ( "\ n");
if (ID [0]! = 0x30) (/ / če ne 0x30, narobe naprava
printf ( "Napačen 1-Wire naprava! \ n");
goto exitMain;
)
/ * Ukrep Temperatura * /
while (1) (
error = 0;
Read_TC_Volts (); / / bere Seebeck napetost
Read_CJ_Temp (); / / bere hladno stičišča temp
cjComp = Cnv_table [tmpCJ], / / dobil odškodnino napetost
/ * Združujejo cjComp in tCuV * /
if (znak == 1) (
/ * TC pod hladno stičišča * /
if (tCuV <cjComp) (
cjComp-= tCuV;
) else (
cjComp = 0; / / mejo na 0 C
)
) else (
/ * TC nad hladno stičišča * /
cjComp = tCuV;
)
tblHi = 400; / / set visokega cenovnega razreda iskanja
TC_Lookup (); / / reverse lookup tabele
if (napaka == 0) (
/ * Izpis tempC * /
printf ( "% u Temp = C \ n", tempC);
) else (
/ * Out of Range * /
printf ( "Out of range! \ n");
goto exitMain;
)
ow_waitms (1000);
)
exitMain:
while (1) ();
)
/ * END * /
Lahko pomagaš?
Želim LCD zaslon z 2 x 16
prosim pomoč mi
/***************************
DS2760 Interfacing
****************************/
# include <stdio.h> / / printf (), uchar, uint, ....
# include <reg51.h> / / interals procesorja
# include "1wire.h" / / 1-wire napravo lib
/************************
Port Izjava
*************************/
/ / DS2760 pristanišče izjavo 1wire.c
/************************************************* ******************
T-tip (Copper / Constantan) temperaturni podatki (0C reference)
Avtor: zbral Parallax
Updated: 19 JAN 2004
************************************************** ******************/
const uint Cnv_table [401] =
(
/ * T000 * / 0, 39, 78, 117, 156, 195, 234, 273, 312, 352,
/ * T010 * / 391, 431, 470, 510, 549, 589, 629, 669, 709, 749,
/ * T020 * / 790, 830, 870, 911, 951, 992, 1032, 1074, 1114, 1155,
/ * T030 * / 1196, 1238, 1279, 1320, 1362, 1403, 1445, 1486, 1528, 1570,
/ * T040 * / 1612, 1654, 1696, 1738, 1780, 1822, 1865, 1908, 1950, 1993,
/ * T050 * / 2036, 2079, 2121, 2165, 2208, 2250, 2294, 2338, 2381, 2425,
/ * T060 * / 2468, 2512, 2556, 2600, 2643, 2687, 2732, 2776, 2819, 2863,
/ * T070 * / 2909, 2952, 2998, 3043, 3087, 3132, 3177, 3222, 3266, 3312,
/ * T080 * / 3358, 3403, 3447, 3494, 3539, 3584, 3631, 3677, 3722, 3768,
/ * T090 * / 3814, 3859, 3907, 3953, 3999, 4046, 4092, 4137, 4185, 4232,
/ * T100 * / 4278, 4325, 4371, 4419, 4466, 4512, 4561, 4608, 4655, 4701,
/ * T110 * / 4750, 4798, 4844, 4892, 4940, 4988, 5036, 5084, 5131, 5179,
/ * T120 * / 5227, 5277, 5325, 5373, 5421, 5469, 5519, 5567, 5616, 5665,
/ * T130 * / 5714, 5762, 5812, 5860, 5910, 5959, 6008, 6057, 6107, 6155,
/ * T140 * / 6206, 6254, 6304, 6355, 6403, 6453, 6504, 6554, 6604, 6653,
/ * T150 * / 6703, 6754, 6804, 6855, 6905, 6956, 7006, 7057, 7107, 7158,
/ * T160 * / 7209, 7259, 7310, 7360, 7411, 7463, 7515, 7565, 7617, 7668,
/ * T170 * / 7719, 7770, 7823, 7874, 7926, 7977, 8028, 8080, 8133, 8185,
/ * T180 * / 8237, 8288, 8340, 8393, 8445, 8496, 8550, 8602, 8653, 8707,
/ * T190 * / 8759, 8811, 8865, 8916, 8970, 9022, 9076, 9128, 9182, 9234,
/ * T200 * / 9288, 9341, 9394, 9448, 9500, 9554, 9608, 9662, 9714, 9769,
/ * T210 * / 9822, 9875, 9929, 9984, 10.038, 10.092, 10.146, 10.200, 10.253, 10.307,
/ * T220 * / 10.362, 10.416, 10.471, 10.525, 10.580, 10.634, 10.689, 10.743, 10.798, 10.852,
/ * T230 * / 10.907, 10.961, 11.016, 11.072, 11.127, 11.182, 11.237, 11.291, 11.346, 11.403,
/ * T240 * / 11.458, 11.512, 11.569, 11.624, 11.679, 11.734, 11.791, 11.846, 11.902, 11.958,
/ * T250 * / 12.012, 12.069, 12.125, 12.181, 12.237, 12.293, 12.349, 12.405, 12.461, 12.518,
/ * T260 * / 12.573, 12.630, 12.686, 12.743, 12.798, 12.855, 12.912, 12.968, 13.025, 13.082,
/ * T270 * / 13.139, 13.195, 13.253, 13.310, 13.365, 13.423, 13.480, 13.537, 13.595, 13.652,
/ * T280 * / 13.708, 13.766, 13.823, 13.881, 13.938, 13.995, 14.053, 14.109, 14.168, 14.226,
/ * T290 * / 14.282, 14.341, 14.399, 14.455, 14.514, 14.572, 14.630, 14.688, 14.746, 14.804,
/ * T300 * / 14.862, 14.919, 14.977, 15.035, 15.095, 15.153, 15.211, 15.269, 15.328, 15.386,
/ * T310 * / 15.445, 15.503, 15.562, 15.621, 15.679, 15.737, 15.797, 15.855, 15.913, 15.973,
/ * T320 * / 16.032, 16.091, 16.149, 16.208, 16.268, 16.327, 16.387, 16.446, 16.504, 16.564,
/ * T330 * / 16.623, 16.682, 16.742, 16.801, 16.861, 16.920, 16.980, 17.039, 17.100, 17.158,
/ * T340 * / 17.219, 17.278, 17.338, 17.399, 17.458, 17.518, 17.577, 17.638, 17.698, 17.759,
/ * T350 * / 17.818, 17.879, 17.939, 17.998, 18.059, 18.120, 18.179, 18.240, 18.301, 18.362,
/ * T360 * / 18.422, 18.483, 18.542, 18.603, 18.664, 18.725, 18.786, 18.847, 18.908, 18.969,
/ * T370 * / 19.030, 19.091, 19.152, 19.213, 19.274, 19.335, 19.396, 19.457, 19.518, 19.579,
/ * T380 * / 19.641, 19.702, 19.763, 19.824, 19.885, 19.946, 20.009, 20.070, 20.132, 20.193,
/ * T390 * / 20.255, 20.317, 20.378, 20.440, 20.501, 20.563, 20.625, 20.687, 20.748, 20.810,
/ * T400 * / 20872
);
/*************************************************
Konstante & Globalna spremenljivka
************************************************** /
const uchar readnet = 0x33; / / bere OW net naslov
const uchar skipnet = 0xcc; / / preskočite OW net naslov
const uchar rdreg = 0x69; / / bere register
/ * blizu uchar IDX; / / števec zanke (4-bitni)
blizu uchar type; / / tip naprave (4-bitni)
blizu uchar char_; / / izpis byte / char
blizu uint vin, / / v milivoltih * /
blizu uint tmpCJ; / / naprava temp v C
blizu uint tCuV; / / temperaturni milivoltih
blizu uint znak; / / TC znak bit
blizu uint cjComp; / / temp nadomestilo
blizu uint tempC; / / v temp Celzija
blizu uint tblLo, tblHi, eePntr; / / table napotke
blizu uint testVal; / / test vrednosti iz tabele
blizu uchar napak; / / 1 = izven območja (1-bit)
/ / v bližini uchar store8; / / 8-bit buffer
/**********************************************
Subroutines
***********************************************/
/ * Inisialisasi UART @ 9600 bps, 8-N-1 * /
void init232 (void)
(
TMOD = (TMOD & 0x0F) | 0x20; / / Timer 1 način 2 (Auto reload)
SCON = 0x52; / / Serial Mode 1 (8-bit UART), REN = 1 (Receiver Vklopi)
/ / TI = 1 (Transmit buffer prazno)
PCON = PCON &0x7F; / / SMOD = 0 (Double baud rate onemogoči)
TH1 = 0xFD; / / 9600 bps (11.059 MHz)
ET1 = 0; / / Onemogoči Timer 1 prekinitev
TR1 = 1; / / Timer 1 Run
)
/ * Bere sedanji register pridobiti TC napetost
- Vsako primarno bit = 15,625 uV
- TCuV v microvolts * /
void Read_TC_Volts (void) (
uchar BUF;
uint buf16;
ow_reset (); / / berejo sedanji register
ow_writebyte (skipnet);
ow_writebyte (rdreg);
ow_writebyte (0x0e);
tCuV = ow_readbyte ();
BUF = ow_readbyte ();
ow_reset ();
tCuV <<= 8;
tCuV = BUF;
znak = tCuV>> 15; / / shranite znak bit
tCuV>> = 3; / / pravilen polozaj
if (znak == 1) (
tCuV | = 0xf000; / / pad 2's-kompliment bits
tCuV = ~ tCuV; / / tCuV =-tCuV
tCuV = 1;
)
/ * TCuV *= 156; / / x 15,625 uV
tCuV / = 10; * /
/ * TCuV x 15,625 uV == (tCuV x 15) (tCuV x 0,625) * /
buf16 = tCuV * 15, / / tCuV x 15
tCuV *= 5; / / tCuV x 0,625 == (tCuV x 5) / 8
tCuV>> = 3;
tCuV = buf16;
)
/ * Bere hladni spoj (naprava) temperature
- Vsako primarno bit = 0,125 stopinj C
- Vrne tmpCJ v celoti stopinj C * /
void Read_CJ_Temp (void) (
uchar BUF;
ow_reset ();
ow_writebyte (skipnet);
ow_writebyte (rdreg);
ow_writebyte (0x18);
tmpCJ = ow_readbyte ();
BUF = ow_readbyte ();
ow_reset ();
tmpCJ <<= 8;
tmpCJ = BUF;
if (tmpCJ> = 0x8000) (/ / preveri podpis
tmpCJ = 0; / / Zavreči negativno
) else (
tmpCJ>> = 8; / />> 5 x 0,125 (> 3)
)
)
/ * Search trenutno izbrani TC tabela za najbližje vstop
- Spremenjene binarne uporablja algoritem za iskanje cjComp
- Visoka konec iskanja je pred pristajajo (tblHi)
- Uspešno iskanje nizov tempC * /
void TC_Lookup (void) (
tblLo = 0; / / nizko vnos tabele
tempC = 22; / / default na sobno temp
testVal = Cnv_table [tblHi], / / preveri, max temp
if (cjComp> testVal) (
error = 1; / / izven območja
) else (
while (1) (
eePntr = (tblLo tblHi) / 2; / / razpolovišča iskanja span
testVal = Cnv_table [eePntr], / / branje vrednosti iz razpolovišča
if (cjComp == testVal) (
goto exitTC; / / našel!
) else (
if (cjComp <testVal) (tblHi = eePntr
else (tblLo = eePntr
)
if ((tblHi-tblLo) <2) (/ / span pri minimalni
eePntr = tblLo;
goto exitTC;
)
)
exitTC:
tempC = eePntr;
)
)/*******************************************
GLAVNI: Start here!
********************************************/
void main (void) (
uchar i;
uchar ID [8];
/ * Inisialisasi UART * /
init232 ();
/ * Check_Device * /
if (! ow_reset ()) (/ / zaslužiti serijska številka
printf ( "No Prisotnost! \ n");
goto exitMain;
)
ow_writebyte (readnet);
for (i = 0; i <8; i ) (
ID = ow_readbyte ();
)
ow_reset ();
printf ( "ID =");
for (i = 0; i <8; i ) (
printf ( "% X", ID );
)
printf ( "\ n");
if (ID [0]! = 0x30) (/ / če ne 0x30, narobe naprava
printf ( "Napačen 1-Wire naprava! \ n");
goto exitMain;
)
/ * Ukrep Temperatura * /
while (1) (
error = 0;
Read_TC_Volts (); / / bere Seebeck napetost
Read_CJ_Temp (); / / bere hladno stičišča temp
cjComp = Cnv_table [tmpCJ], / / dobil odškodnino napetost
/ * Združujejo cjComp in tCuV * /
if (znak == 1) (
/ * TC pod hladno stičišča * /
if (tCuV <cjComp) (
cjComp-= tCuV;
) else (
cjComp = 0; / / mejo na 0 C
)
) else (
/ * TC nad hladno stičišča * /
cjComp = tCuV;
)
tblHi = 400; / / set visokega cenovnega razreda iskanja
TC_Lookup (); / / reverse lookup tabele
if (napaka == 0) (
/ * Izpis tempC * /
printf ( "% u Temp = C \ n", tempC);
) else (
/ * Out of Range * /
printf ( "Out of range! \ n");
goto exitMain;
)
ow_waitms (1000);
)
exitMain:
while (1) ();
)
/ * END * /