problem med tempbivare och picbasicpro
problem med tempbivare och picbasicpro
Jag har progblem med att läsa av 2st ds18B20 tempgivare med en pic16F870 och picbasicpro. Jag har kopplat båda givarna till samma pinne på pic:en. Men när jag använder det här programmet så låser sig pic:en om jag har båda tempgivarna monterade men om jag tar bort en så läser han av den andra men aldrig när båda sitter där vad kan vara felet jag använder ca 12 m cat5 kabel till varje tempgivare
DEFINE OSC 8
ADCON1 = 7
DEFINE LCD_EREG PORTA
DEFINE LCD_EBIT 5
TRISB = %11111111
TRISC = %11111111
DQ VAR PortC.0
Stat VAR BIT
S1 Var byte
S2 Var byte
S3 Var byte
A VAR WORD
B VAR WORD
start:
S1 = $E5
S2 = $93
S3 = $1E
gosub Temp
A=B
S1 = $86
S2 = $81
S3 = $7B
gosub Temp
A=A >> 3
B=B >> 3
Lcdout $fe, 1
Lcdout dec (A >> 1),".",dec(A.0 * 5)
Lcdout $fe, $C0
Lcdout dec (B >> 1),".",dec(B.0 * 5)
pause 2000
goto start
Temp:
OWOUT DQ, 1, [$55,$28,S1,S2,$79,$00,$00,$00,S3,$44]
W1:
OWIN DQ, 4, [Stat]' Check for still busy converting1
IF Stat = 0 THEN W1' Still busy?, then loop
OWOUT DQ, 1,[$55,$28,S1,S2,$79,$00,$00,$00,S3,$BE]
OWIN DQ, 2, [B.LOWBYTE,B.HIGHBYTE]' Read two bytes, then end communications
Return
DEFINE OSC 8
ADCON1 = 7
DEFINE LCD_EREG PORTA
DEFINE LCD_EBIT 5
TRISB = %11111111
TRISC = %11111111
DQ VAR PortC.0
Stat VAR BIT
S1 Var byte
S2 Var byte
S3 Var byte
A VAR WORD
B VAR WORD
start:
S1 = $E5
S2 = $93
S3 = $1E
gosub Temp
A=B
S1 = $86
S2 = $81
S3 = $7B
gosub Temp
A=A >> 3
B=B >> 3
Lcdout $fe, 1
Lcdout dec (A >> 1),".",dec(A.0 * 5)
Lcdout $fe, $C0
Lcdout dec (B >> 1),".",dec(B.0 * 5)
pause 2000
goto start
Temp:
OWOUT DQ, 1, [$55,$28,S1,S2,$79,$00,$00,$00,S3,$44]
W1:
OWIN DQ, 4, [Stat]' Check for still busy converting1
IF Stat = 0 THEN W1' Still busy?, then loop
OWOUT DQ, 1,[$55,$28,S1,S2,$79,$00,$00,$00,S3,$BE]
OWIN DQ, 2, [B.LOWBYTE,B.HIGHBYTE]' Read two bytes, then end communications
Return
Nu har jag provat att lura pic:en att den går i 16 Mhz fast kör den i 8 Mhz och då fungerar allt perfekt men jag vill inte köra den så kan man sänka fastigheten på owin och owout komandona eller ska jag gjöra nåt med kablarna jag har provat att sätta en diod mellan jord och signal vid tempgivarna men det hjälper ej ?
Eftersom du kör med extern spänningsförsörjning så ska du inte behöva vänta ett visst antal ms på att konvertingen är färdig. Utan det ska räcka med att polla din 1-wire-pinne, och vänta till den blir hög. Det är det som sker här i din kod:
Varför det inte fungerar beror nog på att tiderna som används av OWIN och OWOUT inte är anpassade för så långa kablar. Så det du borde göra, är precis som du föreslår, att ändra dessa tider på något sätt. Kolla runt lite på internet, det lär vara fler än du som har råkat ut för det här. Alternativet är att skriva egna rutiner för 1-wire eller ladda hem färdiga. Då kan du iaf ställa in tiden som du vill ha den, utan att behöva prova med olika OSC-värden som du har fått göra nu.
Kod: Markera allt
W1:
OWIN DQ, 4, [Stat]' Check for still busy converting1
IF Stat = 0 THEN W1' Still busy?, then loop