Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: veliusta - 30 Ocak 2015, 03:01:59

Başlık: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: veliusta - 30 Ocak 2015, 03:01:59
(http://www.1resimyukle.com/images/2015/01/30/0.png)

Merhaba. ISIS'te çizdiğim gibi devresi.
Amaç: Haberleşme koparsa led sürekli sönük kalacak.

Arduino'da hangi komutu kullanacağımı bilmiyorum. Bende CCS C kullanarak yaptım.

ALICI:
boolean KONTROL=0;

void setup() {
  pinMode(9, INPUT);
  pinMode(3, OUTPUT);
}

void loop(){
  if(getch()=='V'){
   if(getch()=='E'){
    if(getch()=='L'){
     if(getch()=='I'){
      if(KONTROL==0){
      digitalWrite(3, HIGH);
    }
    else{
      KONTROL=1;
     digitalWrite(3, LOW);
    }
   }
  }
}
}
}


VERİCİ:

void setup() {
  pinMode(9, OUTPUT);
}

void loop(){
  putc('V');
  putc('E');
  putc('L');
  putc('I');
}


<VirtualWire.h> veya <SoftwareSerial.h> kütüphaneleri kullanarak mı yapacağım. Nasıl yapabilirim? Yardım edin.
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: muhendisbey - 30 Ocak 2015, 08:15:40
1-wire diye aramalısın. Bunun en basit örneği DS18B20 ve ibutton (namı değer akbil) uygulamalarıdır. 2 arduino için de kullanabilirsin.
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: Kabil ATICI - 30 Ocak 2015, 09:15:18
GND hatlarını da birleştirmen gerekir. 1 wire olayında gnd haricinde 1 kablo olduğunu tanımlar.
Tek yönlü haberleşme yapacaksan UART haberleşmesini de kullanabilirsin. 0. ve 1. bacaklar.
Örneğin UART ile ilgili örnek Arduino programın örnekleri içinde var. Türkçe karakter kullanma sıkıntı yapar.  sadece bu seri port aynı zamanda programlama icin kullanılır.
uart için verici örneği koyuyorum gerisin sen tamamla.

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
Serial.print("VELI");
}
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: hasankara - 30 Ocak 2015, 09:17:12
uart modülü ile de one wire (tek data hattı ile çift yönlü iletişim) yapabilirsin.
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: veliusta - 30 Ocak 2015, 09:21:09
ambar7 hocam dediğinizi yaptım fakat RX veya TX bir kabloyu çıkartırsam haberleşme duruyor.
#include <SoftwareSerial.h>
SoftwareSerial Haberlesme(11, 10); // RX, TX
char deger;

void setup(){
  Serial.begin(9600);
  Haberlesme.begin(9600);
}

void loop(){
if (Haberlesme.available()>0){
   deger = Haberlesme.read();
   Serial.print(deger);
  }
}


mesaj birleştirme:: 30 Ocak 2015, 23:22:26

Verici kısmıda böyleydi;

#include <SoftwareSerial.h>
SoftwareSerial Haberlesme(11, 10); // RX, TX

void setup(){
  Haberlesme.begin(9600);
}

void loop(){
Haberlesme.write("V");
Haberlesme.write("E");
Haberlesme.write("L");
Haberlesme.write("I");
}
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: Kabil ATICI - 30 Ocak 2015, 09:33:21
Kablo fark etmiyorsa, orasını bilmem (GND hattının birbirine bağlı olduğunu varsayıyorum). Yalnız benim söylediğim doğrudan UART modülün olduğu yer.0 ve.1 bacaklar. donanım UART.
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: veliusta - 30 Ocak 2015, 09:46:01
Alıntı yapılan: ambar7 - 30 Ocak 2015, 09:33:21
Kablo fark etmiyorsa, orasını bilmem (GND hattının birbirine bağlı olduğunu varsayıyorum). Yalnız benim söylediğim doğrudan UART modülün olduğu yer.0 ve.1 bacaklar. donanım UART.

