Например TDA7294

Форум РадиоКот • Просмотр темы - RFM22B
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб мар 30, 2024 04:32:25

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 64 ]    , , , 4
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Вт дек 10, 2013 19:18:41 
Первый раз сказал Мяу!

Зарегистрирован: Пн дек 10, 2012 10:48:25
Сообщений: 24
Рейтинг сообщения: 0
Подскажите пжлста:

1. Значительно ли увеличится радиус действия модулей, если снизить скорость передачи с 2,4 до 0,123 kbps?
2. Программировать скорость передачи надо и в RX и в ТХ модуле?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Пн дек 15, 2014 10:48:49 
Родился

Зарегистрирован: Сб май 17, 2014 15:29:41
Сообщений: 3
Рейтинг сообщения: 0
D.i.M.K.i.N. писал(а):
Подскажите пжлста:

1. Значительно ли увеличится радиус действия модулей, если снизить скорость передачи с 2,4 до 0,123 kbps?
2. Программировать скорость передачи надо и в RX и в ТХ модуле?

1) На счёт конкретных цифр сказать сложно, увеличение дальности связи получается косвенным путём. Поясню - при уменьшении битрейта можно уменьшить девиацию частоты, уменьшение девиации частоты позволяет уменьшить полосу пропускания BI фильтра, которая в свою очередь увеличит чувствительность приёмника судя по даташиту на SI4430/31/32 (стр. 9)
при модуляции GFSK датарейте в 2 кБод девиации в 5 кГц чувствительность -121dBm
при модуляции GFSK датарейте в 40 кБод девиации в 20 кГц чувствительность -108dBm
в вашем случае на скорости 2,4кБод вы находитесь практически у максимальной чувствительности. при условии правельной настройки фильтра.
2)Скорость должна быть одинаковой и на приёмнике и на передатчике, иначе передатчик будет модулировать информацию с одной длительностью бита, а демодулятор приёмника будет ожидать другую длительность бита.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Вс янв 04, 2015 16:24:28 
Открыл глаза
Аватар пользователя

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Чт фев 21, 2013 22:19:35
Сообщений: 62
Рейтинг сообщения: 0
Доброе время суток. А не подскажите, по этому модулю может где видели код на Bascom


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: RFM22B
СообщениеДобавлено: Пт июн 01, 2018 01:32:14 
Родился

Зарегистрирован: Вт апр 03, 2012 12:49:34
Сообщений: 3
Рейтинг сообщения: 0
Здравствуйте! У меня собран приёмник на базе rfm23bp и Atmega128. И с ним у меня проблемы. Я делаю новый приёмник для стандартной системы.
Никак не могу понять, почему устройство пропускает сигналы или вообще не видит передатчики. Передатчиков у меня 5 шт, из них один пульт, с ними проблем нету. Такое впечатление, что либо антенна плохо принимает (то есть сигнал каким-то образом не читается), либо nIRQ не хочет срабатывать. В каком-то определённом положении в пространстве приёмник читает передатчики, правда иногда пропускает (10/1), а в других положениях может вообще не видеть, закономерность повторяется (водил по кругу рядом с антенной приёмника). Пробовал подпаивать разной длины проводки к входу антенны, та же картина. Без антенны модуль вообще не видит передатчик на любых расстояниях. Земля антенны не подключена к общей земле модуля. Всё экранировал (обмотал фольгой и подключил к общей земле). Варьировал настройки, убирал sleep mode - не помогло. По прошивке всё вроде работает правильно, иначе бы он не читал подряд в определённых положениях. Читает и пишет регистры в буфер правильно. Питание менял с 5В до 3.15, не помогло. Менял ёмкость кондеев и тд... Пробовал вообще после каждого приёма проводить инициализацию по новой, но он и первый сигнал бывает не видит. Помогите своими догадками. Уже вторую неделю мучаюсь.
Можно, конечно, переделать плату, привязать spi через резисторы к питанию, развести нормальную антенну прямо на плате, как в оригинале, но это уже в последнюю очередь буду пробовать.

Часть кода, что относится к rfm23bp:

Код:

Chip type               : ATmega128
Program type            : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 1024
*******************************************************/

#include <mega128.h>

