Bygga egen sändare till Nexa trådlös dimmer

Berätta om dina pågående projekt.
Användarvisningsbild
chille
Inlägg: 2469
Blev medlem: 25 juni 2003, 20:54:41
Ort: Stockholm
Kontakt:

Bygga egen sändare till Nexa trådlös dimmer

Inlägg av chille »

Tjackade en Nexa trådlös dimmer för installation. Köpte även en batteridriven trådlös sändare som ser ut som en vanlig trycknapp. Så nu ska det meckas 8)

Första man gjorde var förståss att plocka isär sändaren. Nästa steg var att plocka isär och bröja mäta på mottagaren. Dock förstår jag mig inte riktigt på den. Den har 3 pinnar, plus, minus och data. Ganska självklart om man tänker lite. Men det skumma är, om man mäter på data med oscilloskopet och låter jorden hänga i luften funkar det kalas, men man får ett störande brum på signalen. Kopplar man på ground på oscilloskopet till plus eller minus på sändaren så är det helt dött. Tycker det är väldigt mysko. Någon som har en förklaring eller kanske tips på vad jag gjort fel? Kanske är min probe som är helt röjd?

Måste få tummen ur och skriva ett program till oscilloskopet så jag kan föra över skärmdumpar. Har ju redan skrivit ett för j00nix.. gah... jag hatar programmering i windows 8)

Enligt vfr här på forumet så kommunicerar modulerna på 433.92MHz med ASK-modulering. En frame består av 25 bitar varav varannan är data. Dvs totalt 12 bitar; 4 huskod, 4 id och 4 styrdata. Det verkar stämma ganska bra. vad han däremot inte sa var vilken överföringshastighet det var. Men jag kom iaf fram till att den verkar vara cirka 700 BAUD. Får mecka igång oscilloskopet så man kan forska mer.

Det roliga är att jag redan har både en sändare och mottagare för 433MHz bandet. Ganska säker på att det är 433.92MHz. Med lite tur är det även rätt modulering :)

Frågan är om man ska bygga en 433MHz<->Bluetooth-adapter eller om man ska bygga en sändare som man kan plugga in i datorn. :?:

Lite obligatoriska bilder :)
Bild
Bild
Bild
Bild
Glömde ju förståss att fota själva dimmern. Aja, uppdaterar väl under dagen :)

EDIT: Hoppsan. Tur att man är moderator så man själv hinner rätta till felen man gör innan någon upptäcker dom. Postade i fel forumdel :lol:
Användarvisningsbild
chille
Inlägg: 2469
Blev medlem: 25 juni 2003, 20:54:41
Ort: Stockholm
Kontakt:

Inlägg av chille »

Såja. Då har man letat hela morgonen och äntligen hittat mina sändar och mottagarmoduler. Självlart var jag lyckligt lottad då även de använde sig av ASK-modulering. Nu blev även oscilloskopet på bra humör när den fick en vettig RF-mottagare 8)

Precis som jag sa tidigare så kommunicerar de med en hastighet av 700 BAUD. Och precis som jag hade hoppats på så kör även IKEA's dimmer med 433.92MHz och ASK-modulering, dock en aning lägre överföringshastighet. Det blir ju perfekt att kunna använda IKEA's där det är möjligt och Nexa's när man bara ska switcha on/off eller vill ha en dimmer för installation. IKEA's dimmer går ju att styra till absolutvärden direkt, vilket inte Nexas gör :)

Bild
rehnmaak
Inlägg: 2204
Blev medlem: 13 december 2005, 01:43:41

Inlägg av rehnmaak »

Att det ballar ur när du ansluter proben kan bero på den kapacitiva last som du tillför med proben. Kör du med x1 probe? Testa isåfall med en x10 probe som lastar *betydligt* mindre. Eller var det så att det slutar funka bara du ansluter jordsladden?
Användarvisningsbild
chille
Inlägg: 2469
Blev medlem: 25 juni 2003, 20:54:41
Ort: Stockholm
Kontakt:

Inlägg av chille »

Nja, det var bara när jag anslöt jordsladden den ballade ur. Körde jag med flytande jord så funkade det ju.

Jag kom att tänka på att både oscilloskopet och dimmern var inkopplade till samma vägguttag. Då kanske den har jord utan att jag ansluter jorden på proben? För det funkade ju hyffsat så iaf.

