Delay veya milis kullanmadan timer oluşturmak?

birkan

Aktif Üye
Paylaşım Ekibi
16 Tem 2019
191
44
113
istanbul
Cinsiyet
Erkek
oluşturulur atmegaların internal timerlarını kullanabilirsn

çin kartlarında kristal kaynaklı zaman farkı oluyor.
 

Seelenkind

Yeni Üye
Platin Üye
3 May 2020
26
21
3
Almanya
www.hilmi-soenmez.com
İsim
Hilmi Sönmez
Cinsiyet
Erkek
Almancadan Google amcaya tercüme ettirdim .
Artık anlaşıldığı kadar herkes içinden bir şeyler alsın

----------------------------------------------------------------------------------------

Zamanlayıcılar, sayıcılar ve kesmeler
Pragmatik Mimar 08/01/2016 Michael Stal


Zamanlayıcıların konusu bu ekstra baskıda ele alınmıştır. Sadece delay () işlevini çağırmaktan daha fazlasıdır.

Gecikme söz konusu olduğunda, delay () işlevi sadık ve sürekli yoldaşımız olmuştur. Arduino kütüphanesinde standart olarak mevcuttur ve milisaniye kesin bekleme sürelerine izin verir. Peki daha ne istiyorsun? Zaman işleyişi, yalnızca gerçek zamanlı sorular için değil, gömülü sistemlerin geliştirilmesinde merkezi bir rol oynar. Ancak delay (), karmaşık uygulama alanları için değil, kaba uygulamalar için bir araçtır.

Basit işlevler à la delay () veya millis () ile ilgili sorun nedir?

Sınırlı çözünürlük: Milisaniye cinsinden doğruluk, insan algı ölçeğinde bekleme süreleri için kabul edilebilir görünebilir. Bu karar, teknik olaylar bağlamında yetersizdir. Arduino kartlarında bir ATMega veya ATTiny CPU ile, genellikle 8 MHz veya 16 MHz saat frekanslarıyla ilgileniyoruz. 16 MHz'de, tek bir saat 0.0000000625 saniye sürer, bu bir milisaniyeye (0.001 saniye) kıyasla 1: 16.000 faktördür. ATMega her milisaniyede binlerce makine komutunu işler. Bu büyüklükteki tepki süreleri kabul edilebilir bir şey değildir.
Aktif bekleme: Gecikme (42) gibi bir gecikme sırasında Arduino çizimi aktif beklemeye mahkumdur. Milisaniye cinsinden seçilen bekleme süresi de genellikle sloganına göre kaba bir tahminin sonucudur: "Başlatma muhtemelen yaklaşık 2 saniye sürer. Güvenlik için sadece 3 saniye kullanıyoruz." Bu verimsizliğe yol açar.
Esneklik eksikliği: delay () ile zamanlayıcı kullanımı yalnızca bekleme sürelerini entegre etmek için kullanılır. Diğer hizmetler, özellikle bir bekçi köpeği zamanlayıcısı gibi periyodik tetikleyiciler, bununla veya sadece yetersiz bir şekilde uygulanamaz.
Çip üzerindeki zamanlayıcı
Bir AVR işlemci bu tür kaba zamanlamadan memnun olsaydı, Arduino kartlarıyla birçok fonksiyonel dezavantajı kabul etmeliyiz. Örneğin, dijital bağlantı noktalarındaki darbe genişliği modülasyonu, kesin etkinlik döngülerini (görev döngüleri) ayarlayabilmek için yüksek bir zamanlayıcı çözünürlüğü gerektirir. Örneğin, bir dijital çıkışta ortalama 2,765643 V çıkış voltajına ihtiyacınız varsa, bu sadece gecikme () veya milis () olasılıklarının ötesindeki doğruluklarla elde edilebilir.