// Alphanumeric LCD functions
#include <alcd.h>
#include <io.h>
#include <delay.h>
#include <stdint.h>
#include <rfm22b-23b_registers.h>
#include <stdio.h>

#define uint8_t unsigned int

unsigned char buffer[100];
uint8_t bufferReg[100];
uint8_t bufferRead[PKTSIZE];


#define nIRQ PIND.1
#define nSEL PORTD.4
#define nSCK PORTD.5
#define nSDI PORTD.3
#define nSDO PIND.2
#define sbi(var, mask)   ((var) |= (uint8_t)(1 << mask))
#define cbi(var, mask)   ((var) &= (uint8_t)~(1 << mask))

#define SH PORTB.6
#define ST PORTB.5
#define DS PORTB.7



void SPI_WRITE(uint8_t Addr, uint8_t data)
{
unsigned char i=0;
Addr=Addr|0x80;          // Старший бит в адресе дб равен 1!!!

nSEL=0;
nSDI=0;
nSCK=0;
delay_us(10);

for (i=0; i<8; i++)
        {
        nSDI=(Addr>>(7-i))&0x01;
        delay_us(10);
        nSCK=1;
        delay_us(30);
        nSCK=0;
        delay_us(20);
        }
for (i=0; i<8; i++)
        {
        nSDI=(data>>(7-i))&0x01;
        delay_us(10);
        nSCK=1;
        delay_us(30);
        nSCK=0;
        delay_us(20);
        }     
nSEL=1;
nSDI=0;
delay_us(30);                       
}
       
uint8_t SPI_READ(uint8_t Addr)
{
unsigned char i=0;
uint8_t data=0;
// Старший бит в адресе дб равен 0!!!
Addr=Addr&0x7F;

nSEL=0;
nSDI=0;
nSCK=0;
delay_us(10);

for (i=0; i<8; i++)
        {
        nSDI=(Addr>>(7-i))&0x01;
        delay_us(10);
        nSCK=1;
        delay_us(30);
        nSCK=0;
        delay_us(20);
        } 


for (i=0; i<8; i++)
        {     
            nSCK=1;
            delay_us(30);
            data=data<<1;
            data|=(nSDO);
            nSCK=0;
            delay_us(20);
             
        } ;       
nSEL=1;
nSDI=0;
delay_us(30);                 // выборка чипа       
return data;
}


void RFM22B_rxMode(void)
{
   
   SPI_WRITE(RFM22B_REGISTER_07_OPERATING_FUNCTION_CONTROL_1, (0x01 | 0x40));   // to ready mode
   
   SPI_READ(RFM22B_REGISTER_03_INTERRUPT_STATUS_1);      // read interrupt vector
   SPI_READ(RFM22B_REGISTER_04_INTERRUPT_STATUS_2);      // read interrupt vector
   
   
   SPI_WRITE(RFM22B_REGISTER_7E_RX_FIFO_CONTROL, PKTSIZE);   // set RX FIFO almost full threshold
   
   SPI_WRITE(RFM22B_REGISTER_08_OPERATING_FUNCTION_CONTROL_2, 0x03);   // clear contents of FIFO - reset FIFO
   SPI_WRITE(RFM22B_REGISTER_08_OPERATING_FUNCTION_CONTROL_2, 0x00);   // clear contents of FIFO - clear FIFO
   
   SPI_WRITE(RFM22B_REGISTER_07_OPERATING_FUNCTION_CONTROL_1, (5 | 0x40));      // RX on, Ready mode
   
   SPI_WRITE(RFM22B_REGISTER_05_INTERRUPT_ENABLE_1, 2);      // Valid Packet Received interrupt enabled

}


