47 килоОм — всем!

Любитель и профессионал, выбери свой номинал!

Еще проект на модулях RFM (используем RFM42 или RFM43 и Atmega8)

Индикатор напряжения для авиамодели.

Параметры
Габариты – 22*25*8 мм
Напряжение питания – 5-25 вольт
Диапазон рабочих частот – частоты LPD, PMR, FRS, GMRS стандартов.
Тип питающего АКБ – LiPo , автоопределение
Выходная мощность – до 50 мВт
Число одновременно работающих радиочастот — 3 (канал контроля батареи, канал поиска, канал передачи данных ), програмируются при изготовлении.

Cамостоятельная сборка.

Радиоиндикатор является несложным устройством, доступным для самостоятельного изготовления . Для успешной сборки кроме комплекта деталей и паяльника необходим программатор микросхемы AtMega8. Схем и ПО для программирования в интернете представлено великое множество, можно использовать любые доступные.

Устройство радиоиндикатора.

Радиомаяк – радиоиндикатор батареи состоит из следующих основных узлов
Стабилизатор питания DA1
Микропроцессор DD1
Радиомодуль M1
Цепь замера напряжения R1,R2,C1

Перечень элементов
DA1 — KF33 или LP2950CZ-3.3 (внимание — другой тип корпуса!)
DD1 — Atmega8-16AU или Atmega8L-8AU
M1 — RFM42-433-S1 или S2
C1,C2,C3 – 0,1 мкф * 50 вольт керамический
C4 -10 мкф* 16 вольт электролитический
R1 – 1 ком
R2 — 8,2 ком

Проект развивается и поддерживается сайтом www.1slon.ru, там же можно скачать и исходные тексты и прошивки.

Добавлено:  21.11.2012 г.

А вот исходный код программы (если хотите скопировать себе, воспользуйтесь лупой в правом верхнем углу окошка ↓ ):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.7 beta 5 Professional
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
 
Project : 
Version : 
Date    : 18.06.2010
Author  : }{вост {лона                            
Company : zoo                            
Comments: 
 
Работает на трех каналах одновременно
1) Как обычный индикатор, только без несущей и с индикацией каждой минуты 
2) Тональные посылки с увеличивающейся мощностью.
3) Цифровые посылки
 
Chip type           : ATmega8
Clock frequency     : 8,00000 MHz
Memory model        : Tiny
External SRAM size  : 0
Data Stack size     : 16
*****************************************************/
 
#include <mega8.h>
#include <delay.h>
#include <spi.h>    
 
#define u8  unsigned char
#define u16 unsigned int
#define s16 signed int
 
#define NSEL   PORTB.2
#define SHUTDOWN  PORTB.1  
#define IRQ     PIND.7
 
#define SN 1
 
#define CH_BATT 433.550
#define CH_FIND 434.550
#define CH_DIGI 866.700
 
#define spi8x spi
 
bit time=0;
char tx_buf[64];
unsigned int u_battery = 512;
 
flash char RfSettingsA []={0x3B, 0x34, 0x02, 0x75, 0x25, 0x05, 0xEA, 0x4E, 0xA5, 0x28, 0x06, 0x00, 0x80}; //DR: 4.8kbps, DEV: +-4kHz, BBBW: 25.3kHz
 
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
static u16 tmp;
// каждые 65 535 микросекунд 
// 1 секунда = 1 000 000 / 65535 = 15.26
// 1 минута = 15.26*60=915
tmp++;
if (tmp== 915 ) {
                 tmp=0;
                 time=1;
                 }
 
}
 
#define ADC_VREF_TYPE 0x40
 
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
 
/*
//  программный ЭСПИАЙ
void spi8x (char a)
{char n;
for (n=0;n<8;n++)
 {      delay_us(2); 
        if (a & 0x80) MOSI=1;
        else MOSI=0;
        a<<=1;
        delay_us(2);
        SCK=1;
        delay_us(2);
        SCK=0;
        delay_us(2); 
 }
}  
 */
 
 //
 char RFXX_WRT_CMD(unsigned int aCmd)
{
char spi_data;
NSEL=0;
spi_data=(char) (aCmd>>8);
spi_data=spi_data | 0x80;
spi8x(  spi_data );
spi8x((char)(aCmd & 0x00FF));
NSEL=1; 
return 1;
} 
 
 char RFXX_READ_CMD(unsigned int aCmd)
{
char spi_data;
NSEL=0;
spi( (char) (aCmd>>8) );
spi_data=spi((char)(aCmd & 0x00FF));
NSEL=1; 
return spi_data;
} 
 
void set_power ( char power)
{
// ONLY RFM 42 !!!!!!!!!!!!!!!
if (power>3)power=3;
RFXX_WRT_CMD(0x6D00+(int)power);  
}
 
