Goedemiddag,
Met de zoekfunctie van het forum kan ik geen goed topic vinden waar specifiek beschreven staat hoe ik een temperatuur sensor moet uitlezen met de PIC16F628

Het gaat om de sensor DS1820. De sensor geeft een digitaal signaal, de vraag is alleen hoe ik dit signaal kan uitlezen en omvormen tot graden celcius

M'n programmeer taal is PICBasic

En het mag geen AVR zijn ?

Jep die ken ik :) Maar dat vind ik nogal een onoverzichtelijke code.
Ik kan niet goed begrijpen wat er allemaal moet gebeuren om uiteindelijk de temperatuur op je display te zien.

@elektron: Nee die dingen ken ik niet en kan ik ook niet programmeren :)

[Bericht gewijzigd door Boeip op (17%)]

Jammer...

Ik google een beetje en er is geneoeg te vinden.
http://www.guidecircuit.com/Circuit-Microcontroller-Digital-thermomete…

[Bericht gewijzigd door elektron_ op (88%)]

Ik kan alles wel klakkeloos overnemen en inelkaar solderen. Maar daar leer ik niks van. Van Assambler kan ik helemaal niks, dus aan die source code heb ik niks.

- Welke commando's gebruik je om een DS1820 uit te lezen? (Dallas 1-wire protocol)
- Het signaal is digitaal, maar hoe laat ik nou de daadwerkelijk gemeten temperatuur op een lcd verschijnen?
- Komt er meteen "graden celcius" uit de DS1820 zetten, of moet ik deze eerst berekenen?

Dit alles in PICBasic

Heb jij de handleiding van Proton+ wel eens doorgenomen? Volgens mij niet... Zoek maar eens op OREAD.

Ben je gewoon een beetje lui of hoe zit dat ?
Eerste lijn in Google:
http://www.rentron.com/PICX4.htm

[Bericht gewijzigd door elektron_ op (44%)]

Iemands reacties lezen is tegenwoordig ook een vak opzich.
Ik zoek gewoon wat uitleg over de commando's die je moet gebruiken om het geheel werkend te krijgen.

@ZX6RR, ik heb daar eens gekeken. Ik heb alles nu in een PIC16F628 gepropt en het hier en daar aangepast. Morgen probeer ik het in een PIC16F84 waar de code voor bedoeld is

Tip : Neem een T-sensor die met een fatsoenlijk protocol werkt.
Denk aan DS1621 of TC74.
Beide chippies kan je als free sample aanvragen bij Maxim/Microchip.

Code ervoor heb je in een half uurtje geschreven.

Ach, 1-Wire is best goed te doen. Maar wel in assembly.

Schakelingetje :

http://home.casema.nl/galaxy/T.jpg

Progje :


Device = 16F628A

Config INTRC_OSC_NOCLKOUT, CP_OFF, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF, BODEN_off 
DelayMS 200
ALL_DIGITAL=true

Declare LCD_DTPIN PORTB.4
Declare LCD_RSPIN PORTB.2
Declare LCD_ENPIN PORTB.3
Declare LCD_LINES 2
Cls
Clear

Declare SCL_PIN PORTB.0
Declare SDA_PIN PORTB.1

Dim T As Word
Dim dummy As Byte


BusOut %10010000,172,[1]            ;oneshot mode in t-sensor.
BusOut %10010000,[238]              ;start conversie
;-----------------------------


main:


BusIn %10010001,172,[dummy]                 ;lees config register van T-sensor
If dummy.7=1 Then                           ;1=conversion ready, 0=busy
    BusIn %10010001,170,[T]                 ;lees T-sensor
    BusOut %10010000,[238]                  ;start nieuwe temperatuur conversie
End If

DelayMS 100

If T.HighByte<128 Then           ;positieve temperatuur
    Print At 1,1," "
    Print DEC2 T.HighByte
    If T.LowByte=0 Then
        Print ".0"
    Else
        Print ".5"
    End If
Else                                ;negatieve T
    Print At 1,1,"-"
    If T.LowByte=0 Then
        Print DEC2 256-T.HighByte
        Print ".0"
    Else
        Print DEC2 255-T.HighByte
        Print ".5"
    End If
End If


Print 223,"C"
GoTo main

Er zit maar 1 nadeel aan deze schakeling; het is niet spannend. :-)
Doe er dan minstens een RTC bij (DS1307). Dan heb je datum en tijd er ook bij. Anders blijft het LCD'tje zo kaal...:-)

beetje uitbreiden dan maar ...
hoogste waarde onthouden, en laagste waarde onthouden.
is het lcd'tje wat voller.
en-uh...marco , 1-wire ds1820 is ook best te doen in picbasic.

Ik heb dat stukje code uit de help topics van Proton geprobeerd, maar de waarde die de sensor geeft is 655,10. De variabele is gedeclareerd als WORD

DEVICE 16F84 
 DECLARE XTAL 4  
 SYMBOL DQ = PORTA.1           ' Place the DS1820 on bit-1 of PORTA  
 DIM Temp AS WORD              ' Holds the temperature value 
 DIM C AS BYTE                 ' Holds the counts remaining value 
 DIM CPerD AS BYTE             ' Holds the Counts per degree C value  
 CLS                           ' Clear the LCD before we start 
