NEXA mottagare

Berätta om dina pågående projekt.
Användarvisningsbild
lond
Inlägg: 3511
Blev medlem: 23 september 2009, 11:52:45
Ort: Hyssna

NEXA mottagare

Inlägg av lond »

Har hållit på med detta projekt sedan december och kört fast några gånger, men med nya mätinstrument (logikanalysator från Saleae) och information från forumet här fick jag det att fungera tillslut :)

µP avkodar det den får från 433,92MHz mottagaren och skickar informationen vidare via 3 pinnar (TXD, CTS & RTS) till nästa µP eller dator.

Denna version har jag kopplad via rs232-USB till en dator som övervakar via ett terminal program Framsida Baksida

Den gamla version (annan modell av µP) sitter nu i detta projekt IKEA Jonisk LED.

Nästa steg är att förbättra dekodningen av signalerna för att stödja fler tillverkare av sändare och att implementera mottagaren tillsammans med en TellStick mm.

// Marcus
Användarvisningsbild
jadler
EF Sponsor
Inlägg: 407
Blev medlem: 28 maj 2009, 12:03:43
Ort: Vidja, Huddinge, Stockholm
Kontakt:

Re: NEXA mottagare

Inlägg av jadler »

Varför vill du bygga en mottagare?
Användarvisningsbild
lond
Inlägg: 3511
Blev medlem: 23 september 2009, 11:52:45
Ort: Hyssna

Re: NEXA mottagare

Inlägg av lond »

För det första för att kunna se om jag kunde få det hela att fungera från teori till praktik :) , för det andra att kunna styra saker med NEXA fjärrkontroller, tex min IKEA Jonisk LED, som jag styr med on/off och mode från en väggsändare och alla andra funktioner: färgstyrning, hastighet, minnespositioner etc. från en YCT-100 fjärrkontroll.

// Marcus
Användarvisningsbild
lond
Inlägg: 3511
Blev medlem: 23 september 2009, 11:52:45
Ort: Hyssna

Re: NEXA mottagare

Inlägg av lond »

Har nu fått mottagaren att förstå PROOVE-2000 formatet.
Nu skall bara µP i lampan tolka informationen till kommandon :)

// Marcus
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: NEXA mottagare

Inlägg av PHermansson »

Tell me more! Var hittar jag kod&schema?
danielr112
Inlägg: 8055
Blev medlem: 18 januari 2009, 00:48:24
Ort: Alvesta, Småland

Re: NEXA mottagare

Inlägg av danielr112 »

Riktigt sjysst!

Håller stenkoll på detta med och allt resultat hoppas jag är öppet 8)
Användarvisningsbild
lond
Inlägg: 3511
Blev medlem: 23 september 2009, 11:52:45
Ort: Hyssna

Re: NEXA mottagare

Inlägg av lond »

Det nya NEXA/PROOVE-2000 systemet är uppbyggt på följande sätt:

1 start bit och 33st informations bitar där bit 1-26 är sändarens id, 27 & 28 on/off och bit 29-33 är button information.
Sedan kommer en paus på ca 10,2mS innan informationen sänds igen.
Summan av dom 33st informationsbitarna blir 66 (Som jag har tolkat det :) ).
Har mätt upp detta med hjälp av en fjärrkontroll (LYCT-705) och en magnetbrytare (LMST-606).

Bild
Bild

Pdf-fil hur det hela är uppbyggt

Kretsschema:
Bild

Layout:
Bild

Måste "qouta" koden mera innan jag släpper den :)

Håll till godo så länge.

// Marcus
Senast redigerad av lond 21 oktober 2009, 19:41:57, redigerad totalt 1 gång.
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: NEXA mottagare

Inlägg av victor_passe »

Detta är exakt vad jag letar efter men jag förstår inte databladet.
danielr112
Inlägg: 8055
Blev medlem: 18 januari 2009, 00:48:24
Ort: Alvesta, Småland

Re: NEXA mottagare

Inlägg av danielr112 »

Klockrent!

Synd att man inte har tid att börja med sitt egna projekt nu. Då hade jag gladeligen hjälpt till och lagt ut mina ritnignar o.s.v. Men just nu finns de bara i huvudet :/
Användarvisningsbild
lond
Inlägg: 3511
Blev medlem: 23 september 2009, 11:52:45
Ort: Hyssna

Re: NEXA mottagare

Inlägg av lond »

Lite ytterligare förklaring:
Bild
Varje informationsbit skickas genom ett antal pulser som µP räknar och tolkar om till ett värde.

// Marcus
Senast redigerad av lond 21 oktober 2009, 19:46:01, redigerad totalt 1 gång.
danielr112
Inlägg: 8055
Blev medlem: 18 januari 2009, 00:48:24
Ort: Alvesta, Småland

Re: NEXA mottagare

Inlägg av danielr112 »

