реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Кодер Декодер, или как передать код на расстояние
SergeyM
сообщение Nov 29 2005, 13:20
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 1-05-05
Из: Снежинск
Пользователь №: 4 654



Народ привет!
Возникла проблема, нужно передать код через радио канал. На данном этапе стоит задача отработать передачу данных напрямую через короткий проводок на макетке. Дак вот наблюдается нестабильность в получении кода, что на пике , что на авр. Может кто реализовывал типичную проблему, так не подскажите как лучше это сделать? Посылку произвожу манчестерским кодом со стартовым битом, по которому и определяю начало пакета. Вобщем вот два кода.
Код кодера на пике:
Код
// Функция передачи пакета кода
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++;  
}
Go to the top of the page
 
+Quote Post
afe
сообщение Feb 28 2006, 01:53
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 94
Регистрация: 4-05-05
Из: Харьков
Пользователь №: 4 740



A dlya nachala rekomenduyu podat' sinxroposledovatel'nost' (al-ya 9 bit '1') i dobavlyat' parity po 4/8 ili luchshe checksum ...


--------------------
SY AfE
Go to the top of the page
 
+Quote Post
SergeyM
сообщение Feb 28 2006, 17:09
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 1-05-05
Из: Снежинск
Пользователь №: 4 654



А примерчик как это реализовать?
Go to the top of the page
 
+Quote Post
afe
сообщение Mar 1 2006, 01:55
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 94
Регистрация: 4-05-05
Из: Харьков
Пользователь №: 4 740



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


--------------------
SY AfE
Go to the top of the page
 
+Quote Post
afe
сообщение Mar 1 2006, 03:37
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 94
Регистрация: 4-05-05
Из: Харьков
Пользователь №: 4 740



Цитата(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 ...

Сообщение отредактировал afe - Mar 1 2006, 03:50


--------------------
SY AfE
Go to the top of the page
 
+Quote Post
^Ptr73
сообщение Mar 3 2011, 09:44
Сообщение #6





Группа: Новичок
Сообщений: 1
Регистрация: 12-07-10
Пользователь №: 58 406



Интересует документация по HITAG 1 и HITAG S
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 7 2011, 09:30
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(SergeyM @ Nov 29 2005, 17:20) *
Возникла проблема, нужно передать код через радио канал.


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

http://zalil.ru/30629340

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

Сообщение отредактировал kovigor - Mar 7 2011, 09:31
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st July 2025 - 19:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01433 секунд с 7
ELECTRONIX ©2004-2016