Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Кодер Декодер
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
SergeyM
Народ привет!
Возникла проблема, нужно передать код через радио канал. На данном этапе стоит задача отработать передачу данных напрямую через короткий проводок на макетке. Дак вот наблюдается нестабильность в получении кода, что на пике , что на авр. Может кто реализовывал типичную проблему, так не подскажите как лучше это сделать? Посылку произвожу манчестерским кодом со стартовым битом, по которому и определяю начало пакета. Вобщем вот два кода.
Код кодера на пике:
Код
// Функция передачи пакета кода
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++;  
}
afe
A dlya nachala rekomenduyu podat' sinxroposledovatel'nost' (al-ya 9 bit '1') i dobavlyat' parity po 4/8 ili luchshe checksum ...
SergeyM
А примерчик как это реализовать?
afe
Для начала уточнить, в одну/две стороны, я подобную задачу исполнял на 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) ...
afe
Цитата(afe @ Mar 1 2006, 03:55) *
Для начала уточнить, в одну/две стороны, я подобную задачу исполнял на 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 ...
^Ptr73
Интересует документация по HITAG 1 и HITAG S
kovigor
Цитата(SergeyM @ Nov 29 2005, 17:20) *
Возникла проблема, нужно передать код через радио канал.


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

http://zalil.ru/30629340

P.S.
Да, а сколько данных нужно слать ?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.