1 | /******************************************************************************
|
2 | Steckdosen Ansteuerung Hilfsroutinen intern
|
3 | *****************************************************************************/
|
4 | #define delay 31 //18 - 44 Grenzen
|
5 |
|
6 | void tx_ein(unsigned char anzahl) // Sender einschalten
|
7 | {
|
8 | RFM12_trans(0x8220);
|
9 | while (anzahl--) delay_10us(delay);
|
10 | }
|
11 | void tx_aus(unsigned char anzahl) // Sender auschalten
|
12 | {
|
13 | RFM12_trans(0x8200);
|
14 | while (anzahl--) delay_10us(delay);
|
15 | }
|
16 | void tx_null(void)
|
17 | { // Null ausgeben -___-___ 1000 1000
|
18 | tx_ein(1); tx_aus(3); tx_ein(1); tx_aus(3);
|
19 | }
|
20 | void tx_eins(void) // Floatzeichen -___---_ 1000 1110
|
21 | {
|
22 | tx_ein(1); tx_aus(3); tx_ein(3); tx_aus(1);
|
23 | }
|
24 | void tx_sync(void) // -______________________ 1:31
|
25 | {
|
26 | tx_ein(1); tx_aus(31);
|
27 | }
|
28 | /******************************************************************************
|
29 | Funksteckdosen "ELRO" ansteuern extern
|
30 |
|
31 | steckdose(0x18,'D',1);
|
32 | 5stelliger Syscode "11000" = 0x18
|
33 | A-D wird in 5stelligen Einzelcode übersetzt
|
34 |
|
35 | *****************************************************************************/
|
36 | void steckdose(unsigned char syscode, unsigned char funk_nr, unsigned char on_off)
|
37 | {
|
38 | unsigned char i,j,n;
|
39 | unsigned int code, temp;
|
40 |
|
41 | if (on_off == 0) on_off = 0b00000010; // |= 0b00000010 aus "F0"
|
42 | else on_off = 0b00000001; // |= 0b00000001 ein "0F"
|
43 |
|
44 | switch (funk_nr)
|
45 | {
|
46 | case 'A': funk_nr = 0b00001111; break;
|
47 | case 'B': funk_nr = 0b00010111; break;
|
48 | case 'C': funk_nr = 0b00011011; break;
|
49 | case 'D': funk_nr = 0b00011101; break;
|
50 | default: return;
|
51 | }
|
52 |
|
53 | // 8421 8421 8421 8421
|
54 | // SSSS SFFF FFxx
|
55 | code = (unsigned int) syscode<<7 | funk_nr<<2 | on_off; // 12 Bit zusammensetzen
|
56 |
|
57 | for (n=0;n<3;n++) // x Wiederholungen
|
58 | {
|
59 | delay_ms(10);
|
60 | for (i=0;i<2;i++) // x Wiederholungen
|
61 | {
|
62 | temp = code; // nur mit temp. Variablen arbeiten
|
63 | for (j=0;j<12;j++)
|
64 | {
|
65 | if (temp & 0x0800) // Bit 12 gesetzt ?
|
66 | tx_eins();
|
67 | else
|
68 | tx_null();
|
69 |
|
70 | temp<<=1; // ein Bit weiterschieben
|
71 | }
|
72 | tx_sync(); // Sync Impuls
|
73 | }
|
74 | }
|
75 |
|
76 | }
|