Arduino Örnek alma

Katılım
29 Kas 2008
Mesajlar
22
Puanları
1
Yaş
37
Merhaba arkadaşlar analog bir sinyal üzerinden istediğim bölümünden 10 us luk bir kaç örnek almak istiyorum bunu arduinoda nasıl yapabilirim
 

FakirMaker

Paylaşımcı üye
Katılım
5 May 2009
Mesajlar
809
Puanları
106
Merhaba arkadaşlar analog bir sinyal üzerinden istediğim bölümünden 10 us luk bir kaç örnek almak istiyorum bunu arduinoda nasıl yapabilirim

Alamazsın. Atmega işlemcisinin minimum çevirme hızı 100us dir. 10us lik bir örnekleme yapamaz.

On ATmega based boards (UNO, Nano, Mini, Mega), it takes about 100 microseconds (0.0001 s) to read an analog input, so the maximum reading rate is about 10,000 times a second.

https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/
 
Konu Sah
Katılım
29 Kas 2008
Mesajlar
22
Puanları
1
Yaş
37
Alamazsın. Atmega işlemcisinin minimum çevirme hızı 100us dir. 10us lik bir örnekleme yapamaz.



https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/
Sorumu soyle duzelteyim mesela bir bobine pulse gonderiyoruz pulse sinyalini kestigimizde bobin uzerinde zit emk olusuyor bu emk atiyorum 50 us ta sonumleniyor yani 0v a geliyor ben bu sonumlenmenin 40.us taki voltaji okumak istiyorum mesela bir volt adc karsiligi atiyorum200 se ben bunu anlik olarak okumak istiyorum
 

FakirMaker

Paylaşımcı üye
Katılım
5 May 2009
Mesajlar
809
Puanları
106
Atmega çiplerde okuma işlemini motor durduğu anda başlatsan bile 100mikrosaniye sonra cevap alırsın. 40us bulmak zor. Stm32 kullanırsan şansın artacaktır. 1us örnekleme hızı var sanırım. Harici kesmeyle motorun durduğu anı farkedip 39us sayıp örneklemeye başlaması gerekir. Lakin hiçbir çip sana birebir 40us değerini vermez. Osiloskopla kalibre etmelisin.
 
Konu Sah
Katılım
29 Kas 2008
Mesajlar
22
Puanları
1
Yaş
37
Atmega çiplerde okuma işlemini motor durduğu anda başlatsan bile 100mikrosaniye sonra cevap alırsın. 40us bulmak zor. Stm32 kullanırsan şansın artacaktır. 1us örnekleme hızı var sanırım. Harici kesmeyle motorun durduğu anı farkedip 39us sayıp örneklemeye başlaması gerekir. Lakin hiçbir çip sana birebir 40us değerini vermez. Osiloskopla kalibre etmelisin.
Anladim tesekkur ederim peki adc yi bir kere okumak icin hangi komutu kullaniyoruz analogRead komutuyla giriste degisken sinyali surekli okuyorum tek seferlik okumak istiyorum yani bi kere okuyup onu bi degiskene kaydetmek istiyorum sonra o degeri baska bi degerle karsilastiricam
 

FakirMaker

Paylaşımcı üye
Katılım
5 May 2009
Mesajlar
809
Puanları
106
Anladim tesekkur ederim peki adc yi bir kere okumak icin hangi komutu kullaniyoruz analogRead komutuyla giriste degisken sinyali surekli okuyorum tek seferlik okumak istiyorum yani bi kere okuyup onu bi degiskene kaydetmek istiyorum sonra o degeri baska bi degerle karsilastiricam
Sürekli okumanın sebebi loop içerisinde kullanman, aşağıdaki gibi harici kesmeye bağlaman gerekiyor ki sadece motor durduğunda okusun.

C++:
const uint8_t motorPin = 2;
const uint8_t adcPin = A0;
volatile uint16_t adc_degeri;

void setup() {
  pinMode(interruptPin,INPUT);
  attachInterrupt(digitalPinToInterrupt(interruptPin),kesmeFonk,FALLING);
}

void loop() {

}

void kesmeFonk() {
  adc_degeri = analogRead(adcPin);
}
 

Bunalmis

Katılımcı Üye
Katılım
4 Şub 2007
Mesajlar
398
Puanları
56
ADC pininin onune sample/hold ya da trace/hold devresi koyarsin.

Bobini enerjilersin. Enerjisini kesersin ve 40 uS sonra hold sinyali uretirsin. Bu esnada bobindeki emknin degeri analog olarak saklanmis olur. Daha sonra da bu degeri ADC ile olcersin.

Fakat zamanlamasi kritik islemler icin gerekirse low level kodlama yapman gerekir.

Altin arayacaksin galiba.
 
Konu Sah
Katılım
29 Kas 2008
Mesajlar
22
Puanları
1
Yaş
37
Sürekli okumanın sebebi loop içerisinde kullanman, aşağıdaki gibi harici kesmeye bağlaman gerekiyor ki sadece motor durduğunda okusun.

C++:
const uint8_t motorPin = 2;
const uint8_t adcPin = A0;
volatile uint16_t adc_degeri;

void setup() {
  pinMode(interruptPin,INPUT);
  attachInterrupt(digitalPinToInterrupt(interruptPin),kesmeFonk,FALLING);
}

void loop() {

}

void kesmeFonk() {
  adc_degeri = analogRead(adcPin);
}
Cok tesekkurler yardimin icin
 
Konu Sah
Katılım
29 Kas 2008
Mesajlar
22
Puanları
1
Yaş
37
ADC pininin onune sample/hold ya da trace/hold devresi koyarsin.

Bobini enerjilersin. Enerjisini kesersin ve 40 uS sonra hold sinyali uretirsin. Bu esnada bobindeki emknin degeri analog olarak saklanmis olur. Daha sonra da bu degeri ADC ile olcersin.

Fakat zamanlamasi kritik islemler icin gerekirse low level kodlama yapman gerekir.

Altin arayacaksin galiba

ADC pininin onune sample/hold ya da trace/hold devresi koyarsin.

Bobini enerjilersin. Enerjisini kesersin ve 40 uS sonra hold sinyali uretirsin. Bu esnada bobindeki emknin degeri analog olarak saklanmis olur. Daha sonra da bu degeri ADC ile olcersin.

Fakat zamanlamasi kritik islemler icin gerekirse low level kodlama yapman gerekir.

Altin arayacaksin galiba.
Altin aramaktan ziyade isin hobi elektronik kismindayim daha once analog devreler yaptim smdi mikro islemcili olarak kendm bisiler yapmaya calisiyorum ogrenme ve keyif amacli diyebiliriz
 

Bunalmis

Katılımcı Üye
Katılım
4 Şub 2007
Mesajlar
398
Puanları
56
Coktandir el atmak istedigim bir konuyu aklima getirdi bu sorunuz.
Pals enjeksiyonu teknigi ile altin arama duzenegini baba bir islemci ile full digital yapmak.
 

Forum istatistikleri

Konular
119,261
Mesajlar
839,083
Kullanıcılar
432,472
Son üye
EFETASLAK

Yeni konular

Üst