Vilken motagare och sändare kör du med? Motsvarigheten KjelloCo ?
Användarvisningsbild
lond
Inlägg: 3511
Blev medlem: 23 september 2009, 11:52:45
Ort: Hyssna

Re: NEXA mottagare

Inlägg av lond »

Sändare LYCT-705, mottagare Kjell.com:s 433MHz mottagare modul.

// Marcus
Användarvisningsbild
lond
Inlägg: 3511
Blev medlem: 23 september 2009, 11:52:45
Ort: Hyssna

Re: NEXA mottagare

Inlägg av lond »

Har även en fjärrkontroll + en väggsändare av den gamla modellen som också fungerar :)
Och en LMST-606 som är ombyggd så att den får plats bakom en vanlig strömbrytare och magnetbrytaren ersatt av 2 trådar som går till den befintliga strömbrytaren som är bytt till en dubbel-trapp så att allt är isolerat, gjorde detta för att slippa dra en helt omöjlig tändtråd :)

// Marcus
Användarvisningsbild
lond
Inlägg: 3511
Blev medlem: 23 september 2009, 11:52:45
Ort: Hyssna

Re: NEXA mottagare

Inlägg av lond »

Här kommer koden för er alla nyfikna personer som har suttit och väntat :)

Kod: Markera allt

'****************************************************************
'*  Name    : 433_reciver_5.BAS                                 *
'*  Author  : Marcus Löfstrand                                  *
'*  Notice  : Copyright (c) 2008 Marcus Löfstrand               *
'*          : All Rights Reserved                               *
'*  Date    : 2009-10-19                                        *
'*  Version : 5.1.0.107                                         *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

' -----[ µP Definitions ]--------------------------------------------------

    Device = 16F688
    Reminders false 
    Config EXTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, BOD_OFF, CP_OFF, MCLRE_OFF, CPD_OFF
    Reminders true
    Xtal = 16
    
    All_Digital = TRUE

' -----[ I/O Definitions ]-------------------------------------------------
            
    Symbol RX433 = PORTC.5

    Symbol D0 = PORTC.2                 ' Led 0
    Symbol D1 = PORTC.1                 ' Led 1
    Symbol D2 = PORTC.4                 ' Led 2
    Symbol D3 = PORTC.3                 ' Led 3
    
    Symbol RTS = PORTA.1
    Symbol CTS = PORTC.0
                
' -----[ Variables ]-------------------------------------------------------
        
    Dim T_1 As Word
    Dim T_2 As Word

    Dim loop As Byte
    
    Dim value As Byte
    Dim pointer As Word
    
    Dim Out As Word
    Dim Out_New[34] As Byte
    Dim Out_New_Control[34] As Byte
        
    Declare Serial_Baud 4800

    Declare Rsout_Pin PORTA.0           ' TX data
    Declare Rsout_Mode 0
    
' -----[ Constants ]-------------------------------------------------------

    Dim CR As $0D                       ' Carriage Return
    Dim LF As $0A                       ' Line Feed
    
    Dim Value_Low_0 As 100              ' Spannet för en 0:a
    Dim Value_High_0 As 250
    Dim Value_low_1 As 350              ' Spannet för en 1:a
    Dim Value_High_1 As 500
    
    Dim NEXA_2000_value As 4055         ' Timming värdet för NEXA 2000
    Dim NEXA_old_value As 4550          ' Timming värdet för NEXA old
    Dim Diff As 150                     ' Max - Min
            
' -----[ Initialization ]--------------------------------------------------

Input RX433
Input CTS
Low RTS

DelayMS 200

' -----[ Program Code ]----------------------------------------------------

Main:                                   ' I väntan på mottagning

Low D0                                  ' Släcker alla Led
Low D1
Low D2
Low D3

If RX433 = 1 Then GoTo Measure          ' Om det kommer en 1:a från mottagaren - börja jobba

GoTo Main

' -----[ Subroutines ]-----------------------------------------------------

Measure:

T_1 = PulsIn RX433, 0                   ' Mät efterföljande 0:a
    ' AKA Hoppar över första data paketet och mäter pausen mellan paketen
If T_1 >= NEXA_2000_value - Diff And T_1 <= NEXA_2000_value + Diff Then
    GoTo NEXA_2000                      ' Om mellanrummet är ca 10,2mS så är datan NEXA_2000                      
ElseIf T_1 >= NEXA_old_value - Diff And T_1 <= NEXA_old_value + Diff Then
    GoTo NEXA_old                       ' Om mellanrummet är ca 11,3mS så är datan NEXA_old
EndIf

GoTo Main                               ' Annars tillbaka till huvudloopen och vänta

NEXA_old:

Repeat Until RX433 = 0                  ' Vänta på en 0:a

