M
m3
Guest
Hej, jeg fandt følgende kode i nettet og sluttede den til dit projekt. Desværre virker ikke. Hele tiden de oplysninger kommer til det skærmbillede, der læste mislykkedes.
I koden er der ingen initialisering funktion LCD display et tegn, for ikke at skabe uklarhed om analysen.
Jeg bruger en intern kvarts, dvs 1 MHz. DS18B20 leverancer på normal vis (uden parasitære magt).
Hvad der kunne være galt? Jeg ved, at det var rullet på elektroden, men fandt ikke udviklingen. mit problem (der er en lignende sag, men det hjælper ikke mig: <a href="http://www.elektroda.pl/rtvforum/viewtopic.php?t=1209476&highlight=ds18b20&sid=" target="_blank">http://www.elektroda.pl/rtvforum/viewtopic.php?t=1209476&highlight=ds18b20&sid =</a> )
<table width="90%" cellspacing="1" cellpadding="3" border="0" align="center"><tr><td> <b>Kode:</b> </td></tr><tr><td class="code"> # Include "config.h"
# Medtag stdlib.h
# Definer EF 2
# Definer PORTB PORT_1WIRE
# Definer SET_1WIRE DDRB & = ~ _BV (EF)
# Definer CLEAR_1WIRE DDRB | = _BV (EF)
char buf [8];
usignerede char RESET_PULSE (void);
usignerede char read_byte (void);
send_byte void (char værdi);
void send (char bit);
usignerede char read (void);
int main (void) {
usignerede CHAR kontrol;
char temp1 = 0, temp2 = 0;
forsinkelse (100);
PORTB & = ~ _BV (2);
forsinkelse (250);
initLCD ();
mens (1)
{
check = RESET_PULSE ();
if (check == 1)
{
/ /
RESET_PULSE ();
send_byte (0xCC);
send_byte (0x44);
forsinkelse (750);
check = RESET_PULSE ();
send_byte (0xCC);
send_byte (0xBE);
temp1 = read_byte () / / læse LSB
temp2 = read_byte () / / læse MSB
check = RESET_PULSE ();
float temp = 0;
temp = (float) (temp1 (temp2 * 256)) / 16;
dtostrf (temp, 1, 1, BUF) / / konvertere float til string
gotox (0x00);
writestr ("Vi gjorde det!");
gotox (0x40);
writestr (BUF);
forsinkelse (250);
}
andet
if (check == 0)
{
gotox (0x00);
writestr ("kalk somheden");
}
};
return 0;
}
usignerede char RESET_PULSE ()
{
usignerede char NÆRVÆR = 0;
CLEAR_1WIRE;
_delay_us (500);
SET_1WIRE;
_delay_us (60);
if (bit_is_clear (PORT_1WIRE, EF))
{
NÆRVÆR = 0;
}
andet
{
NÆRVÆR = 1;
}
forsinkelse (470);
if (bit_is_set (PORT_1WIRE, EF))
{
NÆRVÆR = 1;
}
andet
{
NÆRVÆR = 0;
}
NÆRVÆR vende tilbage;
}
usignerede char read_byte (void)
{
usignerede CHAR i;
usignerede char værdi = 0;
for (i = 0; i <8; i )
{
if (læs ()) værdi | = 0x01 <<i;
_delay_us (15);
};
returværdi;
}
void send (char bit)
{
CLEAR_1WIRE;
_delay_us (5);
if (bit == 1)
SET_1WIRE;
_delay_us (80);
SET_1WIRE;
}
usignerede char read (void)
{
usignerede char NÆRVÆR = 0;
CLEAR_1WIRE;
_delay_us (5);
SET_1WIRE;
_delay_us (15);
if (bit_is_set (PORT_1WIRE, EF)) tilstedevaerelsen = 1; ellers NÆRVÆR = 0;
afkast (tilstedeværelse)
}
send_byte void (char værdi)
{
usignerede CHAR i;
usignerede CHAR POM;
for (i = 0; i <8; i )
{
pom = værdi>> i;
Måling & = 0x01;
send (POM);
}
_delay_us (100);
}
</td></tr></table>
I koden er der ingen initialisering funktion LCD display et tegn, for ikke at skabe uklarhed om analysen.
Jeg bruger en intern kvarts, dvs 1 MHz. DS18B20 leverancer på normal vis (uden parasitære magt).
Hvad der kunne være galt? Jeg ved, at det var rullet på elektroden, men fandt ikke udviklingen. mit problem (der er en lignende sag, men det hjælper ikke mig: <a href="http://www.elektroda.pl/rtvforum/viewtopic.php?t=1209476&highlight=ds18b20&sid=" target="_blank">http://www.elektroda.pl/rtvforum/viewtopic.php?t=1209476&highlight=ds18b20&sid =</a> )
<table width="90%" cellspacing="1" cellpadding="3" border="0" align="center"><tr><td> <b>Kode:</b> </td></tr><tr><td class="code"> # Include "config.h"
# Medtag stdlib.h
# Definer EF 2
# Definer PORTB PORT_1WIRE
# Definer SET_1WIRE DDRB & = ~ _BV (EF)
# Definer CLEAR_1WIRE DDRB | = _BV (EF)
char buf [8];
usignerede char RESET_PULSE (void);
usignerede char read_byte (void);
send_byte void (char værdi);
void send (char bit);
usignerede char read (void);
int main (void) {
usignerede CHAR kontrol;
char temp1 = 0, temp2 = 0;
forsinkelse (100);
PORTB & = ~ _BV (2);
forsinkelse (250);
initLCD ();
mens (1)
{
check = RESET_PULSE ();
if (check == 1)
{
/ /
RESET_PULSE ();
send_byte (0xCC);
send_byte (0x44);
forsinkelse (750);
check = RESET_PULSE ();
send_byte (0xCC);
send_byte (0xBE);
temp1 = read_byte () / / læse LSB
temp2 = read_byte () / / læse MSB
check = RESET_PULSE ();
float temp = 0;
temp = (float) (temp1 (temp2 * 256)) / 16;
dtostrf (temp, 1, 1, BUF) / / konvertere float til string
gotox (0x00);
writestr ("Vi gjorde det!");
gotox (0x40);
writestr (BUF);
forsinkelse (250);
}
andet
if (check == 0)
{
gotox (0x00);
writestr ("kalk somheden");
}
};
return 0;
}
usignerede char RESET_PULSE ()
{
usignerede char NÆRVÆR = 0;
CLEAR_1WIRE;
_delay_us (500);
SET_1WIRE;
_delay_us (60);
if (bit_is_clear (PORT_1WIRE, EF))
{
NÆRVÆR = 0;
}
andet
{
NÆRVÆR = 1;
}
forsinkelse (470);
if (bit_is_set (PORT_1WIRE, EF))
{
NÆRVÆR = 1;
}
andet
{
NÆRVÆR = 0;
}
NÆRVÆR vende tilbage;
}
usignerede char read_byte (void)
{
usignerede CHAR i;
usignerede char værdi = 0;
for (i = 0; i <8; i )
{
if (læs ()) værdi | = 0x01 <<i;
_delay_us (15);
};
returværdi;
}
void send (char bit)
{
CLEAR_1WIRE;
_delay_us (5);
if (bit == 1)
SET_1WIRE;
_delay_us (80);
SET_1WIRE;
}
usignerede char read (void)
{
usignerede char NÆRVÆR = 0;
CLEAR_1WIRE;
_delay_us (5);
SET_1WIRE;
_delay_us (15);
if (bit_is_set (PORT_1WIRE, EF)) tilstedevaerelsen = 1; ellers NÆRVÆR = 0;
afkast (tilstedeværelse)
}
send_byte void (char værdi)
{
usignerede CHAR i;
usignerede CHAR POM;
for (i = 0; i <8; i )
{
pom = værdi>> i;
Måling & = 0x01;
send (POM);
}
_delay_us (100);
}
</td></tr></table>