FHT 8W ketelrelais

Arduino specifieke Software
Berichten: 15
Geregistreerd: 25 Jan 2013, 17:37

FHT 8W ketelrelais

Berichtdoor willemsfaw » 21 Mrt 2019, 21:54

Halo, Ik heb een FHT 8 W ketelrelais als ketelsturing in mijn installatie zitten.
Deze is defect, en niet meer leverbaar, weet iemand misschien of ik hem kan vervangen door een arduino?
Wie kan mij verder helpen?

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: FHT 8W ketelrelais

Berichtdoor shooter » 22 Mrt 2019, 22:03

Daar zit nogal wat in hoor, een radioprotocol, en dergelijke, nou hopen dat er iemand is die dit kent.
paul deelen
shooter@home.nl

Berichten: 15
Geregistreerd: 25 Jan 2013, 17:37

Re: FHT 8W ketelrelais

Berichtdoor willemsfaw » 23 Mrt 2019, 15:39

Daar ben ik intussen ook achter gekomen.
Al mijn probeersels willen tot nu toe nog niet werken.
in het verleden hielden mn Jeehub en Pieter Meulenhof zich hier mee bezig.
Kan van beide echter niets bruikbaars vinden.

nog wel bedankt voor je reactie.

Berichten: 15
Geregistreerd: 25 Jan 2013, 17:37

Re: FHT 8W ketelrelais

Berichtdoor willemsfaw » 28 Mrt 2019, 21:48

Ik heb op internet iets gevonden wat me misschien verder kan helpen.
Allen is mijn programmeerkennis onvoldoende om het programma volledig te doorgronden.
met name het gedeelte in de Setub(), wat begint met " setb(ACSR,ACBG); " enz.
is mij niet duidelijk. Arduino geeft aan dat hij de variabele setb niet kent.
wie kan mij hiermee helpen?





Code: Alles selecteren
// 2009-04-08 <jcw@equi4.com> http://opensource.org/licenses/mit-license.php

#include <stdio.h>       
#include "sfr_defs.h"   

#define RXDATA 14 // receiver signal is connected to analog input 0 AI01

enum { UNKNOWN, T0, T1, OK, DONE };
struct { char bits; byte state; uint64_t data; } FS20;

void setup()
{
     Serial.begin(57600);
     Serial.println("\nMy serial port is  ready ");
     Serial.println("*** Decoding FS20 ***");
     pinMode(RXDATA, INPUT);                     // 14 = (analog input 0)
     digitalWrite(RXDATA, 1);                    // 1 = pull-up 20k
     
     setb(ACSR,ACBG);                            // fixed reference voltage
     setb(ACSR,ACI);                             //
     setb(ACSR,ACIE);                            // activate interupt , also I bit in statusregister must be set
     clrb(ADCSRA,ADEN);                          // enable de ADC
     setb(ADCSRB,ACME);                          // Analog comparetor negative input = ADC0, ADEN=0, ACME=1, mux 2..0
     ADMUX = 0;                                  // ADC0  clear ADMUX for ADC0
                                                 // 250 KHz/ presc 64 = 250khz = 4 usec/count, max 1,024 msec (16 MHz clock) */
     TCNT2 = 0;                                  // timer counter unit 8 bit counter
     TCCR2A = 0;                                 // clear TIMER counter control register A
     setb(TCCR2B,CS22);                          // CS22 1 CS21 0 CS20 0 => prescaler 64
     setb(TIMSK2,TOIE2);                         // enable TIMER counter 2 overflow interrupt
     reset_FS20();
}

void loop ()
          {
          byte buf[10];
          byte n = ook868poll(buf);
          if (n > 0) {
                     Serial.print("OOK868 ");
                     Serial.print(n, DEC);
                     Serial.print("  ");
                     if (buf[2]==7) Serial.print (" You pressed 8 ");
                     for (byte i = 0; i < n; ++i)
                         {
                         to_bin(buf[i]);
                         }
                     Serial.print("  ");
                     for (byte i = 0; i < n; ++i)
                         {
                         Serial.print(' ');
                         Serial.print(buf[i], DEC);
                         }
                    Serial.println();
                    }
}

