G
Guest
Guest
Hej, et par dage til at blive træt af DS18B20, pakket den på en plade test, alle gode forbindelser, ikke bare parasitære af den normale strømforsyning.Dette svarer til reset nu og da for ingenting.
Jeg tog et kort kursus i at håndtere kortene og
http://tnij.org/ds18b20
Very nice pdf.
Programmet er skrevet på grundlag af denne pdf.Da der kun er én 's ikke noget jeg ikke har adresse.Programmet ser således ud:
De funktioner af trykte og fejl kun at vise tal, jeg har det hele til afprøvning på en test plade og to dioder, så jeg var nødt til at en eller anden måde at løse output
Code:
# Inkluder <avr/io.h>
# Inkluder <avr/delay.h>
# Inkluder <avr/signal.h>
# Inkluder <stdlib.h>
# Inkluder <lcd.h>
# Definer f_CPU 8000000# Definer RED _BV (7)
GREEN # define _BV (5)
# Definer i 4
# Definer DEL_TIME 500# Definer EF 6
# Definer PORT_1Wire PINB
# Definer sæt DDRB & = ~ _BV (EF)
# Definer klare DDRB | = _BV (EF)char buf [8];//************************************************ *************************************
void print (int x);
wyswietl_temp void (void);
void send (char bit);
unsigned char read (void);
send_byte void (char værdi);
unsigned char read_byte (void);
void fejl (int i);
//************************************************ *************************************int main (void)
(
DDRD = 255 / / output
DDRC = 0, / / input
PORTC | = _BV (IN) / / pullupwhile (1)
(
if (bit_is_clear (PINCs, IN)) / / Pressede
(
_delay_ms (500);
wyswietl_temp ();
)
andet
(
PORTD & = ~ RED;
PORTD | = GREEN;
)
)
)//************************************************ *************************************
void print (int x)
(
int i;if (x> 100)
(
/ / For nu er der ikke en sådan mulighed
)
else if (x> 10)
(
int tiere = x / 10;
int dem = x% 10;
x = 10% x, / / Enhedslistenfor (i = 0; i <dem; i )
(
PORTD | = RED;
_delay_ms (DEL_TIME);
PORTD & = ~ RED;
_delay_ms (DEL_TIME);
)_delay_ms (1000);
/ / Brejk
for (i = 0; i <5; i )
(
PORTD | = RED;
PORTD & = ~ GREEN;
_delay_ms (50);
PORTD & = ~ RED;
PORTD | = GREEN;
_delay_ms (50);
)
_delay_ms (1000);for (i = 0; i <tiere i )
(
PORTD | = RED;
_delay_ms (DEL_TIME);
PORTD & = ~ RED;
_delay_ms (DEL_TIME);
)
_delay_ms (1000);/ / Brejk
for (i = 0; i <5; i )
(
PORTD | = RED;
PORTD & = ~ GREEN;
_delay_ms (50);
PORTD & = ~ RED;
PORTD | = GREEN;
_delay_ms (50);
)
_delay_ms (1000);
)
else / / (0 0,10)
(
for (i = 0; og <x, i )
(
PORTD | = RED;
_delay_ms (DEL_TIME);
PORTD & = ~ RED;
_delay_ms (DEL_TIME);
)
_delay_ms (1000);/ / Brejk:
for (i = 0; i <5; i )
(
PORTD | = RED;
PORTD & = ~ GREEN;
_delay_ms (50);
PORTD & = ~ RED;
PORTD | = GREEN;
_delay_ms (50);
)
_delay_ms (1000);
)
)
//************************************************ *************************************
unsigned char RESET_PULSE (void)
(
unsigned char tilstedeværelse;
klar;
_delay_us (500);
sæt;
_delay_us (30);
if (bit_is_clear (PORT_1Wire, EF)) (TILSTEDEVÆRELSE = 1
har ellers (tilstedeværelse = 0
_delay_us (470);
if (bit_is_set (PORT_1Wire, EF)) (TILSTEDEVÆRELSE = 1
andet (TILSTEDEVÆRELSE = 0
tilbagevenden tilstedeværelse;
)
//************************************************ *************************************
void send (char bit)
(
klar;
_delay_us (5);
if (bit == 1)
sæt;
_delay_us (80);
sæt;
)
//************************************************ *************************************
unsigned char read (void)
(
TILSTEDEVÆRELSE usignerede char = 0;
klar;
_delay_us (2);
sæt;
_delay_us (15);
if (bit_is_set (PORT_1Wire, EF)) TILSTEDEVÆRELSE = 1;
TILSTEDEVÆRELSE ellers = 0;
afkast (tilstedeværelse)
)
//************************************************ *************************************
send_byte void (char værdi)
(
unsigned char i;
unsigned char pom;for (i = 0; i <8; i )
(
pom = værdi>> i;
pom & = 0x01;
send (pom);
)
_delay_us (100);
)
//************************************************ *************************************
unsigned char read_byte (void)
(
unsigned char i;
unsigned char værdi = 0;for (i = 0; i <8; i )
(
if (læs ()) værdi | = 0x01 <<1;
_delay_us (15);
)
afkast (værdi);
)
//************************************************ *************************************
wyswietl_temp void (void)
(
int i;
unsigned char check;
char temp1 = 0, temp2 = 0;
_delay_ms (200);
RESET_PULSE = check ();
if (check == 1)
(
send_byte (0xCC);
send_byte (0x44);
_delay_ms (750);
RESET_PULSE = check ();
send_byte (0xCC);
send_byte (0xBE);read_byte temp1 = ();
read_byte temp2 = ();int t = (temp1 (temp2 * 256)) / 16;print (t);
)
andet
(
/ / Error
fejl (1);
)
)
//************************************************ *************************************
void fejl (int i)
(
for (int a = 0 og <i, en )
(
_delay_ms (500);
PORTD | = RED;
PORTD & = ~ GREEN;
_delay_ms (500);
PORTD & = ~ RED;
PORTD | = GREEN;
)
)
//************************************************ *************************************//************************************************ *************************************
Jeg tog et kort kursus i at håndtere kortene og
http://tnij.org/ds18b20
Very nice pdf.
Programmet er skrevet på grundlag af denne pdf.Da der kun er én 's ikke noget jeg ikke har adresse.Programmet ser således ud:
De funktioner af trykte og fejl kun at vise tal, jeg har det hele til afprøvning på en test plade og to dioder, så jeg var nødt til at en eller anden måde at løse output
Code:
# Inkluder <avr/io.h>
# Inkluder <avr/delay.h>
# Inkluder <avr/signal.h>
# Inkluder <stdlib.h>
# Inkluder <lcd.h>
# Definer f_CPU 8000000# Definer RED _BV (7)
GREEN # define _BV (5)
# Definer i 4
# Definer DEL_TIME 500# Definer EF 6
# Definer PORT_1Wire PINB
# Definer sæt DDRB & = ~ _BV (EF)
# Definer klare DDRB | = _BV (EF)char buf [8];//************************************************ *************************************
void print (int x);
wyswietl_temp void (void);
void send (char bit);
unsigned char read (void);
send_byte void (char værdi);
unsigned char read_byte (void);
void fejl (int i);
//************************************************ *************************************int main (void)
(
DDRD = 255 / / output
DDRC = 0, / / input
PORTC | = _BV (IN) / / pullupwhile (1)
(
if (bit_is_clear (PINCs, IN)) / / Pressede
(
_delay_ms (500);
wyswietl_temp ();
)
andet
(
PORTD & = ~ RED;
PORTD | = GREEN;
)
)
)//************************************************ *************************************
void print (int x)
(
int i;if (x> 100)
(
/ / For nu er der ikke en sådan mulighed
)
else if (x> 10)
(
int tiere = x / 10;
int dem = x% 10;
x = 10% x, / / Enhedslistenfor (i = 0; i <dem; i )
(
PORTD | = RED;
_delay_ms (DEL_TIME);
PORTD & = ~ RED;
_delay_ms (DEL_TIME);
)_delay_ms (1000);
/ / Brejk
for (i = 0; i <5; i )
(
PORTD | = RED;
PORTD & = ~ GREEN;
_delay_ms (50);
PORTD & = ~ RED;
PORTD | = GREEN;
_delay_ms (50);
)
_delay_ms (1000);for (i = 0; i <tiere i )
(
PORTD | = RED;
_delay_ms (DEL_TIME);
PORTD & = ~ RED;
_delay_ms (DEL_TIME);
)
_delay_ms (1000);/ / Brejk
for (i = 0; i <5; i )
(
PORTD | = RED;
PORTD & = ~ GREEN;
_delay_ms (50);
PORTD & = ~ RED;
PORTD | = GREEN;
_delay_ms (50);
)
_delay_ms (1000);
)
else / / (0 0,10)
(
for (i = 0; og <x, i )
(
PORTD | = RED;
_delay_ms (DEL_TIME);
PORTD & = ~ RED;
_delay_ms (DEL_TIME);
)
_delay_ms (1000);/ / Brejk:
for (i = 0; i <5; i )
(
PORTD | = RED;
PORTD & = ~ GREEN;
_delay_ms (50);
PORTD & = ~ RED;
PORTD | = GREEN;
_delay_ms (50);
)
_delay_ms (1000);
)
)
//************************************************ *************************************
unsigned char RESET_PULSE (void)
(
unsigned char tilstedeværelse;
klar;
_delay_us (500);
sæt;
_delay_us (30);
if (bit_is_clear (PORT_1Wire, EF)) (TILSTEDEVÆRELSE = 1
_delay_us (470);
if (bit_is_set (PORT_1Wire, EF)) (TILSTEDEVÆRELSE = 1
andet (TILSTEDEVÆRELSE = 0
tilbagevenden tilstedeværelse;
)
//************************************************ *************************************
void send (char bit)
(
klar;
_delay_us (5);
if (bit == 1)
sæt;
_delay_us (80);
sæt;
)
//************************************************ *************************************
unsigned char read (void)
(
TILSTEDEVÆRELSE usignerede char = 0;
klar;
_delay_us (2);
sæt;
_delay_us (15);
if (bit_is_set (PORT_1Wire, EF)) TILSTEDEVÆRELSE = 1;
TILSTEDEVÆRELSE ellers = 0;
afkast (tilstedeværelse)
)
//************************************************ *************************************
send_byte void (char værdi)
(
unsigned char i;
unsigned char pom;for (i = 0; i <8; i )
(
pom = værdi>> i;
pom & = 0x01;
send (pom);
)
_delay_us (100);
)
//************************************************ *************************************
unsigned char read_byte (void)
(
unsigned char i;
unsigned char værdi = 0;for (i = 0; i <8; i )
(
if (læs ()) værdi | = 0x01 <<1;
_delay_us (15);
)
afkast (værdi);
)
//************************************************ *************************************
wyswietl_temp void (void)
(
int i;
unsigned char check;
char temp1 = 0, temp2 = 0;
_delay_ms (200);
RESET_PULSE = check ();
if (check == 1)
(
send_byte (0xCC);
send_byte (0x44);
_delay_ms (750);
RESET_PULSE = check ();
send_byte (0xCC);
send_byte (0xBE);read_byte temp1 = ();
read_byte temp2 = ();int t = (temp1 (temp2 * 256)) / 16;print (t);
)
andet
(
/ / Error
fejl (1);
)
)
//************************************************ *************************************
void fejl (int i)
(
for (int a = 0 og <i, en )
(
_delay_ms (500);
PORTD | = RED;
PORTD & = ~ GREEN;
_delay_ms (500);
PORTD & = ~ RED;
PORTD | = GREEN;
)
)
//************************************************ *************************************//************************************************ *************************************