GPIO analog ve dijital bilgisini anlama


11

GPIO'yu anlamaya çalışıyorum ve bir sürü farklı blog yayını okudum ve sanırım anlamaya yakınım, ancak hala birkaç şeyle mücadele ediyorum.

GPIO'ya sadece ikili değerlerle çalışabilmek için birkaç referans gördüm, ancak değerin 0-255 arasında olabileceğini söyleyen diğer gönderiler. Bunun analog ve dijital GPIO arasındaki fark olduğunu varsayıyorum. Bu doğru mu? Tek bir GPIO pininin hem analog hem de dijital olarak hareket etmesi mümkün müdür?


Bazı cevapların devamı olarak ... İkili değer bir dijital giriş veya çıkışa karşılık gelir. 1 ("hi" veya "on" olarak adlandırılan kaynak voltajı olmalıdır) veya 0 (0V, "lo" veya "off" olarak adlandırılır) olabilir. Bu 1 bit çözünürlük. Bir analog giriş, tipik olarak 0V ila VCC (kaynak voltajı) arasında bir aralık olabilir. 8 bit çözünürlüğe sahip bir dijital çip, bu analog girişi 0 - 255 aralığında bir 8bit dijital sinyale dönüştürür (ikili: 00000000 - 11111111), çünkü 2 ^ 8 - 1 = 255 (ikili araç tabanı 2, 8, 8 bittir bölümü ve "- 1" çünkü dijital öğeler 1 değil 0 olarak saymaya başlar).
Kurt E. Clothier

Yanıtlar:


14

GPIO pimi bir 'genel amaçlı giriş / çıkış' pimidir. Bu varsayılan olarak yalnızca yüksek veya düşüktür (voltaj seviyeleri, yüksek mikro denetleyicinin besleme voltajıdır, düşük genellikle toprak veya 0V'dur). Ancak 'yüksek' ve 'düşük' seviyeleri genellikle besleme voltajının bir oranı olarak voltaj olarak verilir. Bu nedenle, genellikle besleme voltajının% 66'sının üzerindeki herhangi bir şey mantık seviyesi 'yüksek' olarak kabul edilir, bu da bazı düşük voltajlı cihazların, yüksek 'yüksek' olarak kabul edilen seviyeye düştüğü sürece yüksek voltajlı cihazlarla konuşabileceği anlamına gelir. Örneğin 1,8–2,7 V düşük güçlü bir mikro denetleyici veya GPS alıcısı, 5V mikro denetleyiciye doğrudan iletişim kurmada sorun yaşayacaktır, çünkü düşük voltajlı cihazın 'yüksek' olarak gördüğü şey, yüksek voltajlı cihazın hiç yüksek olduğunu düşünmeyecektir. Bu, GPIO'yu giriş pimi olarak kullanmak içindir,

Bazen 'analogdan dijitale' (ADC) dönüştürücü gibi diğer yerleşik aygıtlar tarafından kullanılacak GPIO pinini yapılandırarak 'analog' değerler için bir SINGLE pin kullanabilirsiniz. Pim ADC'deki bir kanala ayarlanmıştır ve bu normal bir GPIO pimi değil, şimdi ADC'ye bir giriş görevi görür. Daha sonra ADC'yi örnek alacak şekilde ayarlayabilir ve 10 bit çözünürlükse, ADC'nin 0-1024 gibi sayılar için sonuç kayıt değerini okuyabilirsiniz.

Birisinin belirttiği gibi, GPIO pimi, genellikle GPIO geçişi için düşük hızlarda Darbeli Genişlik Modülasyonu (PWM) sinyalinin etkisini vermek için yazılımda kullanılabilir. Çoğu mikrodenetleyici, çıkış pimi olarak bir GPIO pini kullanmak üzere yapılandırılabilen özel PWM jeneratörlerine sahiptir ve bunlar, bir PWM sinyali oluşturmak için GPIO'yu kontrol etmek için yazılım kullanmaktan çok daha hızlı ve çok daha kararlıdır. PWM 'ortalama' veya '%' stil sinyalleri için kullanılır ve loş ışıklar gibi şeyleri yapmanıza ve motorun hızını kontrol etmenize olanak tanır.

GPIO pinleri genellikle Portlar olarak adlandırılan gruplar halinde düzenlenir. Küçük denetleyicilerde, 8 bit mimari olabilirler, bu nedenle bağlantı noktaları genellikle 8 lotta gruplandırılır ve bunların değerleri, bunların mantık yüksek / düşük değerlerini temsil eden bir 'veri kaydı' okunarak aynı anda okunabilir. iğneler. Benzer şekilde, pinleri çıkış olarak ayarlayabilir ve daha sonra bir veri kaydına 8 bit yazabilirsiniz ve mikrodenetleyiciler GPIO denetleyicisi, kaydedicinin değiştirilen değerlerini okuyacak ve yeni ayarladığınız değere bağlı olarak pimi yüksek sürecek veya pimi aşağı çekecektir.

Raspberry Pi ve BeagleBone'daki gibi ARM Cortex A8 ve A9 gibi daha yeni kontrolörlerde, GPIO kontrolörleri ve farklı seçenekleri çok karmaşıktır. 32 bit mimari kullanıyorlar, bu nedenle GPIO pinlerinin çoğu, hepsi kullanılabilir olmasa bile, 32 pinli bloklar halinde düzenlenmiştir (bazıları adanmış veya etkinleştirilmemiş olabilir). BeagleBone (daha önce üzerinde çalıştığım), büyük miktarda pim için gerçekten harika seçeneklere sahip ve bazen şeyler için belirli pimlerin özel modlarını ayarlamanıza izin veren bir 'pin mux' aracı kullanmanız gerekecek PWM, darbe yakalama, zamanlayıcı çıkışları, analog (ADC) kanal girişleri ve hatta (çekirdekte BeagleBone'da) ARM çekirdeğinde bulunan endüstriyel alt işlemcilerle eşleme gibi, ancak bağımsız işlemciler olarak kabul edilir ve sırayla kendi pin haritalamalarına ihtiyaç duyar dış dünyaya bağlı olmak.


