NEXA mottagare
NEXA mottagare
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
µ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
Re: NEXA mottagare
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
// Marcus
Re: NEXA mottagare
Har nu fått mottagaren att förstå PROOVE-2000 formatet.
Nu skall bara µP i lampan tolka informationen till kommandon
// Marcus
Nu skall bara µP i lampan tolka informationen till kommandon
// Marcus
- PHermansson
- EF Sponsor
- Inlägg: 4340
- Blev medlem: 22 december 2004, 00:46:38
- Ort: Särestad Grästorp
- Kontakt:
-
- Inlägg: 8055
- Blev medlem: 18 januari 2009, 00:48:24
- Ort: Alvesta, Småland
Re: NEXA mottagare
Riktigt sjysst!
Håller stenkoll på detta med och allt resultat hoppas jag är öppet
Håller stenkoll på detta med och allt resultat hoppas jag är öppet
Re: NEXA mottagare
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).
Pdf-fil hur det hela är uppbyggt
Kretsschema:
Layout:
Måste "qouta" koden mera innan jag släpper den
Håll till godo så länge.
// Marcus
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).
Pdf-fil hur det hela är uppbyggt
Kretsschema:
Layout:
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.
-
- Inlägg: 2436
- Blev medlem: 28 januari 2007, 18:45:40
- Ort: Kungsbacka
-
- Inlägg: 8055
- Blev medlem: 18 januari 2009, 00:48:24
- Ort: Alvesta, Småland
Re: NEXA mottagare
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 :/
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 :/
Re: NEXA mottagare
Lite ytterligare förklaring:
Varje informationsbit skickas genom ett antal pulser som µP räknar och tolkar om till ett värde.
// Marcus
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.
-
- Inlägg: 8055
- Blev medlem: 18 januari 2009, 00:48:24
- Ort: Alvesta, Småland
Re: NEXA mottagare
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
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
Re: NEXA mottagare
Här kommer koden för er alla nyfikna personer som har suttit och väntat
Jag vet att den är skriven i BASIC, men det är det jag programmerar i.
// Marcus
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
// Marcus
- PHermansson
- EF Sponsor
- Inlägg: 4340
- Blev medlem: 22 december 2004, 00:46:38
- Ort: Särestad Grästorp
- Kontakt:
Re: NEXA mottagare
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...
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...