static byte FS20_bit (char value)
{
FS20.data = (FS20.data << 1) | value;                           
if (FS20.bits < 0 && (byte) FS20.data != 0x01) return OK;    // OK teruggeven indien .bits < 0 en data = 0 .bits niet verhogen
if (++FS20.bits == 45 && ((FS20.data >> 15) & 1) == 0 ||     // .bits verhogen nadat 12 x 0 en 1 is geweest sync is 0000 0000 0000 1   
FS20.bits == 54 && ((FS20.data >> 24) & 1) == 1)return DONE;
return OK;
}

static void reset_FS20 ()
{
FS20.bits = -1;
FS20.data = 0xFF;
FS20.state = UNKNOWN;
}

// Poll and return a count > 0 when a valid packet has been received:
//  4 = S300   5 = FS20 6 = FS20 extended 7 = KS300 9 = EM10*
static byte ook868poll (byte* buf)
{
if (FS20.state == DONE)
   { 
   byte len = FS20.bits / 9; // 45 of 54  -> 5 of 6
   byte sum = 6;
   for (byte i = 0; i < len; ++i)
       {
       byte b = FS20.data >> (1 + 9 * i); // remove parity bits (even)
       buf[len-i-1] = b;
       if (i > 0)
       sum += b;
       }
   if (sum == buf[len-1])
       {
       reset_FS20();
       return len;
       }
    reset_FS20();
    }
return 0;
}

void to_bin(byte value)
{
int8_t count;
byte bitcol;
bitcol = 1;
char binstr[]="01234567";
for (count = 7; count >= 0 ;count--)
    {
    if ((value & bitcol) == bitcol) binstr[count]='1';
    else binstr[count]='0';
    bitcol=bitcol<<1;
    }
 Serial.print (binstr);


ISR(ANALOG_COMP_vect)
{                                           
unsigned int count;                         // see http://fhz4linux.info/tiki-index.php?page=FS20%20Protocol
count = TCNT2;                              // FS20 pulse widths are 400 = 0uS and 600uS sec = 1 (split on 300, 500, and 700)
TCNT2 = 0;                                  // count is the pulse length in units of 4 usecs so count = 0 = 100  1=150 
if (FS20.state != DONE)                          // org = (count-25 / 50)  1 tot 2 => 0   2 tot 3 => 1   
   {                                       
   if (count > 300/4 && count < 500/4 )          //  4uS  puls length 300 - 500  gemiddelde pulselengte is 400uS volgens specs FS
      {                                     
        if (FS20.state == T0)                   
            {
            FS20.state=FS20_bit(0); //ok or done
            }
        else FS20.state = T0;
      }
   if (count > 500/4 && count < 700/4 )         //  4uS  pulse length 500 - 700 gemiddelde pulselengte is 600uS  volgens Specs FS
      {                                     
      if (FS20.state == T1)
         {
         FS20.state=FS20_bit(1);
         }
      else FS20.state = T1;
      }
   }
else FS20.state=UNKNOWN;
}

ISR(TIMER2_OVF_vect)
   {
    if (FS20.state != DONE)
        reset_FS20();
   }


Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: FHT 8W ketelrelais

Berichtdoor shooter » 28 Mrt 2019, 23:03

je moet een lib zoeken met de naam sfr_defs (gevonden)
paul deelen
shooter@home.nl

Berichten: 15
Geregistreerd: 25 Jan 2013, 17:37

Re: FHT 8W ketelrelais

Berichtdoor willemsfaw » 03 Apr 2019, 19:02

Allen bedankt. Soms kan een klein duwtje je op het rechte pad brengen.
Draait intussen als een zonnetje.

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Alexduh, aqotauponoga en 28 gasten