donderdag 13 september 2012

thierry mugler weerstation decoderen

Ik heb onlangs bij de action een thierry mugler weerstation gekocht om mee te experimenteren.
Echt geweldig zijn ze niet, slecht bereik, veel te lage waarden en de ontvanger loopt uit de pas waardoor na een tijd geen buitentemperatuur meer word weergegeven.
Maar ze zijn wel leuk om te zien hoe een en ander werkt.
Op het internet vond ik al snel het protocol waar mee de sensoren werken.
http://roel.reijerse.net/thierry/  Met een heel simpel programmatje wat via rs232 de lengte van de pulsen aangaf met PulsIn PORTB.0,1 kon ik de lengte bepalen, hieruit bleek dat voor de data er een startpuls word uitgezonden van ongeveer 4000us, hierna volgt de data waarbij een 1 : 980us is en een 0 : 2300us is.
Voor de startpuls zitten ook nog pulsen maar die zijn niet nodig.
Op de site van Roel kun je vinden waar alles zit. In mijn progje mist alleen het - teken. Deze bit zit nog na de hygro en kun je dus eenvoudig toevoegen. De ontvanger is van de conrad, elke andere zal ook willen als het maar op 433.92 Mhz werkt. Wat ook mooi zou zijn is om zelf ook het signaal te kunnen uitzenden maar er zit een checksum in waar nog niet alles van bekend is. Ook heb ik nog meer weerstations van andere merken die ga ik ook proberen te decoderen met proton.



'  " ook" ontvanger op portb.0

Device 18F2620
Xtal 20

LCD_DTPin PORTC.0
LCD_ENPin PORTC.4
LCD_RSPin PORTC.5

All_Digital = On

TRISB = 000000


Dim tijdpuls As Word
Dim teller As Byte
Dim mugtemp As Byte
Dim mugtempdec As Byte
Dim mughyg As Byte

Clear

DelayMS 100

Print $FE, $40, $08, $14, $08, $03, $04, $04, $03, $00 ' celcius
Print $FE, $48, $04, $0E, $0E, $1F, $1F, $1F, $0E, $00 ' drupje
Print $FE, $50, $04, $0E, $1F, $00, $1F, $0E, $04, $00 ' temp buiten

Cls

main:

tijdpuls = PulsIn PORTB.0,1

Select Case tijdpuls
   Case 1600 To 2300   'startpuls ong 4000us (bij 20mhz is 1 puls 2us) +- 20%
       GoTo bitsinlezen
End Select

GoTo main  


bitsinlezen:
For teller = 23 To 0 Step -1  ' 24 bits inlezen na start

tijdpuls = PulsIn PORTB.0,1

Select Case tijdpuls
   Case < 390                  ' bij pulsen die te klein of te groot of er tussen vallen weer terug
       GoTo main
   Case > 1400
       GoTo main
   Case 590 To 950
       GoTo main
   Case 390 To 590          ' 1 = ong 980 us +- 20%
       Select Case teller      ' eerste 4 bits altijd 1 kunnen we overslaan.
          Case 16 To 19
              SetBit mugtempdec, 19 - teller  ' decimalen inlezen 4 bits
          Case 8 To 15
              SetBit mugtemp, 15 - teller     ' aantal graden
          Case 0 To 7
              SetBit mughyg, 7 - teller       ' hygro
       End Select
   Case 950 To 1400        '0 ong 2300 us
       Select Case teller
          Case 16 To 19
              ClearBit mugtempdec, 19 - teller
          Case 8 To 15
              ClearBit mugtemp, 15 - teller
          Case 0 To 7
              ClearBit mughyg, 7 - teller
          End Select
End Select
Next teller

Print At 1,1, 2," ",Hex2 mugtemp,".",Hex1 mugtempdec,0," ",1," ",Hex2 mughyg,"%"
GoTo main

1 opmerking:

  1. Een beetje veel jaren later... Ik heb zo'n weerstation voor nop kunnen bemachtigen om dat de zender niet werkte. Het blijkt dat diode D61 compleet doormidden gebroken is op de pcb. Hij zit in de buurt van de + en - draden naar de batterij. Heb je deze nog? En zou je deze open kunnen maken om de code op de diode D61 te achterhalen? Eventueel een foto maken?

    BeantwoordenVerwijderen