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

 
 
 
Reply to this topicStart new topic
> нужна программа xm1202 + pic16f628
fot0n
сообщение Apr 27 2009, 17:38
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 15-02-09
Пользователь №: 44 894



нужна программа xm1202 + pic16f628 цена договорная icq: 375070415
Go to the top of the page
 
+Quote Post
fot0n
сообщение May 13 2009, 04:50
Сообщение #2





Группа: Новичок
Сообщений: 2
Регистрация: 15-02-09
Пользователь №: 44 894



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

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

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

Сообщение отредактировал fot0n - May 13 2009, 05:44
Прикрепленные файлы
Прикрепленный файл  Project_XE1202.rar ( 61.75 килобайт ) Кол-во скачиваний: 27
 
Go to the top of the page
 
+Quote Post
Ilya_A
сообщение May 17 2009, 23:59
Сообщение #3


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

Группа: Свой
Сообщений: 166
Регистрация: 1-12-05
Из: Иркутск
Пользователь №: 11 630



Цитата(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 (В рассматриваемом примере программа всегда стоит на приеме и ждет определенный пакет - на который она отвечает)
Прикрепленные файлы
Прикрепленный файл  xemics.rar ( 152.29 килобайт ) Кол-во скачиваний: 22
 
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 2nd July 2025 - 23:08
Рейтинг@Mail.ru


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