Перейти к содержанию
    

Кодер Декодер

Народ привет!

Возникла проблема, нужно передать код через радио канал. На данном этапе стоит задача отработать передачу данных напрямую через короткий проводок на макетке. Дак вот наблюдается нестабильность в получении кода, что на пике , что на авр. Может кто реализовывал типичную проблему, так не подскажите как лучше это сделать? Посылку произвожу манчестерским кодом со стартовым битом, по которому и определяю начало пакета. Вобщем вот два кода.

Код кодера на пике:

// Функция передачи пакета кода
void code(unsigned int Low,unsigned int Hi)
{
    unsigned int c;
    if(DataOutCount < PAKET){
    if ((DataOutCount < HPAKET) && (DataReady == 12) ){
        
        if (stop){
            c = Low;
            LowDataOut >>= 1;
            //DataOutCount++;
            }
        }
    else if ((DataOutCount >= HPAKET) && (DataReady == 12)){
        
        if (stop){
            c = Hi;
            HiDataOut >>= 1;
            //DataOutCount++;
            }
        }
    switch (DataReady)
    {
         
        case 10:     if (i < 4){
                        RB2 = 0;
                        i++;
                        }
                    else{
                        i = 0;
                        DataReady++;
                        }
                    break;
        case 11:    DataReady++;
                    RB2 = 1;
                    break;
        case 12:    if ((c & DataCheck) == DataCheck){
                        RB2 = 0;
                        DataReady--;
                        }
                    else
                        {
                            if (i < 1){
                                stop = 0;
                                 RB2 = 0;
                                 i++;
                                 break;
                                 }
                            else{
                                i = 0;
                                stop = 1;
                                DataReady--;
                                }
                        }
                    //LowDataOut >>= 1;
                    DataOutCount++;
                    break;
        default:    DataReady++;
                    RB2 = 1;
                    break;
    }
    }
    else{
        RB2 = 1;
        DataShow = 0;
        DataReady = 0;
        DataOutCount = 0;
        }
                                
}

 

Код декодера, реализовывал на пике и на авр, один к одному, изменив только переменные железа

interrupt [EXT_INT0] void ext_int0_isr(void)
{
//SaveRTC = CurrentRTC;// Place your code here
switch (MCUCR){
        case 0x0E:      GIMSK=0x80;
                        MCUCR = 0x0F;   // установили на фронт
                        SaveRTC = ((Count & 0x0FF) << 8) + TCNT0;
                        GIMSK=0xC0;
                        break;
        case 0x0F:      GIMSK=0x80;
                        MCUCR = 0x0E;
                        GIMSK=0xC0;
                        CurrentRTC = ((Count & 0x0FF) << 8) + TCNT0;
                        PeriodRTC = CurrentRTC - SaveRTC;
                        SaveRTC = PeriodRTC;
                        if (SaveRTC < 0)
                                SaveRTC = 0 - SaveRTC;
                        if ((SaveRTC > 700) && (SaveRTC < 1000)){// определили что это стартовый бит
                                //PORTB = 0x01;
                                DataInCount = PAKET;
                                LowDataIn = 0;
                    HiDataIn = 0; 
                                }
                        if ((SaveRTC > 30) && (SaveRTC < 250) || (SaveRTC > 480) && (SaveRTC < 490)){ // это 1  
                                if (DataInCount <= HPAKET)
                        LowDataIn = (LowDataIn << 1) + 1;    // получена 1
                    else if (DataInCount > HPAKET)
                        HiDataIn = (HiDataIn << 1) + 1;
                    if (--DataInCount == 0)
                        DataReady = 1;

                                }
                                
                        if ((SaveRTC > 250) && (SaveRTC < 480)){  // это 0
                               if (DataInCount <= HPAKET)
                            LowDataIn = LowDataIn << 1;
                        else if (DataInCount > HPAKET)
                               HiDataIn = HiDataIn << 1;
                        if (--DataInCount ==0)
                            DataReady = 1;
                                
                        } 
                                
                    //GIMSK=0xC0;
                        SaveRTC = 0;
                        break;
    }  
    //CurrentRTC++;  
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для начала уточнить, в одну/две стороны, я подобную задачу исполнял на RFID H400x (RO 40 бит чистых, а с parity 64 + 9 синхра, эти чипы еще использовались в автомобильных имобилайзерах до года выпуска не помню, для примера в Honde CR-V, проверено ;-) и V4050 (RW 1Kbit?, podimat' info nado, davno bilo ;-\ ) и на PIC16F84 (~1994 год) и на AVR (90s2313 после того как они появились) на 4 MHz ...

 

Схема на AVR состояла из одного транзистора и катушки и питалось это все от COM порта, и RFID еще запитывалась по радио от него же (и хватало энергии даже на запись с растояния ~5 см), правда RFID был в карточку был упакован, а само устройство по площади такое же было (в плате была фрезеровка по торцу в канавке которой была намотана катушка), блин нужно найти образец и в галерею ;-\

 

PS:

125KHz частота , бит там кодился 64 такта (или 32 PSK) ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для начала уточнить, в одну/две стороны, я подобную задачу исполнял на RFID H400x (RO 40 бит чистых, а с parity 64 + 9 синхра, эти чипы еще использовались в автомобильных имобилайзерах до года выпуска не помню, для примера в Honde CR-V, проверено ;-) и V4050 (RW 1Kbit?, podimat' info nado, davno bilo ;-\ ) и на PIC16F84 (~1994 год) и на AVR (90s2313 после того как они появились) на 4 MHz ...

 

Схема на AVR состояла из одного транзистора и катушки и питалось это все от COM порта, и RFID еще запитывалась по радио от него же (и хватало энергии даже на запись с растояния ~5 см), правда RFID был в карточку был упакован, а само устройство по площади такое же было (в плате была фрезеровка по торцу в канавке которой была намотана катушка), блин нужно найти образец и в галерею ;-\

 

PS:

125KHz частота , бит там кодился 64 такта (или 32 PSK) ...

 

PSS:

Zabil dobavit' site, chtobi ponyat' o chem ya raskazival dly SergeyM (i ya dumayu mnogim budet interesno, u menya stari PDF ostalis'):

 

http://www.emmarin.ch/Line.asp?IdLine=3

 

PSSS:

A esli komu nuzhno po HITAG 1/2 v lichku

 

PSSSS:

A voobshe nuzhno znat' tvoyu zadachu i mozhet tebe nado FSK i paru chipov kotorie po RF peredayut,

chtobi ne zamorachivatsi ...

 

I ne isklucheno chto eto deshevle budet, esli na obshee obozrenie ne xochesh' vinosit' zadachu pishi v lichku ...

Изменено пользователем afe

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возникла проблема, нужно передать код через радио канал.

 

Эхх !!! Вот материалы, которые я насобирал при реализации подобного проекта. Очень советую ознакомиться:

 

http://zalil.ru/30629340

 

P.S.

Да, а сколько данных нужно слать ?

Изменено пользователем kovigor

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...