[ÇÖZÜLDÜ] PIC16F628A 'dan Arduino ya Veri Aktarımı
  • Elimde pic16f628a ve arduino uno var...
    Programlama dili olarak MikroC kullanıyorum.
    433 mhz transmitter ve receiver kullanıyorum.
    Amacım; PIC16F628A'dan gönderdiğim verileri Arduino'dan okumak fakat yapamadım...

    PIC16F628A devresi:
    http://i.hizliresim.com/jBWQlL.png

    Receiver'ın da en soldaki pinine Arduino'nun +5V 'unu; 2.pinine Arduino'nun 12.pinini ve en sağdaki pinine de Arduino'nun GND pinini bağladım.

    Transmitter(PIC16F628A):
    char pre[15]={'U','U','U','U','U',255,255,255,255,255,0,0,0,0,0}; // başlatma byte ları
    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++)<br /> {
    UART1_Write(pre[i]);
    }
    for(j=0;j<10;j++) //garanti olması açısından 10 kez gönderiliyor veriler...<br /> {
    for(i=0;i<3;i++)<br /> {
    while(!UART1_Tx_Idle());
    UART1_Write(ileri[i]);
    }
    }


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


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

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

    }
    }

    Receiver (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 (mikem@airspayce.com)
    // Copyright (C) 2008 Mike McCauley
    // $Id: receiver.pde,v 1.3 2009/03/30 00:07:24 mikem Exp $

    #include

    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);
    }
    }

    Bu kodu denedim; olmadı...
    Bir de şu var;
    void setup() {
    Serial.begin(2400);


    }

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

    }
    Bunu denediğimde receiver ın data pinini Arduino'nun RX pinine bağladım...
    Genellikle '0' byte ını aldım.
    İstediğim şekilde çalışmadı...

    ÇÖZÜLDÜ

    Önceki denemelerimde zaten verileri alıyormuş fakat onları sayı şeklinde görüntülediğim için doğru çalıştığını anlamamışım...
    Kodlara geçelim;
    Verici:

    Yukarıdaki verici koduyla aynı



    Arduino (Alıcı):

    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' bu karşılaştırmadaki amaç;
    Vericide gönderdiğim "frw", "bck" ya da "dur" mesajlarını yakalamak...

    Ayrıca Receiver ın data pinini Arduino'nun RX pinine bağladım.


  • verici ve alıcılar aynı tip değilmi.
    arduino 2. program standart coomm1 portundan gelenleri basar ekrana. bağlantınız doğrumu

    arduino 1.programdakı kutuphaneyı kullanmıştım ben guzel çalışıyor bağlantılarda ve voltajlarda bağlantılar tamamsa sorun olmaması lazım.
  • Evet aynı tip...
    2.programda receiver ın 2.pinini Arduino nun RX pinine bağladım; yani doğru...
    1.programda da 2.pini Arduino'nun 12.pinine bağladım; o da doğru...
    1.programdaki kütüphaneyi arduinodan-arduinoya şeklinde mi kullandınız yoksa benimki gibi mi ?
  • arduinodan arduinoya kullanmıştım basit rf433 modullerle
  • Sanırım VirtualWire kütüphanesi yalnızca arduinodan arduinoya çalışıyor...
  • sizin pic tarafında yolladığınız 15 byte lık payload a benzer yapı arduinodaki kutuphanede de var. arduino tarafı beklediği değerleri almadığı için okumuyordur. arduino tarafından devamlı aynı şeyi tx yapın pic tarafında okumaya çalışın ne geldiğine bakın yada modulun tx bacağına bakın arduino tarafında ne yolluyor anlamaya çalışın
  • Teşekkürler; sorun çözüldü.
    Meğerse zaten doğru çalışıyormuş...
    Açıklama ilk mesajda.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.