Fast skit samma, den andra RF-mottagaren var på bättre humör och fungerade direkt som ni ser på bilden 8)

Kom att tänka på att RF-sändaren jag har är ju en sån där modell som man brukar ha för att larma av bilar med. En stor och en liten knapp. Den skulle man ju kunna programmera om (sitter en PIC i den) så den kan tända och släcka taklampan. Är ju perfekt att ha en liten sändare i fickformat. Hoppas verkligen man kan få tag i en pinkompatibel AVR. Vill ju inte mecka PIC i onödan :)
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Håll till godo, Chille! 8)

Kod: Markera allt


        extern  IntRet
;        extern  ReceiveB,RT1Ini,IntRet,TxCharB
        extern  STRTUP
;        extern  STRTUP,TBuffCB

        global  RFNIni,RFNTrns
;        global  RTTrnsB
        global  CCP1Int,CCP2Int

        include SYSTEM.INC      ;System definitions
        include P16C74A.INC     ;Definitions for PIC16C74A

;************************************************************************
;*                                                                      *
;* CONSTANTS                                                            *
;*                                                                      *
;* Constant definitions for this program module.                        *
;*                                                                      *
;************************************************************************

;
; Bittime definitions for NEXA RF transmitter
;
BITTIM1 equ     295             ;1/4 bittime
BITTIM2 equ     590             ;2/4 bittime
BITTIM3 equ     885             ;3/4 bittime
BITTIM4 equ     1180            ;4/4 bittime
BITTIMP equ     10240           ;Bittime for preamble
;BITTIME equ     590             ;Bittime for NEXA RF transmitter
BITTIME equ     295             ;Bittime for NEXA RF transmitter

;************************************************************************
;*                                                                      *
;* VARIABLES                                                            *
;*                                                                      *
;* Variable definitions for this program module.                        *
;*                                                                      *
;************************************************************************

RAM0    UDATA

TXCount res     1               ;Transmission counts
BCount  res     1               ;Transmit bit counter
XmtHldH res     1               ;Transmit/receive holding register high
XmtHldL res     1               ;Transmit/receive holding register low
XmtRegH res     1               ;Transmit/receive shift register high
XmtRegL res     1               ;Transmit/receive shift register low
BCountR res     1               ;Receive bit counter

XFlag   res     1

;************************************************************************
;*                                                                      *
;* FUNCTIONS                                                            *
;*                                                                      *
;* Functions for this program module.                                   *
;*                                                                      *
;************************************************************************

PROM    CODE

;
; Initalize device driver.
;
RFNIni  movlw   B'00000001'     ;Enable timer 1
        movwf   T1CON

        movlw   B'00001000'     ;CCP2 as output compare (pin RC1)
        movwf   CCP2CON

;        movlw   B'00000100'     ;CCP1 as input capture (pin RC2)
;        movwf   CCP1CON

        errorlevel  -302
        bsf     STATUS,RP0      ;Bank 1
;        bsf     PIE1,CCP1IE     ;Enable capture/compare 1 interrupt
        bsf     PIE2,CCP2IE     ;Enable capture/compare 2 interrupt
        bcf     STATUS,RP0      ;Bank 0
        errorlevel  +302
        return

;
; Transmitt data.
;
;  IN:  W = Data
;       FSR = Address
;  OUT: W,FSR destroyed
;
RFNTrns movwf   XmtHldH         ;Data
        movfw   FSR
        movwf   XmtHldL         ;Address
        swapf   XmtHldL,f
        movlw   4
        movwf   TXCount         ;Number of transmissions
        bsf     XFlag,0
        return

;
; Capture/compare 1 interrupt service routine.
;
CCP1Int bcf     STATUS,RP0      ;Bank 0
        bcf     PIR1,CCP1IF     ;Clear interrupt flag
        tstf    BCountR
        bnz     BitRead
;        movlw   low ( BITT15  ) ;Low byte of timer value (1.5 bittime)
        addwf   CCPR1L,w        ;Update low byte of compare register
        movwf   FSR             ;Use FSR for temp storage
