İki Arduino arasında 16 bit veri gönderimi

Başlatan cirak05, 23 Aralık 2018, 13:39:57

interrupter

mehmet ustam linke tıkladım. baktım olmuyor neşet ertaş açtım efkarlanıyorum. pes etmeyeceğim ama iyice karamsarlığa gömüldüm.

interrupter

saat 6 ve çözdüm ama çok saçma

gönderici
Serial.write(low);
Serial.write(high);


alıcı


void serialEvent() {
digitalWrite(a,LOW);
byte a=0;
if (Serial.available() > 0)
{
low= Serial.read();
high= Serial.read();

sayac=high;
sayac=sayac<<8;
sayac |=low;


}
}

mg1980

Kodun tamamı buysa sanki olmaz gibi.. Yanlış anlamadıysam " a " değişkenine önce yazıyorsunuz sonra siliyorsunuz.. kodun mantığı hakkında biraz açıklama yapabilirseniz biz de yararlanabiliriz..

muhendisbey

Alıntı yapılan: interrupter - 04 Ocak 2022, 06:03:52çözdüm ama çok saçma
Saçma olan neresi? Kod gayet mantıklı. I2C'de benzer işlemler yapıyoruz 16 bit ve üzeri verilerde.

Bu lojikte MSB (Most Significant Bit- En Önemli Bit) ve LSB (Least Significant Bit- En Az Önemli Bit) mantığında geçer.
16bitlik verinin ilk 8 biti MSB, sonraki 8 bitlik kısmı LSB'dir.
8 Bitlik register'ı olan bir donanım bunu tek satırda tutamaz. Kaldı ki halen birçok iletişim protokolü de 8 bit yani bayt üzerine kuruludur.

16 bitlik veriyi parçalamanın kolay yolu. 1111111100000000 veya 0000000011111111 ile and işlemine tabi tutabilirsin.

8'er bitten toplarken de 8 kez shift edip or işlemine tabi tutabilirsin.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

interrupter

#19
Mg1980 a ya bişey kaydedilmiyor o kadar uğraştım ki a kalmış orada. Gelen veriler low ve high değişkenine geliyor. Sistemim şöyle 7 adet slave arduiono nanom var birde master olarak Arduino Megan var Arduino mega sırası ile nanolarin bir digital pimini high yapıyor ve nanolarda belirli inputu high olunca seri porttan 2 byte veri gonderecek. Benim mantığını kuramadigim konu şu idi slaveden iki ayrı değişken gonderdigimde master tarafı iki kez serial kesme işlemine girecek diye düşünüyordum ama öyle değilmiş. Nanodan 2 byte gönderiyorum master bir kez kesmeye giriyor ve serial.read ile kesme içinde okuyorum. Olay basitmiş ama ben geç farkettim

interrupter

sorunlarım bir bitmiyor kafayı yedim  simdiiki sorunumda su  while  ın içerisindeki iken serial kesme nedengirmez;

void loop()
{


while(level==1)
{
   box.clear();
 box.print(sayac);
 delay(100);
}
delay(1000);

    }


void serialEvent() {
digitalWrite(a,LOW);
byte sonuc=0;
if (Serial.available() > 0)
{
low= Serial.read();
high= Serial.read();
sonuc=Serial.read();

sayac=high;
sayac=sayac<<8;
sayac |=low;


if(sonuc==67)
{
level++;
}
}
}

mg1980

delay(1000) ,i mesela 1ms,lik for döngüsü şeklinde yazıp dener misiniz.. keza delay(100) de..

muhendisbey

Alıntı yapılan: interrupter - 05 Ocak 2022, 04:08:09simdiiki sorunumda su  while  ın içerisindeki iken serial kesme nedengirmez
serialEvent fonksiyonu gerçek bir interrupt olmadığından olabilir mi?

Arduino'da interrupt'ı kullanmanın tek yolu AVR komutları ile yazmaktan geçer.
Nasıl?

#include <avr/interrupt.h>
#include <avr/io.h>

inceleyin.
Zulmü alkışlayamam, zalimi asla sevemem; Gelenin keyfi için geçmişe kalkıp sövemem.

kimlenbu

Döngü içinde

yield(); komutunu kullanıp deneyin bir de.

interrupter

sayın mühendis bey kusuruma bakmayın kesmenin yalanı gerçeği mi olur. foruma göre çok acemiyim.

mg1980

void setup() içinde kesme ayarlarını yapıyor musunuz?

interrupter

mg ustam bilmiyorum işte o kadar bilgim yok arastırıyorum ama bisey bulamadım bikaç bisey buldum onlarda ya hata veriyor yada tepki vermiyor. 


mg1980

Siz hallettim dediğiniz için kodunuzun tamamını koymak istemediğinizi düşünmüştüm. Ben de çok uzman değilim ama biraz denemeler yapmıştım, şu anda dışardayım, bilgisayarı açtığımda benzer bir şey göndermeye çalışırım.

interrupter

Ustam slave den 16 bir veriyi gönderip masterden alabiliyorum.ama loop un içinde 5 tane ayrı while oluşturuyorum her while de bir slavenin inputunu lojik 1 yapıyorum. Slave seri veriyi gönderiyor ama master while nin içinde kaliyor. Serial event fonksiyonu kesme işlemi yapmıyor. Serialport kesmesi oluştuğunda seriden gelen veriyi alacağım ve while şartını bir diğer while in şartına arayacağım

mg1980

Bu biraz ileri seviye bir iş... ben olsam önce iki arduino arasında bu işi basit bir şekilde yapar, kesmenin çalıştığını, veri alınıp gönderilebildiğini tam anlamıyla gördükten sonra sizin dediğiniz boyuta yükseltirdim işi... siz nasıl yaptınız bilemiyoruz.. çalışan kodunuzu da tam olarak koyarsanız yardımcı olabilecek daha iyi bilenlerimiz çıkabilir..