Denedim aynı olmadı. İki kablo bağlı olmadığı sürece duruyor.
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: muhendisbey - 30 Ocak 2015, 10:09:32
UART'ta olsa SPI'da olsa 1-Wire da olsa referans değerin anlaşılması (siz bunu devrenin tamamlanması için olarak da düşünebilirsiniz. )için her zaman GND veya VCC bağlantısından en az birinin olması gereklidir. Genelde GND tercih edilir. Söylemeye gerek olmadığını düşünmüştüm.
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: Kabil ATICI - 30 Ocak 2015, 10:21:50
Alıcı:

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(3,OUTPUT); //3 nolu bacak üzerindeki LED
  digitalWrite(3,LOW);

}

void loop() {
  digitalWrite(3,LOW);
  // put your main code here, to run repeatedly:
   while (Serial.available() > 0) {
     if (Serial.read() == 'A') {
    digitalWrite(3,HIGH); 
    delay(100);
    }
}

}


verici:
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.print("A");
}


bu sistem bu şekilde çalışıyor. sadece delay bölümünü ayarlama gerekiyor.

1. arduino                   2.arduino

RX---------------------TX
GND-------------------GND
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: veliusta - 30 Ocak 2015, 10:57:37
Evet oluyor fakat Tek Kablo kullanmam gerekiyor. IR Alıcı Vericilerini inceleyeceğim.

mesaj birleştirme:: 30 Ocak 2015, 11:01:43

Alıntı yapılan: muhendisbey - 30 Ocak 2015, 10:09:32
UART'ta olsa SPI'da olsa 1-Wire da olsa referans değerin anlaşılması (siz bunu devrenin tamamlanması için olarak da düşünebilirsiniz. )için her zaman GND veya VCC bağlantısından en az birinin olması gereklidir. Genelde GND tercih edilir. Söylemeye gerek olmadığını düşünmüştüm.

Ah evet doğru. O zaman optikuplör ile yapsaydık nasıl yapardık ?
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: Kabil ATICI - 30 Ocak 2015, 11:03:34
Tek kablo ile iletişim yapabileceğin tek olay radyo frekansı sistemleridir. Yoksa her halükarda 2 kablo gerekir ki biri GND'dir.