"TEKLİ pin" analog "değerler için nasıl kullanılabilir" diye bir örnek verebilir misiniz?
Pavel

@ JimJim2000 çıkış üzerinde düzgün bir analog "ortalama" voltaj üretmek için bir RC filtreden sadece bir açma / kapama veya uygun PWM akışı.
KyranF

7

Büyük olasılıkla, PWM yazılımına sahip bir GPIO pin kullanan Arduino'nun analog çıkışına atıfta bulunuyorsunuz . GPIO'nun tipik olarak üç durumu vardır. Çıkış Yüksek, Çıkış Düşük ve Giriş / Yüksek Z (çıkışı etkilemediği Yüksek Empedans).

PWM, bir ortalama (Görev Döngüsü) oluşturmak için bir çıkışı Çıkış Yüksek'ten Çıkış düşük (periyot) arasında hızla değiştirir ve analog değere benzeyen bir şeye izin verir. İkili GPIO'yu% 50 (veya 128) görev döngüsünde değiştirerek, çıktı yine de ikiliktir, ancak Yüksek ve Düşük arasında ortalamaların yarısı kadardır.

Bir ampul düşünün. Açık veya Kapalı olarak görürsünüz. Ancak saniyede 60 kez gerçekten açılıp kapanıyor, o kadar hızlı ki, yanıp sönmenin gerçekten hızlı olduğunu fark etmiyorsunuz. Ancak ampulü manuel olarak gerçekten yavaşça açıp kapatın ve yanıp söndüğünü fark ettiniz. 255'e göre, bu% 100 açık demektir ve 255'ten az ise% 100 açıktır.

İkili GPIO, bu şekilde 255 durumlu bir Analog pin gibi davranabilir.


Teşekkürler @Passerby, bu çok daha net. Özellikle arduino'ya değil, ahududu pi ve beaglebone'a bakıyorum. Söylediğiniz şey, herhangi bir iğnenin 0 ile 255 arasında bir değere sahip olabileceği anlamına mı geliyor? Ben bir değer ikili olabilir diyor diğerleri vs bir değer 0-255 olduğunu söyleyen belgeler arasında karışıyorum.
pedalpete

1
@pedalpete RPI ve Arduino, kalabalık ve fikirlerde çok fazla örtüşme var. Ancak 0 ila 255 arasında bir PWM isteğe bağlıdır. 0 ila 65535 veya 0 ila 16 olabilir. 0 ila 255, 8 bitlik kesinliktir. 255 veya 65535 veya% 100 her neyse. Bir GPIO'nun yalnızca İkili Açık ve Kapalı vardır, ancak PWM'yi yalnızca açık veya kapalı olmasından daha fazlasına sahip olabileceğini iddia etmek için kullanırsınız. Yararlı ve kasıtlı bir optik yanılsamadır.
Passerby

2
Bir ampul saniyede 60 kez yanıp sönmez. Filaman ısınır ve ısınır
Scott Seidman

0

GPIO biti 0 veya 1 olabilir. 8 ardışık bitten oluşan 8 bitlik bir GPIO portu, 00000000 ile 11111111 veya 255 ondalık arasında olabilir. Bunun "analog" kavramı ile ilgisi yoktur.


Teşekkürler Scott, sanırım şimdi eskisinden daha fazla kafam karıştı. GPIO bağlantı noktası nedir? GPIO pinim varsa (Raspberry Pi'de örnek), her pin bir port olarak kabul edilir mi? Eğer öyleyse, her pim belirtilen 0-255 ondalık aralıkla çalışabilir mi?
pedalpete

Son sorumu görmezden gel, şimdi bir liman hakkında ne demek istediğini anlıyorum.
pedalpete
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.