/*
void beep (char tone, char len)
{
char a;               
RFXX_WRT_CMD(0x0701);    // выключить передатчик
RFXX_WRT_CMD(0x6e00+(int)tone);     // + tx data rate      0x2752*1000/2097152=4.8 kbit
RFXX_WRT_CMD(0x6fff);     // + tx data rate
RFXX_WRT_CMD(0x3e00);   // paket lendht 0 byte
RFXX_WRT_CMD(0x3080);   //data acess control     No CRC No TX handling
RFXX_WRT_CMD(0x3308);   // header control  No header, fix pkt len
RFXX_WRT_CMD(0x7206);   // deviation   6*625=3750 hz
RFXX_WRT_CMD(0x3400+(int)len); //preamble lenght *4 period
RFXX_WRT_CMD(0x0701);
for (a=0;a<3;a++) {RFXX_WRT_CMD(0x7FAA);}
RFXX_WRT_CMD(0x0709);    // начать передачу режим TX  
// watch=1; // для контроля за зависанием
// while (IRQ){} //ждем окончания передачи
// RFXX_WRT_CMD(0x0701);    // выключить передатчик
}
*/
void beep (char tone, int len)
{
int a;               
RFXX_WRT_CMD(0x0701);    // выключить передатчик  
RFXX_WRT_CMD(0x7122);    // modulation mode control   !!!!!!22!!!!!!!!
RFXX_READ_CMD(0x0300); // сбросить прерывания
RFXX_READ_CMD(0x0400);
RFXX_WRT_CMD(0x6e00+(int)tone);     // tx data rate - частота тона     0x2752*1000/2097152=4.8 kbit  
//RFXX_WRT_CMD(0x6e0A);     // tx data rate - частота тона     0x2752*1000/2097152=4.8 kbit  
 
RFXX_WRT_CMD(0x6fff);     // + tx data rate
RFXX_WRT_CMD(0x3e01);   // paket lendht 0 byte
//RFXX_WRT_CMD(0x3080);   //data acess control     No CRC No TX handling
//RFXX_WRT_CMD(0x3308);   // header control  No header, fix pkt len   
RFXX_WRT_CMD(0x308C);   //data acess control     No CRC No TX handling
RFXX_WRT_CMD(0x3318);   // header control  No header, fix pkt len   
 
RFXX_WRT_CMD(0x7203);   // deviation   6*625=3750 hz
//RFXX_WRT_CMD(0x3400+(int)len); //preamble lenght *4 period  
RFXX_WRT_CMD(0x3400+(unsigned int)len); //preamble lenght *4 period  
 
RFXX_WRT_CMD(0x0803);  // clear fifo rx + tx
RFXX_WRT_CMD(0x0800);  //
RFXX_WRT_CMD(0x0504);  // irq - after send packet
for (a=0;a<3;a++) {RFXX_WRT_CMD(0x7FAA);}
RFXX_WRT_CMD(0x0709);    // начать передачу режим TX  
// watch=1; // для контроля за зависанием
 while (IRQ){} //ждем окончания передачи
//for (a=0; a<len; a++) delay_ms(1);
//delay_ms(300);
 
RFXX_WRT_CMD(0x0701);    // выключить передатчик    
delay_ms(10);
RFXX_WRT_CMD(0x0700);    // выключить передатчик    
 
}
 
void send_pkt (void)
{
char f,crc;
 
        tx_buf[0]=SN;    // серийный номер системы
        tx_buf[1]=0x07;  // 0000 0111 присутствует напряжение, бародатчик, гпс 
        tx_buf[2]=0;     // тип данных в пакете - резерв
        tx_buf[3]=0;     // резерв
        tx_buf[4]=0;     // флаги - (ап-доун и пр.)резерв
 
        tx_buf[5]=(char)(u_battery>>8);
        tx_buf[6]=(char)u_battery;
 
    //    f_hi=(unsigned int)baroalt;
    //    tx_buf[7]=(char)(f_hi>>8);
    //    tx_buf[8]=(char)f_hi;            
 
RFXX_WRT_CMD(0x0701);    // выключить передатчик 
RFXX_READ_CMD(0x0300);
RFXX_READ_CMD(0x0400);
RFXX_WRT_CMD(0x3e08);   // paket lendht 8 byte
RFXX_WRT_CMD(0x308F);   //data acess control  ПРОВЕРИТЬ     old 8c (hand enable RX+TX crc OFF)
RFXX_WRT_CMD(0x3310);   // header control   (18)  ПРОВЕРИТЬ    old 42   1 byte header 1 byte sync fix pkt lenght 
RFXX_WRT_CMD(0x6e00+RfSettingsA[7]);     // + tx data rate      0x2752*1000/2097152=4.8 kbit
RFXX_WRT_CMD(0x6f00+RfSettingsA[8]);     // + tx data rate
RFXX_WRT_CMD(0x7000+RfSettingsA[9]);    // + modulation mode control
RFXX_WRT_CMD(0x7122);    // modulation mode control   !!!!!!22!!!!!!!!
RFXX_WRT_CMD(0x7200+RfSettingsA[0x0A]);   // deviation   48 - 40khz   0x48*625=45000 hz  8*625=5000 hz
RFXX_WRT_CMD(0x3464); //preamble lenght *4 period = 8 байт
RFXX_WRT_CMD(0x3e00+50);   // set paket lendht 
RFXX_WRT_CMD(0x0803);  // clear fifo rx + tx
RFXX_WRT_CMD(0x0800);  //
 
 crc=0;
 for (f = 0; f<50; f++){RFXX_WRT_CMD(0x7f00+tx_buf[f]); crc=crc^tx_buf[f];}   // забить в модуль собраный пакет
 RFXX_WRT_CMD(0x7f00+crc);
// TEST   
 
RFXX_WRT_CMD(0x0504);  // irq - after send packet
RFXX_WRT_CMD(0x0709);    // начать передачу режим TX  
// watch=1; // для контроля за зависанием
while (IRQ){} //ждем окончания передачи
RFXX_WRT_CMD(0x0701);    // выключить передатчик
}
 
