Jump to content

    
Sign in to follow this  
SergeyM

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

Recommended Posts

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

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

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

// Функция передачи пакета кода
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++;  
}

Share this post


Link to post
Share on other sites

Для начала уточнить, в одну/две стороны, я подобную задачу исполнял на 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) ...

Share this post


Link to post
Share on other sites
Для начала уточнить, в одну/две стороны, я подобную задачу исполнял на 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 ...

Edited by afe

Share this post


Link to post
Share on other sites
Возникла проблема, нужно передать код через радио канал.

 

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

 

http://zalil.ru/30629340

 

P.S.

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

Edited by kovigor

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this