;        movlw   high ( BITT15 ) ;High byte of timer value (1.5 bittime)
        btfsc   STATUS,C        ;Update high byte of compare register
        addlw   1               ;Add one for carry
        addwf   CCPR1H,f
        movfw   FSR
        movwf   CCPR1L
        btfbs   PORTC,2,IntRet  ;Verify startbit twice
        btfbs   PORTC,2,IntRet
        movlw   9
        movwf   BCountR
        movlw   B'00001010'     ;CCP1 as interrupt only
        movwf   CCP1CON
        goto    IntRet        

BitRead movlw   low ( BITTIME ) ;Low byte of timer value
        addwf   CCPR1L,w        ;Update low byte of compare register
        movwf   FSR             ;Use FSR for temp storage
        movlw   high ( BITTIME );High byte of timer value
        btfsc   STATUS,C        ;Update high byte of compare register
        addlw   1               ;Add one for carry
        addwf   CCPR1H,f
        movfw   FSR
        movwf   CCPR1L

        clrc
        btfsc   PORTC,2         ;Test receive bit (RC2)
        setc
;        rrf     XmtReg,f        ;Shift bit into receive register
        decfsz  BCountR,f       ;Increment bitcount
        goto    IntRet
        movlw   B'00000100'     ;CCP1 as input capture (pin RC2)
        movwf   CCP1CON
;        rlf     XmtReg,f        ;Stopbit -> carry
        bnc     FErr            ;Framing error if no stopbit

;        movfw   XmtReg          ;Read received character
        clrc
;        call    ReceiveB        ;Decode message. Complete ?
        goto    IntRet

FErr    setc
;        call    ReceiveB        ;Decode message. Complete ?
        goto    IntRet

;
; Capture/compare 2 interrupt service routine.
;
CCP2Int bcf     PIR2,CCP2IF     ;Clear interrupt flag
        bcf     STATUS,RP0      ;Bank 0

        btfbc   XFlag,0,C2Norm0 ;Exit if transmission disabled
        movfw   BCount
        bz      C2z1
        decfsz  BCount,f
        goto    C2z2
        decfsz  TXCount,f
        goto    C2z1
        bcf     XFlag,0
        goto    C2Norm0

C2z1    movfw   XmtHldH
        movwf   XmtRegH
        movfw   XmtHldL
        movwf   XmtRegL

        rlf     XmtRegL,f
        rlf     XmtRegH,f
        movlw   50
        movwf   BCount
        bsf     CCP2CON,CCP2M0  ;Send bit = 1

        movlw   low (BITTIMP)   ;Low byte of timer value (1/4 duty cycle)
        addwf   CCPR2L,w        ;Update low byte of compare register
        movwf   FSR             ;Use FSR for temp storage
        movlw   high (BITTIMP)  ;High byte of timer value
        goto    C2SetL

;        goto    C2Norm

C2z2    btfsc   BCount,0
        bcf     CCP2CON,CCP2M0  ;Send bit = 0
        btfss   BCount,0
        bsf     CCP2CON,CCP2M0  ;Send bit = 1

        bcf     STATUS,C        ;Bit = 0
        btfbc   BCount,1,???1
        btfbc   BCount,0,???3
        rrf     XmtRegH,f
        rrf     XmtRegL,f
        bcf     STATUS,C        ;Bit = 0
???3    btfsc   XmtRegL,0
        bsf     STATUS,C        ;Bit = 1
???1    btfbc   BCount,0,???2
        btfbs   STATUS,C,???4
???5    movlw   low (BITTIM1)   ;Low byte of timer value (1/4 duty cycle)
        addwf   CCPR2L,w        ;Update low byte of compare register
        movwf   FSR             ;Use FSR for temp storage
        movlw   high (BITTIM1)  ;High byte of timer value
        goto    C2SetL

???2    btfbs   STATUS,C,???5
???4    movlw   low (BITTIM3)   ;Low byte of timer value (1/4 duty cycle)
        addwf   CCPR2L,w        ;Update low byte of compare register
        movwf   FSR             ;Use FSR for temp storage
        movlw   high (BITTIM3)  ;High byte of timer value
        goto    C2SetL

C2Norm0 bcf     CCP2CON,CCP2M0  ;Send bit = 0
C2Norm  movlw   low (BITTIM2)   ;Low byte of timer value (1/4 duty cycle)
        addwf   CCPR2L,w        ;Update low byte of compare register
        movwf   FSR             ;Use FSR for temp storage
        movlw   high (BITTIM2)  ;High byte of timer value