// ------------------------------------------------------------------------------
//базовая частота в мегагерцах (например 433.920)
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.7 beta 5 Professional
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : 
Version : 
Date    : 18.06.2010
Author  : }{вост {лона                            
Company : zoo                            
Comments: 

Работает на трех каналах одновременно
1) Как обычный индикатор, только без несущей и с индикацией каждой минуты 
2) Тональные посылки с увеличивающейся мощностью.
3) Цифровые посылки

Chip type           : ATmega8
Clock frequency     : 8,00000 MHz
Memory model        : Tiny
External SRAM size  : 0
Data Stack size     : 16
*****************************************************/

#include <mega8.h>
#include <delay.h>
#include <spi.h>    

#define u8  unsigned char
#define u16 unsigned int
#define s16 signed int

#define NSEL   PORTB.2
#define SHUTDOWN  PORTB.1  
#define IRQ     PIND.7

#define SN 1

#define CH_BATT 433.550
#define CH_FIND 434.550
#define CH_DIGI 866.700

#define spi8x spi

bit time=0;
char tx_buf[64];
unsigned int u_battery = 512;

flash char RfSettingsA []={0x3B, 0x34, 0x02, 0x75, 0x25, 0x05, 0xEA, 0x4E, 0xA5, 0x28, 0x06, 0x00, 0x80}; //DR: 4.8kbps, DEV: +-4kHz, BBBW: 25.3kHz

// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
static u16 tmp;
// каждые 65 535 микросекунд 
// 1 секунда = 1 000 000 / 65535 = 15.26
// 1 минута = 15.26*60=915
tmp++;
if (tmp== 915 ) {
                 tmp=0;
                 time=1;
                 }

}

#define ADC_VREF_TYPE 0x40

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

/*
//  программный ЭСПИАЙ
void spi8x (char a)
{char n;
for (n=0;n<8;n++)
 {      delay_us(2); 
        if (a & 0x80) MOSI=1;
        else MOSI=0;
        a<<=1;
        delay_us(2);
        SCK=1;
        delay_us(2);
        SCK=0;
        delay_us(2); 
 }
}  
 */

 //
 char RFXX_WRT_CMD(unsigned int aCmd)
{
char spi_data;
NSEL=0;
spi_data=(char) (aCmd>>8);
spi_data=spi_data | 0x80;
spi8x(  spi_data );
spi8x((char)(aCmd & 0x00FF));
NSEL=1; 
return 1;
} 

 char RFXX_READ_CMD(unsigned int aCmd)
{
char spi_data;
NSEL=0;
spi( (char) (aCmd>>8) );
spi_data=spi((char)(aCmd & 0x00FF));
NSEL=1; 
return spi_data;
} 

void set_power ( char power)
{
// ONLY RFM 42 !!!!!!!!!!!!!!!
if (power>3)power=3;
RFXX_WRT_CMD(0x6D00+(int)power);  
}

/*
void beep (char tone, char len)
{
char a;               
RFXX_WRT_CMD(0x0701);    // выключить передатчик
RFXX_WRT_CMD(0x6e00+(int)tone);     // + tx data rate      0x2752*1000/2097152=4.8 kbit
RFXX_WRT_CMD(0x6fff);     // + tx data rate
RFXX_WRT_CMD(0x3e00);   // paket lendht 0 byte
RFXX_WRT_CMD(0x3080);   //data acess control     No CRC No TX handling
RFXX_WRT_CMD(0x3308);   // header control  No header, fix pkt len
RFXX_WRT_CMD(0x7206);   // deviation   6*625=3750 hz
RFXX_WRT_CMD(0x3400+(int)len); //preamble lenght *4 period
RFXX_WRT_CMD(0x0701);
for (a=0;a<3;a++) {RFXX_WRT_CMD(0x7FAA);}
RFXX_WRT_CMD(0x0709);    // начать передачу режим TX  
// watch=1; // для контроля за зависанием
// while (IRQ){} //ждем окончания передачи
// RFXX_WRT_CMD(0x0701);    // выключить передатчик
}
*/
void beep (char tone, int len)
{
int a;               
RFXX_WRT_CMD(0x0701);    // выключить передатчик  
RFXX_WRT_CMD(0x7122);    // modulation mode control   !!!!!!22!!!!!!!!
RFXX_READ_CMD(0x0300); // сбросить прерывания
RFXX_READ_CMD(0x0400);
RFXX_WRT_CMD(0x6e00+(int)tone);     // tx data rate - частота тона     0x2752*1000/2097152=4.8 kbit  
//RFXX_WRT_CMD(0x6e0A);     // tx data rate - частота тона     0x2752*1000/2097152=4.8 kbit  

RFXX_WRT_CMD(0x6fff);     // + tx data rate
RFXX_WRT_CMD(0x3e01);   // paket lendht 0 byte
//RFXX_WRT_CMD(0x3080);   //data acess control     No CRC No TX handling
//RFXX_WRT_CMD(0x3308);   // header control  No header, fix pkt len   
RFXX_WRT_CMD(0x308C);   //data acess control     No CRC No TX handling
RFXX_WRT_CMD(0x3318);   // header control  No header, fix pkt len   

RFXX_WRT_CMD(0x7203);   // deviation   6*625=3750 hz
//RFXX_WRT_CMD(0x3400+(int)len); //preamble lenght *4 period  
RFXX_WRT_CMD(0x3400+(unsigned int)len); //preamble lenght *4 period  

RFXX_WRT_CMD(0x0803);  // clear fifo rx + tx
RFXX_WRT_CMD(0x0800);  //
RFXX_WRT_CMD(0x0504);  // irq - after send packet
for (a=0;a<3;a++) {RFXX_WRT_CMD(0x7FAA);}
RFXX_WRT_CMD(0x0709);    // начать передачу режим TX  
// watch=1; // для контроля за зависанием
 while (IRQ){} //ждем окончания передачи
//for (a=0; a<len; a++) delay_ms(1);
//delay_ms(300);

RFXX_WRT_CMD(0x0701);    // выключить передатчик    
delay_ms(10);
RFXX_WRT_CMD(0x0700);    // выключить передатчик    

}