void SPI_RFM_INIT (void)
{

SPI_WRITE(0x05, 0x00);
//4
SPI_WRITE(0x06, 0x00);
//5
SPI_WRITE(0x07, 0x01);
//6
SPI_WRITE(0x09, 0x7F);
//7
SPI_WRITE(0x0A, 0x05);
//8
SPI_WRITE(0x0B, 0xF4);
//9
SPI_WRITE(0x0C, 0xFB);
//10
SPI_WRITE(0x0D, 0xF2);
//11
SPI_WRITE(0x0E, 0x00);
//12
SPI_WRITE(0x30, 0x8C);
//13
SPI_WRITE(0x32, 0xFF);
//14
SPI_WRITE(0x33, 0x4E);
//15
SPI_WRITE(0x34, 0x0A);
//16
SPI_WRITE(0x35, 0x14);
//17
SPI_WRITE(0x36, 0xF0);
//18
SPI_WRITE(0x37, 0xA2);
//19
SPI_WRITE(0x38, 0x00);
//20
SPI_WRITE(0x39, 0x13);
//21
SPI_WRITE(0x3A, 0xFF);
//22
SPI_WRITE(0x3B, 0xFF);
//23
SPI_WRITE(0x3C, 0xFF);
//24
SPI_WRITE(0x3D, 0xFF);
//25
SPI_WRITE(0x3E, 0x04);   
//26
SPI_WRITE(0x3F, 0x12);
//27
SPI_WRITE(0x40, 0x34);
//28
SPI_WRITE(0x41, 0x56);
//29
SPI_WRITE(0x42, 0x78);
//30
SPI_WRITE(0x43, 0xFF);
//31
SPI_WRITE(0x44, 0xFF);
//32
SPI_WRITE(0x45, 0xFF);
//33
SPI_WRITE(0x46, 0xFF);
//34
SPI_WRITE(0x4B, 0x04);
//35
SPI_WRITE(0x79, 0x00);
//36
SPI_WRITE(0x7a, 0x00);
//37
SPI_WRITE(0x73, 0x00);
//38
SPI_WRITE(0x74, 0x00);
//39
SPI_WRITE(0x75, 0x73);
//40
SPI_WRITE(0x76, 0x00);
//41
SPI_WRITE(0x77, 0x00);
//42
SPI_WRITE(0x6E, 0x19);
//43
SPI_WRITE(0x6F, 0x9A);
//44
SPI_WRITE(0x70, 0x0C);
//45
SPI_WRITE(0x58, 0xC0);
//46
SPI_WRITE(0x72, 0x50);
//47
SPI_WRITE(0x71, 0x23);
//48
SPI_WRITE(0x1C, 0x9A);
//49
SPI_WRITE(0x20, 0x3C);
//50
SPI_WRITE(0x21, 0x02);
//51
SPI_WRITE(0x22, 0x22);
//52
SPI_WRITE(0x23, 0x22);
//53
SPI_WRITE(0x24, 0x07);
//54
SPI_WRITE(0x25, 0xFF);
//55
SPI_WRITE(0x1D, 0x40);
//56
SPI_WRITE(0x1E, 0x0A);
//57
SPI_WRITE(0x2A, 0x48);
//58
SPI_WRITE(0x1F, 0x03);
//59
SPI_WRITE(0x69, 0x60);

RFM22B_rxMode();

}

//Сброс флаги прерывания
void SPI_RFM_INTREAD(void)
{
SPI_WRITE(0x07, 01);    //
SPI_READ(0x03);    //read the Interrupt Status1 register
SPI_READ(0x04);   
SPI_WRITE(0x07, 05);
}


void SPI_RFM_INTREAD2(void)
{
unsigned char i=0;
uint8_t chksum, var;

for(i=0; i<PKTSIZE; i++){
    var = SPI_READ(0x7F);
    bufferRead[i] = var;
    bufferRead[i+1] = '\0';
}

// Check that the checksum matches up:
    chksum = 0;
    for(i=0; i<(PKTSIZE-1); i++)
        chksum += bufferRead[i];
       
    // If checksum is good, print out what was received into the terminal
    if(chksum == bufferRead[PKTSIZE-1])
    {
        SPI_RFM_INTREAD();
    }
    // otherwise reset and start listening again
    else
    {
        RFM22B_rxMode();
    }
}