C2SetL  btfsc   STATUS,C        ;Update high byte of compare register
        addlw   1               ;Add one for carry
        addwf   CCPR2H,f
        movfw   FSR
        movwf   CCPR2L
        goto    IntRet
Kan tillägga att PIC:en går på 3.68MHz kristall med den här koden.
Användarvisningsbild
chille
Inlägg: 2469
Blev medlem: 25 juni 2003, 20:54:41
Ort: Stockholm
Kontakt:

Inlägg av chille »

Usch vilken rörig kod. Blir ju helt förvirrad av att kolla på den. Behöver det verkligen vara sådär mycket kod? :-x

Aja, tjackade en sändarmodul idag, så nu ska det labbas. Hoppas man hinner få ihop något innan man ska iväg ikväll :)

Preics som vfr så så var det 25 bitar som skickas, varav 12 data:

Kod: Markera allt

Hus  ID  Styr    Hus  ID   Styr
A     1  On      0000 0000 0111 (00000000 00000000 00010101 0)
A     1  Off     0000 0000 0110 (00000000 00000000 00010100 0)
B     3  On      1000 0100 0111 (01000000 00010000 00010101 0)
C    13  On      0100 0011 0111 (00010000 00000101 00010101 0)
Huskoden är A till P, dvs 4 bitar. ID är 1-16, dvs även där 4 bitar. Styrkoderna är också 4bit. 011 verkar vara för att tala om att det är en dimmer/switch och följande bit om det är på/av.

OBS: Datan skickas med LSB först :)

EDIT: Har lyckats styra Nexa-dimmern nu iaf 8)
Croaton
Inlägg: 137
Blev medlem: 23 november 2005, 10:06:26
Ort: Örnsköldsvik

Inlägg av Croaton »

Trevligt Projekt, har själv funderat på att testa detta men ej tagit mig tid ännu.

Jag skulle vara mycket tacksam om du kunde posta ett schema samt lite excempelkod (AVR?) :wink:

BTW: Vilken sändarmodul kör du med?

Ett tips: De billiga 3-pack med dimmrar / switchar som bland annat Rusta säljer skall enligt utsago vara helt kompatibla med Nexa systemet.

/Croaton
Användarvisningsbild
chille
Inlägg: 2469
Blev medlem: 25 juni 2003, 20:54:41
Ort: Stockholm
Kontakt:

Inlägg av chille »

Självklart kommer jag posta exempelkod och scheman. Funderar på om man skulle knåpa ihop en liten sändare med en Tiny15 och MAX232 på, som man kopplar till serieporten. Skulle ju kunna sälja färgidbyggda för typ 200-250:- för dom som inte vill bygga själv. Är säkert många som har typ hemmabio och sånt som kanske inte är så sugna på att löda :)

Jag kör med Kjell's 433MHz sändarmodul för 99kr.

Jo, en kompis har tjatat väldigt mycket om ett 3-pack som finns på Clasisjön. 200:- för tre mottagare och en sändare. Får nästan åka runt i alla affärer och köpa en av varje, så man kan få sändaren kompatibel med allt. :lol:

Fast roligast är nog IKEA. För de går ju att styra till direktvärden, vilket inte de andra gör :)

Aja, nu är det en ny dag. Får se om jag kan ränsa upp koden och posta lite. Eller jag kanske hinner få igång IKEA-grejerna :)
Användarvisningsbild
chille
Inlägg: 2469
Blev medlem: 25 juni 2003, 20:54:41
Ort: Stockholm
Kontakt:

Inlägg av chille »

Nu får jag verkligen inte ihop det här.

Såhär ser det ut när man skickar en "On" på kanal 1:
Bild

Efter lite trixande skickade min kod det här:
Bild

Men det stämmer inte, för egentligen skulle jag skicka det här:
Bild
Kolla noga så ser ni att det är en bit som är lite annorlunda placerad. Jag förstår inte varför :(

Jag provade även att tweak:a in så den skulle skicka i rätt hastighet. Men då insåg jag att det är något lurt med vad den skickar. Pulserna verkar ju ha 50% duty cycle. En kort puls för en 0:a och en lång för en 1:a, ser det ju ut som. Dock så verkar det ju inte alltid vara exakt 50% duty cycle. Eller så är det olika långa bitar eller nått. Jämför den här bilden med den första så får ni se. Hela paketet är exakt lika långt, men bitarna i slutet är lite annorlunda placerade.
Bild

Vad är det för typ av kodning som används för att skicka datan? Jag kanske har gissat mig till fel lösning? :)
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Det är olika långa pulser. Nu är det ett tag sedan jag skrev koden som du fick, men jag vill minnas att det var 25% låg följt av 75% hög för etta och 75% låg och 25% hög för nolla eller precis tvärtom. Alltså i % av periodtiden för varje databit (12 st). Däremellan ligger dom 13 utfyllnadsbitarna som var antingen noll eller ett allihopa.

