Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: нужна программа xm1202 + pic16f628
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
fot0n
нужна программа xm1202 + pic16f628 цена договорная icq: 375070415
fot0n
есть программа отправки посылки, но она не отправляет посылку на реальном, устройстве, может кто-нибудь посмотреть и сказать в чем проблема....

Кто работал с Xe1202, помогите.

прикрепил проект...
Ilya_A
Цитата(fot0n @ May 13 2009, 13:50) *
есть программа отправки посылки, но она не отправляет посылку на реальном, устройстве, может кто-нибудь посмотреть и сказать в чем проблема....

Кто работал с Xe1202, помогите.

прикрепил проект...

Вот писал программу для XM1203 + PIC18

Программа отправляет и принимает пакеты. Микросхема запущена в режиме кода баркера. Отправка и прием реализованы через прерывание, основная программа не загружается обработкой отправки и приема - а тупо либо ждет флага что пакет пришел. Либо формирует пакет и выставляет флаг для инициализации отправки.
В пакете реализован программный паттерн (каждый пакет должен начинаться с байтов 0x96,0x81,0x7E,0x69). затем идет байт в котором лежит длина пакета, затем сам пакет и в конце CRC, посчитанная по алгоритму реализованному в шине 1-wire.
Вот код прерывания, в котором и идет вся работа:

Код
void interrupt engen(void)
{
    if(INT1IF==1)
    {    
        INT1IF=0;                                        //  обнуляем флаг
        if((PreMode==RF_SW_RECEIVER)&&(DCLK)){                // если режим приема, ищем передний фронт
            if(priem==0){                                    // ищем pattern
                temp=temp<<1;                                
                if (DATA==1) temp=temp|0x00000001;
                if (temp==0x96817E69) {
                    priem=1;
                    bitn=0;
                    byten=0;
                }
            }else{                                            // принимаем пакет
                packet[byten]<<=1;                                    
                if (DATA==1) packet[byten]|=1;            
                bitn++;
                if(bitn>=8){
                    bitn=0;
                    byten++;
                    if(byten>=1){
                        if(byten>=packet[0]){priem=0;newpacket=1;}
                    }
                }
            }
        }else if((PreMode==RF_SW_TRANSMITTER)&&(DCLK==0)){
                    if(peredacha==0){
                        byten=0;
                        BitCounter=0x80;
                    }else if(peredacha==1){
                        packet_tx[4]+=2;                    // +2, т.к. 1 байт sizeof + 1 байт CRC
                        packet_tx[packet_tx[4]+4-1]=CalcCRC_1Wire(&packet_tx[4],packet_tx[4]-1); // байт с номером sizeof(packet)+4-1 crc от пакета (включая sizeof)
                        peredacha++;
                    }else{
                        if(packet_tx[byten]&BitCounter)
                            DATA = 1;
                        else
                            DATA = 0;
                        BitCounter>>=1;
                        if(BitCounter==0){
                            BitCounter=0x80;
                            byten++;
                            if (byten>=packet_tx[4]+4) peredacha=0;
                        }
                    }
         }
    }
}


Для того чтобы отправить байт нужно сделать следующее:
Код
                SetRFMode(RF_SW_TRANSMITTER);
                Delay_ms(100);
                packet_tx[4]=3; //Размер пакета
                packet_tx[5]=packet[1]; // Адрес устройства
                packet_tx[6]=packet[2]; //Команда считать температуру                
                packet_tx[6]=0xAA; //температура
                peredacha=1;
                while(peredacha);

чтобы принять пакет, делаем так:
Код
    SetRFMode(RF_SW_RECEIVER);
    newpacket=0;
    while(newpacket==0); // ждем прихода пакета
           //далее распечатываем принятый пакет
    printf("\r\n");
    for(i=1;i<(packet[0]-1);i++){
        printf(" %02.2X",packet[i]);
    }


Переписать под 1202 и 16-ый пик думаю не составит труда, разбирайтесь.

Проект на Hi-Tech PICC18 (В рассматриваемом примере программа всегда стоит на приеме и ждет определенный пакет - на который она отвечает)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.