High D0
For loop = 0 To 11
    Toggle D1
    
    T_1 = PulsIn RX433, 1               ' Mät 1:an

    Toggle D3
        
    If T_1 >= Value_Low_0 And T_1 <= Value_High_0 Then 
        value = 0
    ElseIf T_1 >= Value_low_1 And T_1 <= Value_High_1 Then 
        value = 1
    Else                                ' Beroende på längd 0:a, 1:a eller ogiltig
        GoTo Main
    EndIf

    Repeat Until RX433 = 1
                                        ' Hoppa över nästa puls
    Repeat Until RX433 = 0

    If loop = 0 Then                    ' Fixa till så att informationen är lättläst
        Out.8 = value
    ElseIf loop = 1 Then
        Out.9 = value
    ElseIf loop = 2 Then
        Out.10 = value
    ElseIf loop = 3 Then
        Out.11 = value
    ElseIf loop = 4 Then
        Out.4 = value
    ElseIf loop = 5 Then
        Out.5 = value
    ElseIf loop = 6 Then
        Out.6 = value
    ElseIf loop = 7 Then
        Out.7 = value
    ElseIf loop = 8 Then
        Out.3 = value
    ElseIf loop = 9 Then
        Out.2 = value
    ElseIf loop = 10 Then
        Out.1 = value
    ElseIf loop = 11 Then
        Out.0 = value
    EndIf
    
Next

If Out.1 = 1 And Out.2 = 1 And Out.3 = 0 Then GoTo Send_Data_old    ' Kontrollera så att datan är godkänd.

GoTo Main

NEXA_2000:                              ' Om det är NEXA_2000 data

Repeat Until RX433 = 0                  ' Vänta på en 0:a

High D0

Clear Out_New                           ' Se till så allt det inte finns något kvar sen förra gången
loop = 0                                ' Nolla all räknare
T_1 = 0
T_2 = 0
DelayMS 2

While 1 = 1
    Inc T_1
    DelayUS 1
    If T_1 = 120 Then                   ' T_1 = 120 så är det en ny bit
        Toggle D1                       ' Nollställ allt och flytta fram markören för mätvärdet ett steg
        Inc loop
        T_1 = 0
        Inc T_2
        If loop >= 33 Then Break        ' Har vi fått 33 mätvärden - gå ur loopen
    EndIf
    If T_2 >= 2 Then GoTo Main          ' Har vi hafft en 0:a så här länge så är det något fel - Gå till huvudloopen
    If RX433 = 1 Then                   ' Om vi får en 1:a så öka mätvärdet med 1
        High D3
        Inc Out_New[loop]
        Repeat Until RX433 = 0
        Low D3
        T_1 = 0                         ' Nolla 0-kontrollanterna
        T_2 = 0
    EndIf
Wend

Repeat Until RX433 = 1                  ' Hoppa över en 1:a och en 0:a
Repeat Until RX433 = 0

Clear Out_New_Control                   ' Gör allt en gång till men med _Control istället
loop = 0
T_1 = 0
T_2 = 0
DelayMS 2

While 1 = 1
    Inc T_1
    DelayUS 1
    If T_1 = 120 Then
        Toggle D1
        Inc loop
        T_1 = 0
        Inc T_2
        If loop >= 33 Then Break
    EndIf
    If T_2 >= 2 Then GoTo Main
    If RX433 = 1 Then
        High D3
        Inc Out_New_Control[loop]
        Repeat Until RX433 = 0
        Low D3
        T_1 = 0
        T_2 = 0
    EndIf
Wend

For loop = 0 To 32                      ' Jämför Out_New med Out_New_Control
    If Out_New[loop] <> Out_New_Control[loop] Then GoTo Main
Next

GoTo Send_Data_2000                     ' Om dom var lika så kan vi skicka datan vidare

Send_Data_old:

High D2

High RTS                                ' Sätt RTS hög
Repeat Until CTS = 1                    ' och vänta på att nästa enhet skall svara

DelayMS 2

RSOut Hex3 Out                          ' Skicka dom 3 hexadecimala värderna
RSOut CR, LF                            ' och avsluta med CR, LF

Low RTS                                 ' Återställ RTS

DelayMS 500                             ' Vänta en liten stund

GoTo Main                               ' och återgå till att vänta på nästa mottagning

Send_Data_2000:

High D2

High RTS                                ' Sätt RTS hög
Repeat Until CTS = 1                    ' Och vänta på att nästa enhet skall svara

DelayMS 2

For loop = 0 To 32
    RSOut Hex1 Out_New[loop]            ' Skicka informationen som 33 st hexadecimala värden
Next
RSOut CR, LF                            ' och avsluta med CR, LF

Low RTS                                 ' Återställ RTS

DelayMS 500                             ' Vänta en liten stund

GoTo Main                               ' och återgå till att vänta på nästa mottagning

End
Jag vet att den är skriven i BASIC, men det är det jag programmerar i. :D

// Marcus
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Re: NEXA mottagare

Inlägg av PHermansson »

Tackar!
Dags att ta upp mitt gamla projekt igen alltså, här får man ju en del på köpet. Mitt mål var att använda en USB-Pic, ska se om jag kan porta koden till C18...
Skriv svar