Sida 1 av 1

problem med tempbivare och picbasicpro

Postat: 27 januari 2005, 21:19:56
av älan
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

Postat: 27 januari 2005, 22:03:51
av Icecap
Jag skulle tro att den står i ett väntläge som aldrig termineras.

När du har givit "konvertera" kommandon behöver du bara vänta en viss tid innan du kan läsa bussen igen, du behöver inte kolla pinnen.

Jag använder själv DS18S20 och har ingen problem fast jag använder inte heller PIC + BASIC

Postat: 27 januari 2005, 22:08:34
av älan
hur lång tid ska jag vänta då?

Postat: 27 januari 2005, 22:10:36
av Icecap
Testa 100ms eller kolla databladet, Dallas specificerar en max. tid.

Postat: 27 januari 2005, 22:20:57
av cykze
Runt max 750 ms ligger den tiden på.

Har du extern spänningsmatning till sensorerna eller kör du med parasitmatning?

Postat: 27 januari 2005, 22:31:55
av älan
extern spänningsmatning jag provade sätta en pause på 1000ms och då fungerar det om jag kopplar bort en lång kabel och använder en 3dm kabel men det går inte ha två långa kablar
Tack för all hjälp

Postat: 27 januari 2005, 22:51:26
av älan
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 ?

Postat: 28 januari 2005, 11:04:29
av Icecap
Vad har du av pull-up?

12m Kat5 är en hel del kapacitiv belastning och du kanske skulle kolla lite på om din pull-up skulle vara lite lägre värde.......

Postat: 28 januari 2005, 21:04:12
av älan
pull-up är 4,7k

Postat: 28 januari 2005, 21:51:58
av cykze
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:

Kod: Markera allt

W1:
OWIN DQ, 4, [Stat]' Check for still busy converting1
IF Stat = 0 THEN W1' Still busy?, then loop
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.

Postat: 28 januari 2005, 23:58:23
av älan
Jag ändrade pull-up motståndet och nu värkar det fungera
Tack för all hjälp jag fått