void test_RFM23_2(void)
{

    uint8_t reg = 0x05;
    uint8_t value = 0xEE;
    uint8_t val_new = 0x00;
    uint8_t val_orig = 0x00;
    // read register
    unsigned char i = 0;
   
    val_orig = SPI_READ(reg);
   
    lcd_clear();
    lcd_gotoxy(0, 0);
    lcd_putsf("Origin -");
    lcd_gotoxy(1, 1);
    sprintf(buffer, "%d", val_orig);
    lcd_puts(buffer);
   
    delay_ms(1000);
   
    // write register
    SPI_WRITE(reg, value);

    // read register
    val_new = SPI_READ(reg);
   
    lcd_clear();
    lcd_gotoxy(0, 0);
    lcd_putsf("New - ");
    lcd_gotoxy(0, 1);
    sprintf(buffer, "%d", val_new);
    lcd_puts(buffer);
   
    delay_ms(1000);
   
    // set orig register value
    SPI_WRITE(reg, val_orig);

    // test if the written register value
    // has been read
   
    for(i=0; i<56; i++){
        if(bufferReg[i]!=bufferRegConst[i]){
            value = 0;
            LCD_print_two_values(i, bufferReg[i]);
            while(PINF.0 == 0){};
            while(PINF.0 != 0){};
        }
    }
   
    if (val_new == value) {
            lcd_clear();
            lcd_gotoxy(0, 0);
            lcd_putsf("test goo");
            lcd_gotoxy(0, 1);
            lcd_putsf("d!");
    } else {
            lcd_clear();
            lcd_gotoxy(0, 0);
            lcd_putsf("test err");
            lcd_gotoxy(0, 1);
            lcd_putsf("or!");
    }
   
    delay_ms(1000);
}


void SPI_RFM_INIT_2 (void)
{
bufferReg[0] = SPI_READ(0x06); // interrupt all enable
bufferReg[1] = 0x00; // to ready mode
bufferReg[2] = SPI_READ(0x09); // cap = 12.5pf
bufferReg[3] = SPI_READ(0x0A); //clk output is 2MHz
bufferReg[4] = SPI_READ(0x0B);     // GPIO Configuration 0.
bufferReg[5] = SPI_READ(0x0C);     // GPIO Configuration 1.
bufferReg[6] = SPI_READ(0x0D); // GPIO2 for MCLK output
bufferReg[7] = SPI_READ(0x0E); //GPIO port use default value

bufferReg[8] = SPI_READ(0x30); // NO ADC used
bufferReg[9] = SPI_READ(0x32); //no adc used
bufferReg[10] = SPI_READ(0x33); // no temperature sensor used
bufferReg[11] = SPI_READ(0x34); // no temperature sensor used
bufferReg[12] = SPI_READ(0x35); // no mancheset code, no data whiting, data rate < 30Kbps
bufferReg[13] = SPI_READ(0x36); // IF filter bandwidth
bufferReg[14] = SPI_READ(0x37); // AFC LOOP
bufferReg[15] = SPI_READ(0x38); //AFC timing
bufferReg[16] = SPI_READ(0x39); //clock recovery
bufferReg[17] = SPI_READ(0x3A); //clock recovery
bufferReg[18] = SPI_READ(0x3B); //clock recovery
bufferReg[19] = SPI_READ(0x3C); //clock recovery
bufferReg[20] = SPI_READ(0x3D); //clock recovery timing
bufferReg[21] = SPI_READ(0x3E); //clock recovery timing
bufferReg[22] = SPI_READ(0x3F); // Tx data rate 1

bufferReg[23] = SPI_READ(0x40); // Tx data rate 0
bufferReg[24] = SPI_READ(0x41); // data access control
bufferReg[25] = SPI_READ(0x42); // header control
bufferReg[26] = SPI_READ(0x43);// // header 3, 2, 1,0 used for head length, fixed packet length, synchronize word length 3, 2,
bufferReg[27] = SPI_READ(0x44); // 64 nibble = 32byte preamble
bufferReg[28] = SPI_READ(0x45); //0x35 need to detect 20bit preamble
bufferReg[29] = SPI_READ(0x46); // synchronize word
bufferReg[30] = SPI_READ(0x4B);

bufferReg[31] = SPI_READ(0x79);
bufferReg[32] = SPI_READ(0x7A);
bufferReg[33] = SPI_READ(0x73);
bufferReg[34] = SPI_READ(0x74);
bufferReg[35] = SPI_READ(0x75);
bufferReg[36] = SPI_READ(0x76);
bufferReg[37] = SPI_READ(0x77);     // total tx 1 byte

bufferReg[38] = SPI_READ(0x6E);
bufferReg[39] = SPI_READ(0x6F);
bufferReg[40] = SPI_READ(0x70);
bufferReg[41] = SPI_READ(0x58);
bufferReg[42] = SPI_READ(0x72); // all the bit to be checked
bufferReg[43] = SPI_READ(0x71); // all the bit to be checked
bufferReg[44] = SPI_READ(0x1C); // all the bit to be checked
bufferReg[45] = SPI_READ(0x20); // all the bit to be checked
bufferReg[46] = SPI_READ(0x21); // tx power to max
bufferReg[47] = SPI_READ(0x22); // no frequency hopping
bufferReg[48] = SPI_READ(0x23); // no frequency hopping
bufferReg[49] = SPI_READ(0x24); // Gfsk, fd[8] =0, no invert for Tx/Rx data, fifo mode, txclk -->gpio
bufferReg[50] = SPI_READ(0x25); // frequency deviation setting to 45k = 72*625

bufferReg[51] = SPI_READ(0x1D); // no frequency offset
bufferReg[52] = SPI_READ(0x1E); // no frequency offset
bufferReg[53] = SPI_READ(0x2A); // frequency set to 434MHz
bufferReg[54] = SPI_READ(0x1F);// frequency set to 434MHz
bufferReg[55] = SPI_READ(0x69); // fifo reset
}



