S
sinatra2010
Guest
Hi
Ik mesured met behulp van een LM335 temperatuur en weergegeven op mijn i 7segment 4 cijfers.
Nu moet ik ook mijn ra0 digitale sensor DS18B20 sencond aangesloten, zocht ik het internet om bij te dragen Ik heb niet gevonden hoe je sensor gebruiken maar ik zie een functie Veel initds, readdir, writed, maar ik lees temp ' m niet begrijpen deze functie en ik vond dit DS1820 register A met 9bytes
0 Temperature_LSB
1 Temperature_MSB
2 High Temp Alarm / User Byte 1
3 Lage Temp Alarm / 2 Gebruiker Byte
4 voorbehouden
5 Gereserveerd
6 Count_Remain
7 Count_per_C
8 CRC
voor mijn project Ik wil alleen display units en de tiende, en ik gebruik MPLAB cc5x, kan iemand mij helpen om mijn code te schrijven en te begrijpen hoe dit werk ????? DS18B20Toegevoegd na 3 uur 7 minuten:Code:
/ / Bibliotheek drive management DALLAS
/ / Jean-Pierre Mandon# Define skiprom 0xCC
Zet 0x44 # define
# Define readt 0xBE
# Pragma beetje dataline@PORTC.0LineIn void (void)
(
TRISC = 0x81;
)LineOut void (void)
(
TRISC = 0x80;
)tempo480 void (void) / / vertraging van 480 microsiemens
(
voor (teller = 0; telling <120, tel )
(
NOP ();
NOP ();
NOP ();
)
)tempo65 void (void) / / Timer 65 microsiemens
(
voor (teller = 0; telling <19, tel ) / / 21
)char touchreset (void) / / reset-knop en test DALLAS aanwezigheid van een knop
(
datalijn = 0 / / zet de lijn op 0
tempo480 () / / voor 480 microsiemens
datalijn = 1, / / en doe daarna de lijn 1
tempo65 () / / voor 65 microsiemens
LineIn () / / voorbij de Input Line
if (datalijn == 0) / / als datalijn = 0, een knop is
(
tempo480 ();
datalijn = 1, / / cross de lijn 1
LineOut () / / cross de lijnuitgang
return 1; / / en return 1
)
else / / als er geen toets
(
tempo480 ();
datalijn = 1, / / cross de lijn 1
LineOut () / / cross de lijnuitgang
return 0; / / en return 0
)
)touchbyte void (char byte) / / een commando sturen om de knop DALLAS
(
float rotatie;
char tijdelijke
char waarde;voor (rotatie = 1; rotation <9; rotatie ) / / serialisatie van het commando
(
tijdelijke rotatie = -1;
byte-waarde =>> tijdelijke / / rechts rotatie
datalijn = 0 / / op 0 gezet voor de lijn
NOP2 () / / ten minste
NOP2 () / / 1 μseconde
if ((waarde & 1) == 1) datalijn = 1, / / test beetje
anders datalijn = 0, / / en de positionering van de lijn
tempo65 ();
datalijn = 1;
NOP2 ();
NOP2 ();
)
)char touchreceive (void) / / ontvangen van een byte vanaf de button DALLAS
(
float rotatie;
char byte;
char tijdelijke
byte = 0;
voor (rotatie = 1; rotation <9; rotatie )
(
datalijn = 0 / / op 0 gezet voor de lijn
NOP2 () / / ten minste
NOP2 () / / 1 μseconde
datalijn = 1;
LineIn () / / voorbij de Input Line
NOP2 ();
rotatie -;
tijdelijke = 1;
= tijdelijke tijdelijke "rotatie;
rotatie ;
if (datalijn == 1) byte = byte | tijdelijke
datalijn = 1;
LineOut ();
tempo65 ();
)
terug byte;
)char crc8 (void) / / controleer de geldigheid van de bytes die zijn ontvangen
(
char temp, index, tellen, n;
crc = 0;
voor (n = 1, n <8, n )
(
dallastemp index = [n];
voor (teller = 1; telling <9, tel )
(
# Asm
movf index, w
xorwf CRC, w
movwf temp
RRF temp, w
movf CRC, w
btfsc STATUS, Carry
xorlw 0x18
movwf temp
RRF temp, w
movwf CRC
movf index, w
movwf temp
BCF STATUS, Carry
RRF temp, f
btfsc STATUS, Carry
BSF temp, 7
movf temp, w
movwf index
# Endasm
)
)
if (CRC == dallastemp [8]) return CRC;
else return 0;
)het omzetten van void (void)
(
int16 j;if (touchreset () == 1) / / als een knop is
(
touchbyte (skiprom) / / pas de identificatie-zone
NOP2 ();
NOP2 ();
touchbyte (converteren) / / Start Conversion
voor (j = 1 j <200 j ) tempo480 ();
)
)char litcode (void) / / Lees geheugentoets
(
char i;
int16 j;
char wedstrijden, terug te keren;
if (touchreset () == 1) / / als een knop is
(
touchbyte (skiprom) / / pas de identificatie-zone
NOP2 ();
NOP2 ();
Lezen:
touchbyte (readt) / / dan gaan lezen
for (i = 1; i <10; i ) / / 2 bytes
(
touchreceive resultaat = () / / het geheugen onderdelen
dallastemp = resultaat; / / en sla ze op in de tabel Dallas [] Tijdelijke
)
resultaat = 0; / / als alle bytes
for (i = 1; i <10; i ) / / code zijn 0
wedstrijden = wedstrijden dallastemp / dan / de code is
if (crc8 ()! = 0)
(
for (i = 1; i <10; i )
(
dallastemp resultaat = ;
dallas = resultaat;
)
terug = 1;
)
anders
(
rendement = 0;
)
)
anders
rendement = 0;
terugkeren;
)
Ik mesured met behulp van een LM335 temperatuur en weergegeven op mijn i 7segment 4 cijfers.
Nu moet ik ook mijn ra0 digitale sensor DS18B20 sencond aangesloten, zocht ik het internet om bij te dragen Ik heb niet gevonden hoe je sensor gebruiken maar ik zie een functie Veel initds, readdir, writed, maar ik lees temp ' m niet begrijpen deze functie en ik vond dit DS1820 register A met 9bytes
0 Temperature_LSB
1 Temperature_MSB
2 High Temp Alarm / User Byte 1
3 Lage Temp Alarm / 2 Gebruiker Byte
4 voorbehouden
5 Gereserveerd
6 Count_Remain
7 Count_per_C
8 CRC
voor mijn project Ik wil alleen display units en de tiende, en ik gebruik MPLAB cc5x, kan iemand mij helpen om mijn code te schrijven en te begrijpen hoe dit werk ????? DS18B20Toegevoegd na 3 uur 7 minuten:Code:
/ / Bibliotheek drive management DALLAS
/ / Jean-Pierre Mandon# Define skiprom 0xCC
Zet 0x44 # define
# Define readt 0xBE
# Pragma beetje dataline@PORTC.0LineIn void (void)
(
TRISC = 0x81;
)LineOut void (void)
(
TRISC = 0x80;
)tempo480 void (void) / / vertraging van 480 microsiemens
(
voor (teller = 0; telling <120, tel )
(
NOP ();
NOP ();
NOP ();
)
)tempo65 void (void) / / Timer 65 microsiemens
(
voor (teller = 0; telling <19, tel ) / / 21
)char touchreset (void) / / reset-knop en test DALLAS aanwezigheid van een knop
(
datalijn = 0 / / zet de lijn op 0
tempo480 () / / voor 480 microsiemens
datalijn = 1, / / en doe daarna de lijn 1
tempo65 () / / voor 65 microsiemens
LineIn () / / voorbij de Input Line
if (datalijn == 0) / / als datalijn = 0, een knop is
(
tempo480 ();
datalijn = 1, / / cross de lijn 1
LineOut () / / cross de lijnuitgang
return 1; / / en return 1
)
else / / als er geen toets
(
tempo480 ();
datalijn = 1, / / cross de lijn 1
LineOut () / / cross de lijnuitgang
return 0; / / en return 0
)
)touchbyte void (char byte) / / een commando sturen om de knop DALLAS
(
float rotatie;
char tijdelijke
char waarde;voor (rotatie = 1; rotation <9; rotatie ) / / serialisatie van het commando
(
tijdelijke rotatie = -1;
byte-waarde =>> tijdelijke / / rechts rotatie
datalijn = 0 / / op 0 gezet voor de lijn
NOP2 () / / ten minste
NOP2 () / / 1 μseconde
if ((waarde & 1) == 1) datalijn = 1, / / test beetje
anders datalijn = 0, / / en de positionering van de lijn
tempo65 ();
datalijn = 1;
NOP2 ();
NOP2 ();
)
)char touchreceive (void) / / ontvangen van een byte vanaf de button DALLAS
(
float rotatie;
char byte;
char tijdelijke
byte = 0;
voor (rotatie = 1; rotation <9; rotatie )
(
datalijn = 0 / / op 0 gezet voor de lijn
NOP2 () / / ten minste
NOP2 () / / 1 μseconde
datalijn = 1;
LineIn () / / voorbij de Input Line
NOP2 ();
rotatie -;
tijdelijke = 1;
= tijdelijke tijdelijke "rotatie;
rotatie ;
if (datalijn == 1) byte = byte | tijdelijke
datalijn = 1;
LineOut ();
tempo65 ();
)
terug byte;
)char crc8 (void) / / controleer de geldigheid van de bytes die zijn ontvangen
(
char temp, index, tellen, n;
crc = 0;
voor (n = 1, n <8, n )
(
dallastemp index = [n];
voor (teller = 1; telling <9, tel )
(
# Asm
movf index, w
xorwf CRC, w
movwf temp
RRF temp, w
movf CRC, w
btfsc STATUS, Carry
xorlw 0x18
movwf temp
RRF temp, w
movwf CRC
movf index, w
movwf temp
BCF STATUS, Carry
RRF temp, f
btfsc STATUS, Carry
BSF temp, 7
movf temp, w
movwf index
# Endasm
)
)
if (CRC == dallastemp [8]) return CRC;
else return 0;
)het omzetten van void (void)
(
int16 j;if (touchreset () == 1) / / als een knop is
(
touchbyte (skiprom) / / pas de identificatie-zone
NOP2 ();
NOP2 ();
touchbyte (converteren) / / Start Conversion
voor (j = 1 j <200 j ) tempo480 ();
)
)char litcode (void) / / Lees geheugentoets
(
char i;
int16 j;
char wedstrijden, terug te keren;
if (touchreset () == 1) / / als een knop is
(
touchbyte (skiprom) / / pas de identificatie-zone
NOP2 ();
NOP2 ();
Lezen:
touchbyte (readt) / / dan gaan lezen
for (i = 1; i <10; i ) / / 2 bytes
(
touchreceive resultaat = () / / het geheugen onderdelen
dallastemp = resultaat; / / en sla ze op in de tabel Dallas [] Tijdelijke
)
resultaat = 0; / / als alle bytes
for (i = 1; i <10; i ) / / code zijn 0
wedstrijden = wedstrijden dallastemp / dan / de code is
if (crc8 ()! = 0)
(
for (i = 1; i <10; i )
(
dallastemp resultaat = ;
dallas = resultaat;
)
terug = 1;
)
anders
(
rendement = 0;
)
)
anders
rendement = 0;
terugkeren;
)