void send_pkt (void)
{
char f,crc;

        tx_buf[0]=SN;    // серийный номер системы
        tx_buf[1]=0x07;  // 0000 0111 присутствует напряжение, бародатчик, гпс 
        tx_buf[2]=0;     // тип данных в пакете - резерв
        tx_buf[3]=0;     // резерв
        tx_buf[4]=0;     // флаги - (ап-доун и пр.)резерв

        tx_buf[5]=(char)(u_battery>>8);
        tx_buf[6]=(char)u_battery;

    //    f_hi=(unsigned int)baroalt;
    //    tx_buf[7]=(char)(f_hi>>8);
    //    tx_buf[8]=(char)f_hi;            

RFXX_WRT_CMD(0x0701);    // выключить передатчик 
RFXX_READ_CMD(0x0300);
RFXX_READ_CMD(0x0400);
RFXX_WRT_CMD(0x3e08);   // paket lendht 8 byte
RFXX_WRT_CMD(0x308F);   //data acess control  ПРОВЕРИТЬ     old 8c (hand enable RX+TX crc OFF)
RFXX_WRT_CMD(0x3310);   // header control   (18)  ПРОВЕРИТЬ    old 42   1 byte header 1 byte sync fix pkt lenght 
RFXX_WRT_CMD(0x6e00+RfSettingsA[7]);     // + tx data rate      0x2752*1000/2097152=4.8 kbit
RFXX_WRT_CMD(0x6f00+RfSettingsA[8]);     // + tx data rate
RFXX_WRT_CMD(0x7000+RfSettingsA[9]);    // + modulation mode control
RFXX_WRT_CMD(0x7122);    // modulation mode control   !!!!!!22!!!!!!!!
RFXX_WRT_CMD(0x7200+RfSettingsA[0x0A]);   // deviation   48 - 40khz   0x48*625=45000 hz  8*625=5000 hz
RFXX_WRT_CMD(0x3464); //preamble lenght *4 period = 8 байт
RFXX_WRT_CMD(0x3e00+50);   // set paket lendht 
RFXX_WRT_CMD(0x0803);  // clear fifo rx + tx
RFXX_WRT_CMD(0x0800);  //

 crc=0;
 for (f = 0; f<50; f++){RFXX_WRT_CMD(0x7f00+tx_buf[f]); crc=crc^tx_buf[f];}   // забить в модуль собраный пакет
 RFXX_WRT_CMD(0x7f00+crc);
// TEST   

RFXX_WRT_CMD(0x0504);  // irq - after send packet
RFXX_WRT_CMD(0x0709);    // начать передачу режим TX  
// watch=1; // для контроля за зависанием
while (IRQ){} //ждем окончания передачи
RFXX_WRT_CMD(0x0701);    // выключить передатчик
}