void Signal(unsigned char SS){

if(SS == 1){
    PORTB.4 = 1;
    perm = 1; 
    // Timer 1 start
    TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
}
else {
    PORTB.4 = 0;
    perm = 0;
    }
}

void DOWORKER(){

    switch(bufferRead[0]){
       
               
        case 4: { //Red cut
            if(!endGame && !TimON){
                startGame = 1;
                if(PlusMinus)
                    RedCounter = RedCounter+RedKnifeCut;               
                else
                    RedCounter = RedCounter-RedKnifeCut;
            }
            if(!endGame && TimON){
                // Разрешаем прерывание
                TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (1<<TOIE0);
                startGame = 1;
                if(PlusMinus && TimCount < TimerCounter)
                    RedCounter = RedCounter+RedKnifeCut;               
                if(!PlusMinus && TimCount < TimerCounter)
                    RedCounter = RedCounter-RedKnifeCut;
            }
        } break;
        case 3: { //Red shot
            if(!endGame && !TimON){
                startGame = 1;
                if(PlusMinus)
                    RedCounter = RedCounter+RedKnifeShot;               
                else
                    RedCounter = RedCounter-RedKnifeShot;
            }
            if(!endGame && TimON){
                // Разрешаем прерывание
                TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (1<<TOIE0);
                startGame = 1;
                if(PlusMinus && TimCount < TimerCounter)
                    RedCounter = RedCounter+RedKnifeShot;               
                if(!PlusMinus && TimCount < TimerCounter)
                    RedCounter = RedCounter-RedKnifeShot;
            }
        } break;
        case 8: { //Green cut
            if(!endGame && !TimON){
                startGame = 1;
                if(PlusMinus)
                    GreenCounter = GreenCounter+GreenKnifeCut;               
                else
                    GreenCounter = GreenCounter-GreenKnifeCut;
            }
            if(!endGame && TimON){
                // Разрешаем прерывание
                TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (1<<TOIE0);
                startGame = 1;
                if(PlusMinus && TimCount < TimerCounter)
                    GreenCounter = GreenCounter+GreenKnifeCut;             
                if(!PlusMinus && TimCount < TimerCounter)
                    GreenCounter = GreenCounter-GreenKnifeCut;
            }
        } break;
        case 7: { //Green shot
            if(!endGame && !TimON){
                startGame = 1;
                if(PlusMinus)
                    GreenCounter = GreenCounter+GreenKnifeShot;               
                else
                    GreenCounter = GreenCounter-GreenKnifeShot;
            }
            if(!endGame && TimON){
                // Разрешаем прерывание
                TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (1<<TOIE0);
                startGame = 1;
                if(PlusMinus && TimCount < TimerCounter)
                    GreenCounter = GreenCounter+GreenKnifeShot;             
                if(!PlusMinus && TimCount < TimerCounter)
                    GreenCounter = GreenCounter-GreenKnifeShot;
            }
        } break;
        case 12:{
            RedCounter++;
            startGame = 1;
        } break;
        case 13:{
            RedCounter--;
            startGame = 1;
        } break;
        case 11:{
            RedWarnings++;
            startGame = 1;
        } break;
        case 9:{
            GreenCounter++;
            startGame = 1;
        } break;
        case 10:{
            GreenCounter--;
            startGame = 1;
        } break;
        case 14:{
            GreenWarnings++;
            startGame = 1;
        } break;
        case 15:{
            if(TimCount == 0){
                GreenWarnings = 0;
                RedWarnings = 0;
               
                if(startGame){
                    GreenCounter = GreenCounterFirst;
                    RedCounter = RedCounterFirst;
                    startGame = 0;
                    endGame = 0;
                }
                else
                {   
                    GreenCounterFirst+=5;
                    RedCounterFirst+=5;
                       
                    if(GreenCounterFirst>50){
                        GreenCounterFirst=0;
                        RedCounterFirst=0;   
                    }
                   
                    if(GreenCounterFirst>0)
                        PlusMinus = 0;   
                    if(GreenCounterFirst == 0)
                        PlusMinus = 1;
                       
                    GreenCounter = GreenCounterFirst;
                    RedCounter = RedCounterFirst;   
                }
            }
            else
                TimCount = 0;
        } break;
        default: { //Red cut
            goto ERROR;
        } break;   
    }
       
    if(GreenCounter < 0)
        GreenCounter = 0;
    if(GreenCounter > 99)
        GreenCounter = 99;
    if(RedCounter < 0)
        RedCounter = 0;
    if(RedCounter > 99)
        RedCounter = 99;
       
    if(RedWarnings > 2)
        RedWarnings = 2;
    if(GreenWarnings > 2)
        GreenWarnings = 2;
       
    if(startGame && !PlusMinus)
        if(GreenCounter < 1 || RedCounter < 1){
            Signal(1);
            endGame = 1;
            delay_ms(500);
        }           
           
    //Распечатываю счётчики
    LoadValuesToLED(GreenCounter, RedCounter);
    LoadWarningsToLED(GreenWarnings, RedWarnings);
    LCD_print_two_values(GreenCounter, RedCounter);
    goto OUT;
   
ERROR:
    LCD_print_valueI("Error", bufferRead[0]);
OUT: 
}



