1Wire DS1820 Problem mit Scratchpad
Hi,
Ich hab ein Problem mit dem Scratchpad, es zeigt nur NULLER :(
-verwende nur 1nen 1Wire Sensor,
(keinen Touch)
-und hab jeweils einen seperaten Tx und Rx Pin
Kann mal jemand der sich aus kennt einen Blick (oder Zwei ;) )
auf s Programm werfen?
Code:
#include <16f870.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOLVP
//DS1820 Commandos
#define SKIP_ROM 0xCC /* 204*/
#define CONVERT_T 0x44 /*68*/
#define READ_SCRATCHPAD 0xBE /*190*/
#define Rx_DS18S20 PIN_C4 // Rx TempSensor
#define Tx_DS18S20 PIN_C5 // Tx TempSensor
char D_Presence;
char D_ShortCircuit;
enum BITSTELLE { Bit0=1,BIT1=2,BIT2=4,BIT3=8,BIT4=16,BIT5=32,BIT6=64,BIT7=128 };
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
int temp_1,temp_2;
long int null,eins;
int scratchpad[8];
void D_Reset(void)
{
set_tris_c(0x99);
output_low(Tx_DS18S20); // Pin des DS18S20 auf low setzen
delay_us(480);
output_high(Tx_DS18S20); // Pin des DS18S20 auf high setzen
delay_us(40);
D_Presence = input(Rx_DS18S20);
delay_us(350);
D_ShortCircuit = input(Rx_DS18S20);
delay_us(60);
}
void temp_init()
{
output_low(Tx_DS18S20); // Pin des DS18S20 auf low setzen
delay_us(480); // 480us warten
while (input(Rx_DS18S20)); // pruefen ob der 1-wire bus auf low gezogen wird,
delay_ms(5);
}
void temp_send(unsigned char code)
{ int n=0;
for(; n < 8; n++)
{ if(bit_test(code,n))
{
output_low(Tx_DS18S20); //sende 0
delay_us(2); //int write slot
output_high(Tx_DS18S20); //send 1
}
else
{
output_low(Tx_DS18S20); //sende 0
}
delay_us(65); //duration für 1 und fertig
output_high(Tx_DS18S20);
delay_us(2);
}
delay_us(100); //1 Millisekunde
}
unsigned char temp_read(void)
{ unsigned char in=0,j=0;
delay_us(400);
for(; j < 8; j++)
{
delay_us(1);
output_low(Tx_DS18S20); // init read
delay_us(3);
if (input(Rx_DS18S20)) bit_set(in,j);
delay_us(60);
}
return(in);
}
void main()
{ int i;
printf("Hallo\r\n");
D_Reset();
printf("Presence:%d ShortCircuit:%d\r\n",D_Presence,D_ShortCircuit);
while(1)
{ temp_init();
temp_send(SKIP_ROM);
temp_send(CONVERT_T);
delay_ms(500); //warten bis Temp Convert abgeschlossen ist...
temp_send(SKIP_ROM);
temp_send(READ_SCRATCHPAD);
for (i=0; i<8;i++)
{ scratchpad[i] = temp_read();
printf("i:%d/v:%d %d %d",i,scratchpad[i],D_Presence,D_ShortCircuit);
}
printf("Temperatur: %d, %02u C\r\n",temp_2,temp_1);
delay_ms(500);
}
}
VIELEN DANK!!!!
Liste der Anhänge anzeigen (Anzahl: 1)
Solange der die progs bennt solte es gehen.wie hast du morgen zeit?
So lade das mal drauf schließ alles an ds an C4 und loß comterminal auf 2400 Baud einstellen.wenn der max und der chip gehen müßte im terminel check stehen.is nur das init des ds das Das die kom. klappt.