İllede tek kablo üzerinden iletişim diyorsan fiberoptik sistemleri deneyebilirsin.
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: veliusta - 30 Ocak 2015, 11:13:58
(http://www.1resimyukle.com/images/2015/01/30/015.png)

Peki böyle olur mu?

mesaj birleştirme:: 30 Ocak 2015, 11:21:15

Hocam birde şunu sorayım bu kodun anlamı ne " (Serial.available() > 0) "
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: polleme - 30 Ocak 2015, 11:29:04
Bu optokupler elemanı iki tel ile çalıştığından ve ayrılamadığından neticede iki kart arasında yine iki tel kullanılmış oluyor.

(Serial.available() > 0) komutu, seri portta bir data olup olmadığını kontrol etmek içindir, data varsa değerin sıfırdan büyük demektir, bu durumda olan değer okunur. Data yoksa okuma yapmanın da anlamı olmaz.
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: muhendisbey - 30 Ocak 2015, 23:57:58
@veliusta aslında istediğin şey parazitik beslemeli 1-wire. 2 arduino arasında kurabilir misin, kurarsan verim alabilir misin açıkçası hiç denemedim.
1 wire hattına pull up direnci bağlıyorsun (1k~10k) ve bu yöntemle haberleşiyorsun. 18B20 sensörünün bir özelliğiydi bu.
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: baran123 - 31 Ocak 2015, 00:10:15
Vericiden bir pininden high gondersen diger tatafta bir pinde baksan high mi diye degilse islem yapsan olmaz mi ?
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: veliusta - 31 Ocak 2015, 08:49:41
Fiberoptik ile yaptım Veri gönderiyor.

Sadece 'V' harfini kullanınca sorun yok ama 4 Harf göndermeli yapamadım.
(http://www.1resimyukle.com/images/2015/01/31/67.png)
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: Kabil ATICI - 31 Ocak 2015, 09:34:10
gören de C de ilk defa program yazdığınızı sanır.
Yaptığın kurduğun mantıkta sıkıntı var. diyorsun V geldi ise E geldi ise  vs... vs...
Programın işleme hızı veri gelme hızından daha yüksektir. Ya while ile yapacaksın , ama o zaman yanlış veri gelirse kilitlenir. Yada bayrak kullanacaksın.

örneğin

int bayrak = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  //ön ayarlar

}

void loop() {
  byte gelen_deger;
  // put your main code here, to run repeatedly:
  while (Serial.available() > 0) {
    gelen_deger = Serial.read();
    if (gelen_deger == 'V') {
      bayrak = 1;
    }
    if (gelen_deger == 'E' && bayrak == 1) {
      bayrak = 2;
    }
    if (gelen_deger == 'L' && bayrak == 2) {
      bayrak = 3;
    }
    if (gelen_deger == 'I' && bayrak == 3) {
      bayrak = 0;
      //burada ne yapacaksan
    }
  }

}
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: muhendisbey - 31 Ocak 2015, 10:21:59
Programınız hatalı. Tek göndermek ve okumak yerine toplu şekilde "veli" gönderin "veli" olarak okuyun.
Arduino'daki find until komutunu kullan. Böylece daha mantıklı okuma yaparsın. Cümlende "veli" kelimesi geçtiği anda sistem tetiklenir.
Yani cümle "asdasdasdveliasdasd" olsun. Buradan "veli" yi doğrudan bulur.
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: veliusta - 31 Ocak 2015, 12:09:28
Olmadı.

#include <SoftwareSerial.h>
SoftwareSerial Haberlesme(11, 10); // RX, TX
int bayrak = 0;
char gelen_deger;

void setup(){
  Haberlesme.begin(9600);
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
}

void loop(){
  while (Haberlesme.available() > 0) {
    gelen_deger = Haberlesme.read();
    if (gelen_deger == 'V') {
      bayrak = 1;
    }
    if (gelen_deger == 'E' && bayrak == 1){
      bayrak = 2;
    }
    if (gelen_deger == 'L' && bayrak == 2){
      bayrak = 3;
    }
    if (gelen_deger == 'I' && bayrak == 3){
      bayrak = 0;
      digitalWrite(13, HIGH);
     }
    }
  }


Kabloluda yaptım olmuyor.Kablo bağlı programlamasını yapıyorum. LED yanmıyor. İletişim kablosunu takıp çıkarıp takıp çıkarıktan sonra rayına otuyor.
Ben daha önce CCS de yapmıştım. Bide orada deneyim.
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: muhendisbey - 31 Ocak 2015, 15:28:25
if (Serial.available()) {

while(Serial.findUntil("veli", "\r\n")){
while(Serial.available() == 0) ;
digitalWrite(13, HIGH);
}

yukarıdaki kodu dene.
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: veliusta - 01 Şubat 2015, 00:34:19
(http://www.1resimyukle.com/images/2015/01/31/945.png)

CSS de aynı sorun. Buton'a 1 veya 2 kez basmak gerekiyor iletişim sağlanması için.

@muhendisbey hocam şimdi senin dediğini bi deneyim.
Olmaz ise IR Haberleşme kütüphanesi ile yapacağım  o da olmaz ise Mors halfebesi ile haberleşeceğim artık :)
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: baran123 - 01 Şubat 2015, 00:50:06
Seri haberleşme kullanmışsın ama a0,a1 yapmışsın hata yok mu orada ?
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: Kabil ATICI - 01 Şubat 2015, 01:25:08
Verici bölümünde karakter göndermeler arasına 5-10ms bir gecikme ekleyip deneme imkanın var mı?
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: veliusta - 01 Şubat 2015, 04:42:04
(http://www.1resimyukle.com/images/2015/02/01/e.png)

Oldu hocam Teşekkürler. Fiberoptik ile denedim. Sorunsuz çalışıyor. Yaptığım mantık doğrumudur?
Sağolun.
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: Kabil ATICI - 01 Şubat 2015, 09:33:27
evet.
Başlık: Ynt: Arduino Tek Kablo Üzerinden Haberleşme
Gönderen: muhendisbey - 01 Şubat 2015, 16:47:22
Yaptığın mantık hatalı. Kodlardan veli'yi okumak için bu kadar işlem yapmana gerek yok.

Serial.println("VELI") veya Serial.print("VELI\r\n") ile gönderme yapabilirsin.

Alırken de daha önceki mesajımda dediğim gibi find.until komutuyla doğrudan "VELI" diye okursun.
kodunda fazladan bayrak değişkeni var
AND işlemi var
Bekleme işlemi var. Daha ne olsun.