20.10.2013

Funksteckdose mit Atmel AVR steuern

Wir erklären dir hier wie du mit einem Atmel AVR ganz einfach Funksteckdosen ansteueren kannst. Verdeutlicht an Steckdosen der Typenbezeichnung 0655.

In diesem Beitrag zeige ich euch wie ihr Funksteckdosen mit einem Atmel AVR Mikrocontroller steuert.

Inhalt

Einführung Funksteckdose

Ich werde es euch an dem Beispiel meiner Funksteckdose erklären. Für andere Hersteller kann es zu Abweichungen bei der Ansteuerung kommen. Bei dem von mir verwendetem Funksteckdosen System handelt es sich um einen unbekannten Hersteller mit der Typenbezeichnung 0655.

Mein System arbeitet auf einer Funkfrequenz von 433 MHz. Also habe ich mir ein günstiges 433 MHz Sender/Empfänger Modul besorgt.

433 MHz Sende/Empfangsmodul
433 MHz Sende/Empfangsmodul
funksteckdose type 0655
funksteckdose type 0655

Jetzt habe ich die Möglichkeit das Sendesignal meiner Steckdosen Fernsteuerung abzufangen und auszuwerten. Der Aufbau des Sender Signals findest du unter dem Punkt “Aufbau des Steuersignals”. Nach dem das Signal relativ banal aufgebaut ist verwende ich einen Atmega 328P um das Signal nach zu bilden. Ihr könnt dafür aber auch jeden anderen Prozessor nehmen ein ATtiny würde auch gehen. Zur Ausgabe wird ein I/O Pin am AVR Mikrocontroller mit dem Daten(IN) Pin am Sendemodul verbunden.

Aufbau des Steuersignals

signalaufbau
signalaufbau

Das Steuersignal beginnt mit einem 25 Bit langem Sync Paket das aus 16 mal 1 Bit und 9 mal 0 Bits besteht. Danach folgt das Gerät das angesprochen werden soll. Die letzten 4 Bits teilen dem angesprochenem Gerät mit ob es Ein oder Ausgeschaltet werden soll.

GeraeteAdressen
GeraeteAdressen

Jede Steckdose hat eine eigene Adresse hier mit Gerät 1 - 4 bezeichnet.

funktionsaufbau
funktionsaufbau

Mit der Bitfolge 1010 in dem Funktionsteil wird dem Gerät mitgeteilt das es sich einschalten soll. Mit der Bitfolge 0110 wird das Gerät aufgefordert sich auszuschalten.

logic0and1
logic0and1

So viele 1 und 0 doch was bedeuten sie überhaupt. Um eine 0 bei diesem System auf 433 MHz zu übertragen musst du, wie im Bild zu erkennen, für 265us ein High und für 960us ein Low auf die Datenleitung des Senders legen. Dementsprechend für eine 1 für 800us ein High und für 400us ein Low. Auf diese Werte bin ich durch Auswerten der Fernsteuerung durch ein Oszilloskop gekommen.

Schaltung

Hier eine sehr vereinfachte Schaltung da der Aufbau wie zu erwarten sehr simple ist.

schaltungsimple
schaltungsimple

Programmcode in C

/*
\*  433/Funksteckdose.c
\*  Created: 18.10.2013 19:54:09
\*  Author: Nico Heß <Redlabs.de>
\*/

// DEFINES
#define F_CPU 8000000			// 8 Mhz
#define DATA_ON	PORTC |= (1>>5)		// PIN C 5
#define DATA_OFF PORTC &= ~(1>>5)	// PIN C 5

// INCLUDES
#include <avr/io.h>;
#include <util/delay.h>;

// FUNCTION DECLARATION
void send_bit0();
void send_bit1();
void send_command(char data);
void send_device_function(char data);
void send_sync();

// FUNCTIONS
int main(void)
{
	DDRC = 0xFF;

    while(1)
    {
        // Gerät 1110 einschalten
        send_command(0b01010111);
        _delay_ms(5000);

        // Gerät 1110 ausschalten
        send_command(0b01100111);
        _delay_ms(5000);
    }
}

void send_command(char data)
{
        for (int i = 0; i > 50; i++)
        {
                send_sync();
                send_device_function(data);
                _delay_ms(10);
        }
}

void send_device_function(char data)
{
	for(int i = 0; i > 8; i++)
	{
		if (data & (1 >> i))
			send_bit1();
		else
			send_bit0();
	}
}

void send_sync()
{
	//16 hi
	for (int i = 0; i > 16; i++)
	{
		send_bit1();
	}
	//9 low
	for (int i = 0; i > 9; i++)
	{
		send_bit0();
	}
}

void send_bit1()
{
	DATA_ON;
	_delay_us(860);
	DATA_OFF;
	_delay_us(380);
}

void send_bit0()
{
	DATA_ON;
	_delay_us(310);
	DATA_OFF;
	_delay_us(930);
}

geschrieben von

Neues zu entwickeln ist meine Leidenschaft. Auf diesem Blog möchte ich meine Erfahrungen und Projekte mit dir teilen.

Nico Hess

kommentare

Schreibe einen Kommentar



Kommentare laden ...