Again: 
 OWRITE DQ, 1, [$CC, $44]      ' Send Calculate Temperature command 
 REPEAT 
 DELAYMS 25                    ' Wait until conversion is complete 
 OREAD DQ, 4, [C]              ' Keep reading low pulses until
 UNTIL C <> 0                  ' the DS1820 is finished.
 OWRITE DQ, 1, [$CC, $BE]      ' Send Read ScratchPad command
 OREAD DQ, 2,[Temp.LOWBYTE,Temp.HIGHBYTE, C, C, C, C, C, CPerD]
 ' Calculate the temperature in degrees Centigrade
 Temp = (((Temp >> 1) * 100) - 25) + (((CPerD - C) * 100) / CPerD)
 PRINT AT 1,1, DEC Temp / 100, ".", DEC2 Temp," ", AT 1,8,"C"
 GOTO Again

[Bericht gewijzigd door Boeip op (82%)]

25 ms lijkt mij zeer kort...

In het voorbeeld van mikroBasic wordt er 120 uS gewacht na het eerste commando en het werkt perfect.

In de datasheet van de DS18S20 staat dat je 750mS moet wachten, maar goed ik ken PicBasic niet.
Misschien zit het in REPEAT

http://www.picbasic.org/forum/archive/index.php/t-6088.html

[Bericht gewijzigd door elektron_ op (19%)]

Op 29 juli 2007 09:06:36 schreef EdwinNadorp:
In het voorbeeld van mikroBasic wordt er 120 uS gewacht na het eerste commando en het werkt perfect.

Dat heb ik aangepast en tot mijn verbazing geeft hij nu sneller een waarde aan. Alleen de waarde is _altijd_ 655.11 graden. Zelfs zonder sensor ;)

Edwin, wil jij misschien even de code posten die in MikroBasic staat? Dan probeer ik het daar mee

Edit: Mannen, ik heb m werkend. Ik heb verschillende waardes kristallen geprobeerd en de sensor op verschillende poorten aangesloten. Hieruit trek ik de conclusie dat de sensor niet op iedere willekeurige pin kan uitsluiten. Hij zit nu aangesloten op PORTB.1 met 4mhz kristal.

@Galaxy, de DS1307 ga ik ook nog even uitproberen. Bedankt voor de tip

[Bericht gewijzigd door Boeip op (28%)]

Goed, de DS1307 en DS1820 heb ik aan de praat gekregen :)
Van allebei de sensoren krijg ik de temperatuur.

Nu nog wat ophelderende vragen.

Hoe kom je aan dit soort codes/waardes?

BusOut %10010000,172,[1]            ;oneshot mode in t-sensor.
BusOut %10010000,[238]              ;start conversie
BusIn %10010001,172,[dummy]                 ;lees config register van T-sensor
If dummy.7=1 Then                           ;1=conversion ready, 0=busy
    BusIn %10010001,170,[T]                 ;lees T-sensor
    BusOut %10010000,[238]                  ;start nieuwe temperatuur conversie
End If

Ik wil graag de DS1307 aan de gang helpen met datum uitlezing ;) Hoe krijg ik de waardes uit de DS1307 op m'n LCD?

Ik heb zelf wat aan elkaar geknoopt, maar nu blijft er in beeldstaan: 08/08/08 08:08:08

Device 16F628A                                                                   ;PIC
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF                 ;Configuratie
ALL_DIGITAL TRUE                                                                 ;Alles digitaal

Symbol SDA PORTa.1                                                               ;Symbolen
Symbol SCL Porta.0                                                               ;Symbolen

Dim RTCYear    as byte                                                           ;Variabel
Dim RTCMonth   as byte                                                           ;Variabel
Dim RTCDate    as byte                                                           ;Variabel
Dim RTCDay     as byte                                                           ;Variabel
Dim RTCHour    as byte                                                           ;Variabel
Dim RTCMinute  as byte                                                           ;Variabel
Dim RTCSecond  as byte                                                           ;Variabel
Dim RTCCtrl    as byte                                                           ;Variabel
Dim TheTime    as Word

RTCYear    = $07                                                                 ;Variabel instellen
RTCMonth   = $09                                                                  ;Variabel instellen
RTCDay     = $16                                                                  ;Variabel instellen
RTCHour    = $13                                                                 ;Variabel instellen
RTCMinute  = $30                                                                   ;Variabel instellen
RTCSecond  = $45                                                                   ;Variabel instellen
RTCCtrl    = $0                                                                  ;Variabel instellen
                                                                     
Gosub settime		                                                                 ;Subroutine settime
Goto start

settime:
 busOut SDA, 0, [RTCYear, RTCMonth, RTCDate, RTCDay, RTCHour, RTCMinute, RTCSecond, RTCCtrl]
return

gettime:
 busIn SDA, 0, [RTCYear, RTCMonth, RTCDate, RTCDay, RTCHour, RTCMinute, RTCSecond, RTCCtrl]
return

DelayMS 500                                                                      ;LCD Opstarten

start:
gosub gettime

	print $fe, 1, hex2 RTCMonth, "/", hex2 RTCDate, "/" , hex2 RTCYear,_
  "  ", hex2 RTCHour, ":", hex2 RTCMinute, ":", hex2 RTCSecond

	delayms 500

goto start

Ik ben ook met een dallas ds18s20 bezig.

krijg het prefect werkend op poort B, maar waarom werkt het niet op poort A?

het staat zelfs zo in de handlijding van PIc-basic

ik wil er 4 paralel naast elkaar uitlezen, maar mijn poorten op B zijn dan niet vodoende daar erals een lcd opzit , kan een lcd ook an port A

Die 1-wire sensoren kunnen samen op 1 bus, die hoef je niet elk appart aan een I/O van je uC te hangen.

Ik ben maar een beginner , ik weet dat het kan maar dan moet je eerst de code uitlezen van elke sensor?

ik dacht even snel 4 temperatuuren op een LCD-tje te kwakken , maar dat snel duurt nu al een paar uur :(

maar als je een simpel vooreeldje hebt in picbasic (maar volgens mij gebruik je AVR)