void SPI_RFM_INTREAD3(void)
{
    if (!nIRQ)
    {         
        LCD_print_string("Read", "command");
        SPI_RFM_INTREAD2();
        DOWORKER();
        Signal(1); //звуковой сигнал
    }
}


// Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Reinitialize Timer1 value
TCNT1H=0xFCE0 >> 8;
TCNT1L=0xFCE0 & 0xff;
// Place your code here

SPI_RFM_INTREAD3();

}


void main(void)
{

// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=In Bit2=In Bit1=In Bit0=In
DDRA=(1<<DDA7) | (1<<DDA6) | (1<<DDA5) | (1<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=1 Bit6=1 Bit5=1 Bit4=1 Bit3=T Bit2=T Bit1=T Bit0=T
PORTA=(1<<PORTA7) | (1<<PORTA6) | (1<<PORTA5) | (1<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// Port B initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=in Bit2=out Bit1=Out Bit0=Out
DDRB=(1<<DDB7) | (1<<DDB6) | (1<<DDB5) | (1<<DDB4) | (1<<DDB3) | (0<<DDB2) | (1<<DDB1) | (1<<DDB0);
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=T Bit2=0 Bit1=0 Bit0=0
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out
DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=1 Bit2=0 Bit1=0 Bit0=0
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (1<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=Out Bit4=Out Bit3=Out Bit2=In Bit1=in Bit0=In
DDRD=(0<<DDD7) | (0<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=0 Bit4=0 Bit3=0 Bit2=T Bit1=0 Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// Port E initialization
// Function: Bit7=In Bit6=In Bit5=Out Bit4=Out Bit3=Out Bit2=out Bit1=out Bit0=in
DDRE=(0<<DDE7) | (0<<DDE6) | (1<<DDE5) | (1<<DDE4) | (1<<DDE3) | (1<<DDE2) | (1<<DDE1) | (0<<DDE0);
// State: Bit7=T Bit6=T Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=T Bit0=0
PORTE=(0<<PORTE7) | (0<<PORTE6) | (0<<PORTE5) | (0<<PORTE4) | (0<<PORTE3) | (0<<PORTE2) | (0<<PORTE1) | (0<<PORTE0);

// Port F initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRF=(0<<DDF7) | (0<<DDF6) | (0<<DDF5) | (0<<DDF4) | (0<<DDF3) | (0<<DDF2) | (0<<DDF1) | (0<<DDF0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTF=(0<<PORTF7) | (0<<PORTF6) | (0<<PORTF5) | (0<<PORTF4) | (0<<PORTF3) | (0<<PORTF2) | (0<<PORTF1) | (0<<PORTF0);

// Port G initialization
// Function: Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRG=(0<<DDG4) | (0<<DDG3) | (0<<DDG2) | (0<<DDG1) | (0<<DDG0);
// State: Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTG=(0<<PORTG4) | (0<<PORTG3) | (0<<PORTG2) | (0<<PORTG1) | (0<<PORTG0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 250,000 kHz
// Mode: Normal top=0xFF
// OC0 output: Disconnected
// Timer Period: 1 ms
ASSR=0<<AS0;
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (1<<CS01) | (1<<CS00);
TCNT0=0x06;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// OC1C output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 1 us
// Timer1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<COM1C1) | (0<<COM1C0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1H=0xFF;
TCNT1L=0xF8;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
TCCR2=(0<<WGM20) | (0<<COM21) | (0<<COM20) | (0<<WGM21) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;

// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: Timer3 Stopped
// Mode: Normal top=0xFFFF
// OC3A output: Disconnected
// OC3B output: Disconnected
// OC3C output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR3A=(0<<COM3A1) | (0<<COM3A0) | (0<<COM3B1) | (0<<COM3B0) | (0<<COM3C1) | (0<<COM3C0) | (0<<WGM31) | (0<<WGM30);
TCCR3B=(0<<ICNC3) | (0<<ICES3) | (0<<WGM33) | (0<<WGM32) | (0<<CS32) | (0<<CS31) | (0<<CS30);
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
ETIMSK=(0<<TICIE3) | (0<<OCIE3A) | (0<<OCIE3B) | (0<<TOIE3) | (0<<OCIE3C) | (0<<OCIE1C);

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=(0<<ISC31) | (0<<ISC30) | (0<<ISC21) | (0<<ISC20) | (0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
EICRB=(0<<ISC71) | (0<<ISC70) | (0<<ISC61) | (0<<ISC60) | (0<<ISC51) | (0<<ISC50) | (0<<ISC41) | (0<<ISC40);
EIMSK=(0<<INT7) | (0<<INT6) | (0<<INT5) | (0<<INT4) | (0<<INT3) | (0<<INT2) | (0<<INT1) | (0<<INT0);

// USART0 initialization
// USART0 disabled
UCSR0B=(0<<RXCIE0) | (0<<TXCIE0) | (0<<UDRIE0) | (0<<RXEN0) | (0<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80);

// USART1 initialization
// USART1 disabled
UCSR1B=(0<<RXCIE1) | (0<<TXCIE1) | (0<<UDRIE1) | (0<<RXEN1) | (0<<TXEN1) | (0<<UCSZ12) | (0<<RXB81) | (0<<TXB81);

// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
SFIOR=(0<<ACME);

// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);



// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTC Bit 0
// RD - PORTC Bit 1
// EN - PORTC Bit 2
// D4 - PORTC Bit 4
// D5 - PORTC Bit 5
// D6 - PORTC Bit 6
// D7 - PORTC Bit 7
// Characters/line: 16
lcd_init(20);

// Global enable interrupts
#asm("sei")
   
SPI_RFM_INIT();
SPI_RFM_INIT_2();
LoadValuesToLED(12, 19);
//SPI_RFM_INTREAD();
   
test_RFM23_2();
LoadValuesToLED(0, 0);
Signal(1);
LCD_print_string("Waiting", "command");

while (1)
      {     
           
            if(perm){
                TimerSignal++;
            }   
           
            if(PINF.0 == 1){
                TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);
                lcd_menu_input(lcd_menu_swap());
                LCD_print_string("Waiting", "command");
                Signal(1); //звуковой сигнал
            }
           
            if(TimerSignal > 30000){
                Signal(0);
                TimerSignal=0;
            }
      };
}



Изображение Изображение Изображение


Вернуться наверх
 
Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.

Подробнее>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 64 ]    , , , 4

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: akl и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y