Edit: Periodtiden för varje bit är alltstå alltid lika lång, men dutycykeln ändrar sig beroende på om det är nolla eller etta.
Användarvisningsbild
chille
Inlägg: 2469
Blev medlem: 25 juni 2003, 20:54:41
Ort: Stockholm
Kontakt:

Inlägg av chille »

Japp, det du skriver stämmer perfekt för Nexa. Men den har jag redan fått igång, så det kapitlet är avklarat.

Om du kollar på mina screenshots så ser du att det är olika längder på bitarna. Dock verkar alla ha 50% duty cycle.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Ok. Så detta var inte Nexan då, om jag förstår dig rätt. Var kanske inte helt tydligt i det inlägget. Är det IKEA-modulen då, eller vilken är det?

Vet du vad det är för sändarkrets i originalfjärren?

Jag håller med om att IKEA-grunkan är intressant iom att den verkar gå att absolutstyra. Det är den absolut största nackdelen med dom andra och gör dom tyvärr mer eller mindre värdelösa för centralstyrning.
Användarvisningsbild
chille
Inlägg: 2469
Blev medlem: 25 juni 2003, 20:54:41
Ort: Stockholm
Kontakt:

Inlägg av chille »

Nä, jag kom på att jag var nog lite otydlig. Det var typ 3-4 inlägg tidigare jag nämde att jag var klar med Nexa och numera gått över till IKEA. Dock har jag lyckats styra IKEA'n nu. Men jag kan verkligen inte få fram logiken i protokollet. Datan verkar vara kodat på något skumt sätt. För rätt som det är så kommer det en bit som ser helt annorlunda ut. Jag antar att den där "annorlunda" biten betyder något speciellt. Typ som om det är trinärt eller något.


Kollar man riktigt noga är det långa eller korta pulser mer 50% duty cycle, fram tills de 4 sista. Där stämmer inte mönstret in längre.
Screenshot

Försöker man koda av det till 1:or och 0:or så blir det bara konstigt.
Protokoll
Senast redigerad av chille 19 juni 2006, 11:20:09, redigerad totalt 1 gång.
matte_amal
Inlägg: 21
Blev medlem: 18 december 2004, 18:00:17
Kontakt:

Inlägg av matte_amal »

Det här var intressant, har själv haft planer på att ta en fjärrkontroll och styra genom att kortsluta benen på knapparna. Skulle göra det antingen med skrivarporten eller med en AVR om man nån gång fick tummen ur och köpte ett startkit.

Men din lösning är ju mycket snyggare, tyvärr kan jag inte tillföra något till ditt problem.

Föresten vad inbär det att man kan "absolutstyra" Ikeas?
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Det innebär att du kan skicka abolutvärden, t.ex 40%, till den för direkt inställning istället för att stega upp och ner som dom flesta har. Det finns då givetvis ett förutbestämt antal steg man kan styra till.

Att stega upp och ner är värdelöst när man vill centralstyra sakerna eftersom man oftast inte har en aning om vilket dimmervärde som är inställt från början och sedan måstre man gå på tid för att få ungefär rätt nivå. Har man hållit på sådär några ggr fram o tillbaka så har man definitivt ingen koll på värdet längre. Ungefär som att navigera med död räkning. Alla förändringar är reletivt det första utgångsvärdet och alla fel däremellan adderas.

Hmm. Då kanske man skulle se om det fortfarande finns några såna IKEA-dimmrar kvar. Det är precis den funktionen jag har letat efter eftersom Nexa-dimmrarna tyvärr inte är absolutstyrda. Egentligen skulle dom ju kunna varit det. Protokollet verkar ha plats för 4 styrbitar och det skulle ju bli 16 nivåer. Räcker ju alldeles utmärkt i dom flesta fall.
Skriv svar