Analog PIN'e bit tabanlı yaz
Bitsel işlenenleri öğrenmeye yeni başlıyorum ve işte sorum. Bunu yapmak için:
pinMode (13, OUTPUT);
digitalWrite (13, HIGH);
bitwise bunu yapabilirim:
DDRB |= B00100000; //set PIN13 as OUTPUT
PORTB |= B00100000; //set PIN13 HIGH
ama bunu nasıl yapabilirim:
analogWrite(9, 200);
DEC numaralarını BIN'e nasıl dönüştüreceğimi biliyorum, ancak bu numarayı PWM PIN'e nasıl gönderebilirim? Web'de iyi bir örnek bulamıyorum .. Teşekkür ederim!
Yanıtlar
Not, hangi Arduino'yu kullandığınızı belirtmediniz. Burada Atmega328p tabanlı bir Arduino (Uno, Nano, Mini) varsayıyorum, ancak ilke bu donanıma sahip her AVR mikro denetleyiciyle çalışır).
İle bir analogWrite()iğneden bit düzeyinde veri göndermiyorlar. Bu pini belirli bir frekansta ve belirli bir görev döngüsünde ayarlamak için donanım Zamanlayıcısını yapılandırır. Böylece analogWrite()mikro denetleyicinin içinde tamamen farklı bir donanım parçasını harekete geçirir.
Bunu Arduino işlevi olmadan yapmak için analogWrite()önce hangi yöne gideceğinize karar vermelisiniz:
- Donanım Zamanlayıcısı aracılığıyla bir kesinti oluşturabilir ve ardından istenen pini ISR içindeki yazılımla ayarlayabilirsiniz (bu size pini serbestçe seçmenizi sağlar, ancak sinyalde biraz titreme de sağlar)
- veya donanım Zamanlayıcısının kendisinin pini değiştirmesine izin verebilirsiniz, bu da çalıştırmak için herhangi bir yazılım içermemektedir (bu, karşılık gelen Zamanlayıcı ile ilişkili 2 pinden yalnızca birini kullanabileceğiniz anlamına gelir, ancak çok daha kararlı bir sinyal alacaksınız) )
İnternette bunun nasıl yapılacağına dair birçok öğretici var. "Arduino timer register pwm" araması bana bazı umut verici sonuçlar verdi, örneğin bu , Timer1 yazmaçları ile PWM'nin nasıl elde edileceğini ve frekansı seçmesi serbest. (Bu 3 bölümlük bir seridir, her Zamanlayıcı için bir bölüm. Zamanlayıcı 0 için Bölüm 1 buradadır , ancak Zamanlayıcı 0'ı olduğu gibi tutmak isteyebilirsiniz, böylece işlevler normal gibi delay()ve millis()yine de aynı şekilde çalışır). Bu sitede de bu tür birçok soru var, örneğin bu .
Donanımla ilgili herhangi bir şey için çok önemli bir başka kaynak, ilgili mikro denetleyicinin veri sayfasıdır. Uno için Atmega328p olan Nano veya Mini, hangi veri sayfası mikroçip sitesinde bulunabilir burada (veya mikrodenetleyici adı için googling olduğunda)