I2C veya SPI gibi veri yolu sistemlerinde, mikrosaniye aralığındaki işlemler tipik ve gereklidir. Bir program bağlı bileşenleri bu veri yolu sistemleri aracılığıyla kontrol etmek isterse, yaklaşık milisaniyelik bir çözünürlük bir gösteri durdurucu olacaktır. Son olarak, servo motorların kontrolü veya milisaniye tarafından tetiklenen zamanlayıcılar tarafından uygulanamayan ses üretimi için zaman koşullarının gerekli olduğu kanıtlanmıştır.

Önceki deneyimlerimizden Arduino kartlarının PWM, veri yolu sistemleri, servo kontrol ve ses üretimi için çok iyi destek sağladığını bildiğimiz için iki soru ortaya çıkıyor:

Bir AVR işlemcisi bunun için gereken zaman çözünürlüklerini uygulamayı dahili olarak nasıl yönetir?
Geliştiriciler olarak bu işlevlerden de faydalanabilir miyiz?
Vuruşu belirtin
Bahsedilen görevler için AVR mikrodenetleyicileri, çeşitli zamanlayıcıları, 8 veya 16 bit genişliğinde atanmış sayma kayıtları ile entegre eder. Bu kayıtlar başlangıç değeri 0 ile başlar. Artışları, yani gerçek artış, otomatik ve periyodik olarak gerçekleşir. İlgili kayıtlar taşarsa, bir zamanlayıcı taşması kesmesi tetiklenir.

Bu arada yaygın bir hata, Arduino'nun CPU'sunun zamanlayıcıları yönlendirmesidir. ATmel'in bir Arduino veya AVR mikrodenetleyicisinin zamanlayıcıları CPU veya MCU'dan bağımsızdır. Aşağıdaki tartışmalarda bu gerçeği göz önünde bulundurmalısınız.

Mümkün olan en yüksek çözünürlüğü elde etmek için, ilk yaklaşım sayaçları işlemci saati ile eşzamanlı olarak güncellemek (yani arttırmak) olabilir. Ancak, bunun büyük bir kusuru var. 16 MHz'lik bir saat frekansı varsayıldığında, 8 bitlik bir zamanlayıcının taşmasına 16 mikrosaniyeden sonra, 16-bitlik bir kaydınkinden yaklaşık 4.1 milisaniyeden sonra ulaşılır.

Bu elbette kısa zaman aralıkları için avantajlıdır. Peki ya daha uzun süreleri kapsamak istiyorsak? Bunu mümkün kılmak için, mikrodenetleyiciler ön ölçekleyiciler olarak adlandırılır. Bunlar, sistemin bir sayım kaydını artırması gereken saat döngülerinden sonra yapılandırılır. Olası değerler 8, 64, 256 veya 1024'tür. Örneğin, 1024'lük bir ön ayar ayarı, sayacı 16 MHz saat frekansında 64 mikrosaniye veya 1024 saat döngüden sonra artırır, böylece 16 bitlik bir sayaç yalnızca 4,2 saniye alır taşmaları.

Kesin aralıkları programlamak için, zamanlayıcı kayıtları si yerine sayaç okumalarıyla önceden atanabilir

orijinal link: https://www.heise.de/developer/artikel/Timer-Counter-und-Interrupts-3273309.html
 

Robotikforum.net Nedir?

  • Robotikforum.net 2020 yılında kurulup yayın hayatına başlayan ve Türkiye’de robotik kodlama alanının gelişimine katkıda bulunmak için bu alan ile ilgilenen bireylerin bir birleri ile yardımlaşmaları ve fikir danışmalarını sağlayarak daha iyi öğrenmek için her bir bireyin bilgisini ve tecrübesini alarak kendini geliştirebileceği ve sorularına cevap bulabileceği bir platform olarak kurulmuştur.

Bilgilendirme!!!

İçerik sağlayıcı paylaşım sitelerinden biri olan www.robotikforum.net Adresimizde T.C.K 20.ci Madde ve 5651 Sayılı Kanun'un 4.cü maddesinin (2).ci fıkrasına göre TÜM ÜYELERİMİZ yaptıkları paylaşımlardan sorumludur.

Sayfamızı beğendin mi?