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!!!!
Lesezeichen