Ошибка связи PIC16F628A с Arduino RF (433 МГц)

У меня есть pic16f628a и Arduino UNO ...

Я использую MikroC для PIC ...

Я использую передатчик и приемник 433 МГц.

Моя цель - прочитать данные из Arduino UNO, которые я отправляю с PIC16F628A; но у меня не получилось ...

Схема PIC16F628A (передатчик): Схема передатчика

Я подключил первый вывод приемника к + 5V Arduino;

второй вывод приемника к 12. выводу Arduino,

последний контакт приемника к контакту GND Arduino.

Передатчик (PIC16F628A):

char pre[15]={'U','U','U','U','U',255,255,255,255,255,0,0,0,0,0}; //start bytes...
char ileri[3]={'f','r','w'};
char geri[3]={'b','c','k'};
char dur[3]={'d', 'u', 'r'};
char i=0,j=0;

void kurulum()
{
 CMCON= 7;
 TRISB= 2;

 UART1_Init(2400);

 delay_ms(100);

}

void main()
{

 kurulum();

 while(1)
       {


          for(i=0;i<15;i++)
                           {
                            UART1_Write(pre[i]);
                           }
          for(j=0;j<10;j++)                   
          {
                          for(i=0;i<3;i++)
                          {
                           while(!UART1_Tx_Idle());
                           UART1_Write(ileri[i]);
                          }
          }


          //*************************************************************


          for(i=0;i<15;i++)
                           {
                            UART1_Write(pre[i]);
                           }
          for(j=0;j<10;j++)
          {
                         for(i=0;i<3;i++)
                         {
                          while(!UART1_Tx_Idle());
                          UART1_Write(geri[i]);
                         }
          }

             for(i=0;i<15;i++)
                           {
                            UART1_Write(pre[i]);
                           }
            for(j=0;j<10;j++)
            {
                           for(i=0;i<3;i++)
                           {
                            while(!UART1_Tx_Idle());
                            UART1_Write(dur[i]);
                           }
            }

       }
}

Приемник (Arduino):

// receiver.pde
//
// Simple example of how to use VirtualWire to receive messages
// Implements a simplex (one-way) receiver with an Rx-B1 module
//
// See VirtualWire.h for detailed API docs
// Author: Mike McCauley ([email protected])
// Copyright (C) 2008 Mike McCauley
// $Id: receiver.pde,v 1.3 2009/03/30 00:07:24 mikem Exp $

#include <VirtualWire.h>

const int led_pin = 13;
const int receive_pin = 12;

void setup()
{
    delay(1000);
    Serial.begin(9600); // Debugging only
    Serial.println("setup");

    // Initialise the IO and ISR
    vw_set_rx_pin(receive_pin);
    //vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2400);  // Bits per sec

    vw_rx_start();       // Start the receiver PLL running

    pinMode(led_pin, OUTPUT);
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
    int i;

        digitalWrite(led_pin, HIGH); // Flash a light to show received good message
    // Message with a good checksum received, dump it.
    Serial.print("Got: ");

    for (i = 0; i < buflen; i++)
    {
        Serial.print(buf[i], HEX);
        Serial.print(' ');
    }
    Serial.println();
        digitalWrite(led_pin, LOW);
    }
}

Я пробовал этот код; но не вышло ... Есть другой код;

void setup() {
  Serial.begin(2400);


}

void loop() {
  if (Serial.available() > 0){
      Serial.println(Serial.read());
    }

}

Перед тем, как попробовать; Я подключил вывод данных приемника к выводу RX Arduino ...

Я обычно получал 0 байт. I

Не получилось так, как я хотел ...


person PIC16F84A    schedule 09.09.2016    source источник
comment
Сначала проверьте обе стороны независимо друг от друга, используя приемник или передатчик, который, как известно, работает должным образом. Когда у вас работают обе стороны, попробуйте соединить их вместе, есть вероятность, что это не сработает, поэтому вам придется исследовать настройки подключения (скорость передачи, четность, сама проводка и т. Д.)   -  person Gianluca Ghettini    schedule 09.09.2016
comment
Спасибо; Я уже пробовал оба модуля с двумя картинками раньше, и это сработало ... Как я могу соединить их вместе?   -  person PIC16F84A    schedule 09.09.2016
comment
Убедитесь, что они используют одинаковую скорость передачи и все остальное. Работают ли они на одном и том же уровне напряжения? Соедините gnd вместе и линию tx одного с линией rx другого   -  person Gianluca Ghettini    schedule 10.09.2016
comment
Спасибо; проблема решена ... Видимо уже хорошо работало. Пояснения к ответу, который я написал ...   -  person PIC16F84A    schedule 10.09.2016


Ответы (1)


РЕШЕНО

Тесты, которые я сделал до сих пор, уже брали истинные данные, но я рассматривал их как числа ...

Вот почему я не мог понять, что это хорошо работает.

Давайте посмотрим на коды;

Передатчик:

То же, что и код передатчика в вопросе

Arduino (приемник):

char x, msg[6];
int i= 0;

void setup() {
  Serial.begin(2400);


}

void loop() {
  if (Serial.available() > 0){
      msg[i] = Serial.read();
      if (msg[0]=='f' || msg[0] == 'b' || msg[0] == 'd'){
          i++;
        }
      if (i==3){
          Serial.println(msg);
          i = 0;
          msg[0]=0;
        }
    }

}



msg[0]=='f' || msg[0] == 'b' || msg[0] == 'd'

Целью сравнения выше является отлов сообщений "frw", "bck" или "dur", которые я отправил передатчику ...

Контакт данных приемника должен быть подключен к контакту RX Arduino ...

person PIC16F84A    schedule 10.09.2016