// ------------------------------------------------------------------------------
//базовая частота в мегагерцах (например 433.920)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void set_full_freq(float freq)
{
u8 reg75,reg76, reg77,reg75out;
u16 tmp;
 
if (freq <480) {reg75=(freq/10)-24;  reg75out=reg75;       }
else           {reg75=(freq/20)-24;  reg75out=reg75 | 0x20;}
 
if ( freq < 480 ) tmp=(u16)(((freq/10)-reg75-24)*64000);
else              tmp=(u16)(((freq/20)-reg75-24)*64000);
 
reg76= (u8)(tmp>>8);
reg77= (u8)(tmp & 0x00FF);
 
RFXX_WRT_CMD(0x7500+reg75out);
RFXX_WRT_CMD(0x7600+reg76);     // carrier freq    310 + (0x6400/64000) =314.000 mhz
RFXX_WRT_CMD(0x7700+reg77);     // carrier freq    ((a*256)+b)/64000=0,4
 
}
//--------------------------------------------------------------------------------
// ????????? ????? ? ???????? ???????? (??? ?? ??????) ?? ?????? (???? 43 ??? -18) ????????
// сдвиг частоты со знаком, в килогерцах в верхнем диапазоне
void set_full_freq(float freq)
{
u8 reg75,reg76, reg77,reg75out;
u16 tmp;

if (freq <480) {reg75=(freq/10)-24;  reg75out=reg75;       }
else           {reg75=(freq/20)-24;  reg75out=reg75 | 0x20;}

if ( freq < 480 ) tmp=(u16)(((freq/10)-reg75-24)*64000);
else              tmp=(u16)(((freq/20)-reg75-24)*64000);

reg76= (u8)(tmp>>8);
reg77= (u8)(tmp & 0x00FF);

RFXX_WRT_CMD(0x7500+reg75out);
RFXX_WRT_CMD(0x7600+reg76);     // carrier freq    310 + (0x6400/64000) =314.000 mhz
RFXX_WRT_CMD(0x7700+reg77);     // carrier freq    ((a*256)+b)/64000=0,4

}
//--------------------------------------------------------------------------------
// ????????? ????? ? ???????? ???????? (??? ?? ??????) ?? ?????? (???? 43 ??? -18) ????????
// сдвиг частоты со знаком, в килогерцах в верхнем диапазоне
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
void set_offset_freq (s16 offset)
{
if (offset != 0) offset=(offset*32)/10;
if (offset >  512)  offset= 512; // 512*0.3125 khz = 160 khz
if (offset < -512)  offset=-512;
RFXX_WRT_CMD(0x7400+((offset >>      8)& 0x00FF) );  // freq offset
RFXX_WRT_CMD(0x7300+(    offset        & 0x00FF) );   // freq offset
//RFXX_READ_CMD(0x7300);  // freq offset
//RFXX_READ_CMD(0x7400);   // freq offset
}
//----------------------------------------------------------------------------------
void main(void)
{
// Declare your local variables here
 
char set, i,u,n_lipo;
unsigned int batt;
 
// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=Out Func4=In Func3=Out Func2=Out Func1=In Func0=In 
// State7=T State6=T State5=0 State4=T State3=0 State2=0 State1=T State0=T 
PORTB=0x00;
DDRB=0x2C;
 
// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTC=0x00;
DDRC=0x00;
 
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=P State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x80;
DDRD=0x00;
 
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;
 
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1000,000 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x02;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
 
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
 
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;
 
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;
 
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
 
// ADC initialization
// ADC Clock frequency: 250,000 kHz
// ADC Voltage Reference: AREF pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x85;
 
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 2000,000 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0x50;
SPSR=0x00;
 
// Global enable interrupts
#asm("sei")
 
NSEL=1;
SHUTDOWN=1;
delay_ms(500);
SHUTDOWN=0;
delay_ms(200);
 
RFXX_WRT_CMD(0x0600); // disable 2-nd interrupt
RFXX_WRT_CMD(0x0701); // set ready mode
RFXX_WRT_CMD(0x0900+116); // capacitor zq
RFXX_WRT_CMD(0x0a05); // clock for cpu 
RFXX_WRT_CMD(0x0bf4); // rxdata on gpio0
RFXX_WRT_CMD(0x0cef); // gpio
RFXX_WRT_CMD(0x0d00); // gpio
RFXX_WRT_CMD(0x0e00); // io
RFXX_WRT_CMD(0x0f70); //adc
RFXX_WRT_CMD(0x1000); // adc
RFXX_WRT_CMD(0x1200);  // temp
RFXX_WRT_CMD(0x1300); // temp
// handler
RFXX_WRT_CMD(0x308C);   //data acess control      old 8c (hand enable RX+TX crc OFF)
RFXX_WRT_CMD(0x3318);   // header control   (18)     old 42   1 byte header 1 byte sync fix pkt lenght
RFXX_WRT_CMD(0x34ff); //preamble lenght           old 40   теперь 20 бит
RFXX_WRT_CMD(0x3520);  //preamble detection control
RFXX_WRT_CMD(0x362d); //sync word
RFXX_WRT_CMD(0x37d4); //sync word  !! 37-й регистр это будет серийник передатчика
RFXX_WRT_CMD(0x3800);  //sync word
RFXX_WRT_CMD(0x3900);  //sync word
RFXX_WRT_CMD(0x3a31);   //header
RFXX_WRT_CMD(0x3b32);   //header
RFXX_WRT_CMD(0x3c33);   //header
RFXX_WRT_CMD(0x3d34);   //header
RFXX_WRT_CMD(0x3e02);   // paket lendht 12 byte
 
RFXX_WRT_CMD(0x6a0b);      //agc override
RFXX_WRT_CMD(0x6d07);      // tx power -      03 - full
 
RFXX_WRT_CMD(0x6e00+RfSettingsA[7]);     // + tx data rate      0x2752*1000/2097152=4.8 kbit
RFXX_WRT_CMD(0x6f00+RfSettingsA[8]);     // + tx data rate
 
//RFXX_WRT_CMD(0x6e05);     // + tx data rate      0x2752*1000/2097152=4.8 kbit
//RFXX_WRT_CMD(0x6fff);     // + tx data rate
 
RFXX_WRT_CMD(0x7000+RfSettingsA[9]);    // + modulation mode control
 
RFXX_WRT_CMD(0x7122);    // modulation mode control   !!!!!!22!!!!!!!!
RFXX_WRT_CMD(0x7200+RfSettingsA[0x0A]);   // deviation   48 - 40khz   0x48*625=45000 hz  8*625=5000 hz
 
RFXX_WRT_CMD(0x7553); //  band select  73 for 868 mhz       
 
RFXX_WRT_CMD(0x7900);     //+ hopping channel
RFXX_WRT_CMD(0x7a00);     //+ hopping step 10 khz
 
delay_ms(1000);
 
//===========================================================================================================================
//===================================================================================================================
// установка режимов передачи
//RFXX_WRT_CMD(0x7100);    // modulation mode control 20 -unmod 21 -ook 22 - fifo 23 -pn9 00 - mod via GPIO pin, unmod carrier
RFXX_WRT_CMD(0x7122);    //  22 - fifo 
 
RFXX_WRT_CMD(0x308C);   //data acess control      old 8c (hand enable RX+TX crc OFF)
//RFXX_WRT_CMD(0x3211);   // header control check 0 byte 0 byte
RFXX_WRT_CMD(0x3318);   // header control   (18)     old 42   1 byte header 1 byte sync fix pkt lenght
RFXX_WRT_CMD(0x34ff); //preamble lenght           old 40   теперь 20 бит
RFXX_WRT_CMD(0x3520);  //preamble detection control
RFXX_WRT_CMD(0x362d); //sync word
RFXX_WRT_CMD(0x37d4); //sync word  !! 
RFXX_WRT_CMD(0x3800);  //sync word
RFXX_WRT_CMD(0x3900);  //sync word
RFXX_WRT_CMD(0x3a31);   //header
RFXX_WRT_CMD(0x3b32);   //header
RFXX_WRT_CMD(0x3c33);   //header
RFXX_WRT_CMD(0x3d34);   //header
RFXX_WRT_CMD(0x3e02);   // paket lendht 12 byte
 
RFXX_WRT_CMD(0x0701);
 
set_full_freq (CH_DIGI);     
 
RFXX_WRT_CMD(0x0702);  
 
RFXX_WRT_CMD(0x7100);    // modulation mode control 20 -unmod 21 -ook 22 - fifo 23 -pn9 00 - mod via GPIO pin, unmod carrier 
RFXX_WRT_CMD(0x0709);
delay_ms(5000); 
RFXX_WRT_CMD(0x0701); 
 
set_full_freq (CH_BATT);     
 
RFXX_WRT_CMD(0x0702);  
 
RFXX_WRT_CMD(0x7100);    // modulation mode control 20 -unmod 21 -ook 22 - fifo 23 -pn9 00 - mod via GPIO pin, unmod carrier 
RFXX_WRT_CMD(0x0709);
delay_ms(5000); 
RFXX_WRT_CMD(0x0701);  
 
u_battery=(unsigned int)(((float)read_adc(7))*0.818);  
batt=(unsigned int)(((float)read_adc(7))*2.985);
                    // ???????????, ?????????? ? ????????? ???? ??????? 
if      (batt > (420*5) ) n_lipo=6; // 6 ???? 
else if (batt > (420*4) ) n_lipo=5; // 5 ????
else if (batt > (420*3) ) n_lipo=4; // 4 ????
else if (batt > (420*2) ) n_lipo=3; // 3 ????
else if (batt > (320*2) ) n_lipo=2; // 2 ???? 
else if (batt > (420*1) ) n_lipo=0; // 5 ????? ????
else                      n_lipo=1; // 1 ???? ??? 3 ??????    
 
set_full_freq (CH_BATT);
set_power (3);
 
if (n_lipo)
{  
for (i=0;i<n_lipo;i++)
       {
        beep (7, 0x40);
        delay_ms(100);
       }
delay_ms(1000);
for (i=0;i<n_lipo;i++)
       {
        beep (7, 0x40);
        delay_ms(100);
       }
delay_ms(1000);
for (i=0;i<n_lipo;i++)
       {
        beep (7, 0x40);
        delay_ms(100);
       }
}
else 
{
for (i=0;i<20;i++)
       {
        beep (6, 0x20);
        delay_ms(50);
       }
}
 
while(1)
{  
u_battery=(unsigned int)(((float)read_adc(7))*0.818);  // замер напряжения для звука  
batt=(unsigned int)(((float)read_adc(7))*2.985);      // замер напряжения для цифрю канала
 
if (n_lipo)
      {
      if       (batt < (300*(unsigned int)n_lipo) ){u=4;} 
      else  if (batt < (310*(unsigned int)n_lipo) ){u=3;} 
      else  if (batt < (320*(unsigned int)n_lipo) ){u=2;} 
      else  if (batt < (330*(unsigned int)n_lipo) ){u=1;}   
      else                                          u=0;
      }
else   { 
        if (batt < 430 ){u=3;} 
        else              {u=0;}
        } 
 
set_full_freq (CH_FIND); set_power (3); beep (9, 0xC0); delay_ms(100);// tone len
 
set_power (2); beep (9, 0x20); // tone len  
 
set_full_freq (CH_DIGI); set_power (3); send_pkt(); 
 
set_full_freq (CH_FIND); set_power (1); beep (9, 0x20);delay_ms(100); // tone len
 
set_power (0); beep (9, 0x20); // tone len
 
set_full_freq (CH_DIGI); set_power (3); send_pkt();  
 
set_full_freq (CH_BATT); set_power (3);
 
switch (u)
   {
   case 0: delay_ms(500); 
           if (time) {time=0;
                      beep (9, 0x40); 
                      delay_ms(100); 
                      beep (9, 0x40);
                      }  break;
   case 1: if (set){set=0; beep (5, 0xC0); }
           else    {set=1;                 delay_ms(500);}  break; 
   case 2: if (set){set=0; beep (7, 0xC0); }
           else    {set=1;                 delay_ms(500);} break;  
   case 3: beep (8, 0xC0); break;           
   default: beep (9, 0x40); delay_ms(100);
            beep (9, 0x40); delay_ms(100);
            beep (9, 0x40); delay_ms(100);
            beep (9, 0x40); delay_ms(100);  break;             
   }   
 
set_full_freq (CH_DIGI);  set_power (3); send_pkt();  
  } //end while 1
} // end main
void set_offset_freq (s16 offset)
{
if (offset != 0) offset=(offset*32)/10;
if (offset >  512)  offset= 512; // 512*0.3125 khz = 160 khz
if (offset < -512)  offset=-512;
RFXX_WRT_CMD(0x7400+((offset >>      8)& 0x00FF) );  // freq offset
RFXX_WRT_CMD(0x7300+(    offset        & 0x00FF) );   // freq offset
//RFXX_READ_CMD(0x7300);  // freq offset
//RFXX_READ_CMD(0x7400);   // freq offset
}
//----------------------------------------------------------------------------------
void main(void)
{
// Declare your local variables here

char set, i,u,n_lipo;
unsigned int batt;

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=Out Func4=In Func3=Out Func2=Out Func1=In Func0=In 
// State7=T State6=T State5=0 State4=T State3=0 State2=0 State1=T State0=T 
PORTB=0x00;
DDRB=0x2C;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=P State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x80;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1000,000 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x02;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x04;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 250,000 kHz
// ADC Voltage Reference: AREF pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x85;

// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 2000,000 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0x50;
SPSR=0x00;

// Global enable interrupts
#asm("sei")

NSEL=1;
SHUTDOWN=1;
delay_ms(500);
SHUTDOWN=0;
delay_ms(200);

RFXX_WRT_CMD(0x0600); // disable 2-nd interrupt
RFXX_WRT_CMD(0x0701); // set ready mode
RFXX_WRT_CMD(0x0900+116); // capacitor zq
RFXX_WRT_CMD(0x0a05); // clock for cpu 
RFXX_WRT_CMD(0x0bf4); // rxdata on gpio0
RFXX_WRT_CMD(0x0cef); // gpio
RFXX_WRT_CMD(0x0d00); // gpio
RFXX_WRT_CMD(0x0e00); // io
RFXX_WRT_CMD(0x0f70); //adc
RFXX_WRT_CMD(0x1000); // adc
RFXX_WRT_CMD(0x1200);  // temp
RFXX_WRT_CMD(0x1300); // temp
// handler
RFXX_WRT_CMD(0x308C);   //data acess control      old 8c (hand enable RX+TX crc OFF)
RFXX_WRT_CMD(0x3318);   // header control   (18)     old 42   1 byte header 1 byte sync fix pkt lenght
RFXX_WRT_CMD(0x34ff); //preamble lenght           old 40   теперь 20 бит
RFXX_WRT_CMD(0x3520);  //preamble detection control
RFXX_WRT_CMD(0x362d); //sync word
RFXX_WRT_CMD(0x37d4); //sync word  !! 37-й регистр это будет серийник передатчика
RFXX_WRT_CMD(0x3800);  //sync word
RFXX_WRT_CMD(0x3900);  //sync word
RFXX_WRT_CMD(0x3a31);   //header
RFXX_WRT_CMD(0x3b32);   //header
RFXX_WRT_CMD(0x3c33);   //header
RFXX_WRT_CMD(0x3d34);   //header
RFXX_WRT_CMD(0x3e02);   // paket lendht 12 byte

RFXX_WRT_CMD(0x6a0b);      //agc override
RFXX_WRT_CMD(0x6d07);      // tx power -      03 - full

RFXX_WRT_CMD(0x6e00+RfSettingsA[7]);     // + tx data rate      0x2752*1000/2097152=4.8 kbit
RFXX_WRT_CMD(0x6f00+RfSettingsA[8]);     // + tx data rate

//RFXX_WRT_CMD(0x6e05);     // + tx data rate      0x2752*1000/2097152=4.8 kbit
//RFXX_WRT_CMD(0x6fff);     // + tx data rate

RFXX_WRT_CMD(0x7000+RfSettingsA[9]);    // + modulation mode control

RFXX_WRT_CMD(0x7122);    // modulation mode control   !!!!!!22!!!!!!!!
RFXX_WRT_CMD(0x7200+RfSettingsA[0x0A]);   // deviation   48 - 40khz   0x48*625=45000 hz  8*625=5000 hz

RFXX_WRT_CMD(0x7553); //  band select  73 for 868 mhz       

RFXX_WRT_CMD(0x7900);     //+ hopping channel
RFXX_WRT_CMD(0x7a00);     //+ hopping step 10 khz

delay_ms(1000);

//===========================================================================================================================
//===================================================================================================================
// установка режимов передачи
//RFXX_WRT_CMD(0x7100);    // modulation mode control 20 -unmod 21 -ook 22 - fifo 23 -pn9 00 - mod via GPIO pin, unmod carrier
RFXX_WRT_CMD(0x7122);    //  22 - fifo 

RFXX_WRT_CMD(0x308C);   //data acess control      old 8c (hand enable RX+TX crc OFF)
//RFXX_WRT_CMD(0x3211);   // header control check 0 byte 0 byte
RFXX_WRT_CMD(0x3318);   // header control   (18)     old 42   1 byte header 1 byte sync fix pkt lenght
RFXX_WRT_CMD(0x34ff); //preamble lenght           old 40   теперь 20 бит
RFXX_WRT_CMD(0x3520);  //preamble detection control
RFXX_WRT_CMD(0x362d); //sync word
RFXX_WRT_CMD(0x37d4); //sync word  !! 
RFXX_WRT_CMD(0x3800);  //sync word
RFXX_WRT_CMD(0x3900);  //sync word
RFXX_WRT_CMD(0x3a31);   //header
RFXX_WRT_CMD(0x3b32);   //header
RFXX_WRT_CMD(0x3c33);   //header
RFXX_WRT_CMD(0x3d34);   //header
RFXX_WRT_CMD(0x3e02);   // paket lendht 12 byte

RFXX_WRT_CMD(0x0701);

set_full_freq (CH_DIGI);     

RFXX_WRT_CMD(0x0702);  

RFXX_WRT_CMD(0x7100);    // modulation mode control 20 -unmod 21 -ook 22 - fifo 23 -pn9 00 - mod via GPIO pin, unmod carrier 
RFXX_WRT_CMD(0x0709);
delay_ms(5000); 
RFXX_WRT_CMD(0x0701); 

set_full_freq (CH_BATT);     

RFXX_WRT_CMD(0x0702);  

RFXX_WRT_CMD(0x7100);    // modulation mode control 20 -unmod 21 -ook 22 - fifo 23 -pn9 00 - mod via GPIO pin, unmod carrier 
RFXX_WRT_CMD(0x0709);
delay_ms(5000); 
RFXX_WRT_CMD(0x0701);  

u_battery=(unsigned int)(((float)read_adc(7))*0.818);  
batt=(unsigned int)(((float)read_adc(7))*2.985);
					// ???????????, ?????????? ? ????????? ???? ???????	
if      (batt > (420*5) ) n_lipo=6; // 6 ???? 
else if (batt > (420*4) ) n_lipo=5; // 5 ????
else if (batt > (420*3) ) n_lipo=4; // 4 ????
else if (batt > (420*2) ) n_lipo=3; // 3 ????
else if (batt > (320*2) ) n_lipo=2; // 2 ???? 
else if (batt > (420*1) ) n_lipo=0; // 5 ????? ????
else                      n_lipo=1; // 1 ???? ??? 3 ??????    

set_full_freq (CH_BATT);
set_power (3);

if (n_lipo)
{  
for (i=0;i<n_lipo;i++)
       {
        beep (7, 0x40);
        delay_ms(100);
       }
delay_ms(1000);
for (i=0;i<n_lipo;i++)
       {
        beep (7, 0x40);
        delay_ms(100);
       }
delay_ms(1000);
for (i=0;i<n_lipo;i++)
       {
        beep (7, 0x40);
        delay_ms(100);
       }
}
else 
{
for (i=0;i<20;i++)
       {
        beep (6, 0x20);
        delay_ms(50);
       }
}

while(1)
{  
u_battery=(unsigned int)(((float)read_adc(7))*0.818);  // замер напряжения для звука  
batt=(unsigned int)(((float)read_adc(7))*2.985);      // замер напряжения для цифрю канала

if (n_lipo)
      {
      if       (batt < (300*(unsigned int)n_lipo) ){u=4;} 
      else  if (batt < (310*(unsigned int)n_lipo) ){u=3;} 
      else  if (batt < (320*(unsigned int)n_lipo) ){u=2;} 
      else  if (batt < (330*(unsigned int)n_lipo) ){u=1;}   
      else                                          u=0;
      }
else   { 
        if (batt < 430 ){u=3;} 
        else              {u=0;}
        } 

set_full_freq (CH_FIND); set_power (3); beep (9, 0xC0); delay_ms(100);// tone len

set_power (2); beep (9, 0x20); // tone len  

set_full_freq (CH_DIGI); set_power (3); send_pkt(); 

set_full_freq (CH_FIND); set_power (1); beep (9, 0x20);delay_ms(100); // tone len

set_power (0); beep (9, 0x20); // tone len

set_full_freq (CH_DIGI); set_power (3); send_pkt();  

set_full_freq (CH_BATT); set_power (3);

switch (u)
   {
   case 0: delay_ms(500); 
           if (time) {time=0;
                      beep (9, 0x40); 
                      delay_ms(100); 
                      beep (9, 0x40);
                      }  break;
   case 1: if (set){set=0; beep (5, 0xC0); }
           else    {set=1;                 delay_ms(500);}  break; 
   case 2: if (set){set=0; beep (7, 0xC0); }
           else    {set=1;                 delay_ms(500);} break;  
   case 3: beep (8, 0xC0); break;           
   default: beep (9, 0x40); delay_ms(100);
            beep (9, 0x40); delay_ms(100);
            beep (9, 0x40); delay_ms(100);
            beep (9, 0x40); delay_ms(100);  break;             
   }   

set_full_freq (CH_DIGI);  set_power (3); send_pkt();  
  } //end while 1
} // end main

 

комментария 2 к статье “Еще проект на модулях RFM (используем RFM42 или RFM43 и Atmega8)”

  1. Еле нашел ссылку на прошивку!
    На том сайте она уж очень глубоко спрятана.
    Добавьте здесь. Пусть будет: http://www.1slon.ru/faq.php?cat_id=5

  2. Конечно, пусть будет.
    Пожалуй, прошивку с исходником добавлю в заметку (чтоб не потерялись).

Написать ответ

Оставте свой комментарий
  1. (Обязательно для заполнения)
  2. (Необходим правильный E-mail)
  3. (Обязательно для заполнения)
  4. Вы можете отправить этот текст
  5. Captcha
 

Хостинг «Джино». Получи утюг в подарок