İçindekiler:
- Adım 1: Kayıt Adreslerini Tanımlama
- Adım 2: Diziler ve Global Değişkenler
- Adım 3: "serial.begin" İşlevi
- Adım 4: "serial.available" İşlevi
- Adım 5: "serial.read" İşlevi
- Adım 6: "seri.write" İşlevi
- 7. Adım: Kurulum İşlevi
- Adım 8: Döngü ve ISR İşlevleri
- Adım 9: Kablolama
- Adım 10: Hepsini Bir Araya Getirmek
Video: Kütüphanesiz veya Seri Fonksiyonlu (Kesintili) Arduino Ton Üreteci: 10 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
Bu normalde ders verebileceğim bir şey değil, metal işimi tercih ederim, ancak elektrik mühendisliği öğrencisi olduğum ve mikrodenetleyiciler (Gömülü Sistemler Tasarımı) üzerine bir ders almam gerektiği için bir ders verebilirim diye düşündüm. projelerimden biri. Projeyi ve diğerlerini bu sınıf için ilk yaptığımda, arduino kütüphane işlevlerini veya seri işlevleri kullanmayan çok az öğretici olduğunu veya hiç öğretici olmadığını gördüm, bu da bunun iyi bir öğretilebilir olacağını düşünmemin başka bir nedeni.
Bu kod Atmega 2560 mikrodenetleyici için tasarlanmıştır, bu nedenle başka bir kartta uygulamak istiyorsanız, denetleyicinizin kullanım kılavuzuna göre koddaki adres kayıtlarını değiştirmeniz gerekir. Kodun arkasındaki temel fikir, klavyede seri monitöre bir tuş girdiğinizde, arduino mega'nın "q" sıfırlayarak hangi tuşa bastığınıza bağlı olarak belirli bir frekans çıkışı vermesidir. "a"nın A düz frekansını ve "A"nın A keskin frekansını, "b" B düzünü, "c"yi C düzünü, "C"yi C keskinini vb. verecek şekilde yaptım. Sonunda tam kod yüklenir, ancak her adım kodu parçalara ayırır, böylece açıklama daha kolay olur.
Adım 1: Kayıt Adreslerini Tanımlama
Bu adım kolaydır, eğer atmega 2560 kullanıyorsanız, benim kullandığım adresleri kullanmanız yeterlidir, ancak farklı bir çipe sahip bir kart kullanıyorsanız, bu kayıtların her birinin adreslerini bulmanız gerekecektir. cips kullanım kılavuzu. En üstteki tanımlar sadece daha sonra fonksiyonlarımız için kullanılacak sabitlerdir. Adresleri volatile unsigned olarak belirtiyoruz çünkü derleyicinin bunlarla uğraşmasını istemiyoruz.
Adım 2: Diziler ve Global Değişkenler
Burada, her tuşun vermesi gereken tüm frekansları içerecek olan Frekans dizisini tanımlamak istiyoruz. Bu değerler gerçek nota frekanslarından hesaplanıyor ve dürüst olmak gerekirse onları nasıl aldığımı unuttum ama emin olmak için bir osiloskopta test ettiğim için doğru değerler bunlar. Ayrıca her ton için basılacak tüm tuşları içeren nota dizisini ve sonraki fonksiyonlarımız için ihtiyaç duyacağımız değişkenleri tanımlıyoruz.
Adım 3: "serial.begin" İşlevi
"serial.begin" işlevini U0init() kopyalayan özel işlevimizi çağıracağız. Girdi olarak istenilen baud hızını alır ve o baud hızında seri portu başlatır.
Adım 4: "serial.available" İşlevi
"serial.available" U0kbhit()'i taklit eden işlevi çağıracağız. Girdi almaz, bunun yerine RDA durum bitini kullanarak klavyede bir değişiklik yapılıp yapılmadığını algılar ve bir değişiklik algılandığında true değerini döndürür.
Adım 5: "serial.read" İşlevi
UDR0 yazmacında saklanan klavyede yapılan herhangi bir değişiklik ne olursa olsun giriş ve çıkış almayan "serial.read" işlevini U0getchar() taklit eden işlevi çağıracağız.
Adım 6: "seri.write" İşlevi
Bir değişiklik algılanıp depolanırken UDR0 kaydından veri alan ve seri monitöre geri dönen çıktıları alan "serial.write" U0putchar()'ı taklit eden işlevi çağıracağız.
7. Adım: Kurulum İşlevi
Bu, seri portu başlatmak için bizim "serial.begin" taklidimizi kullanacak ve zamanlayıcı kayıtları için bit ayarlarımızı başlatacak ve tonlarımızı çıkarmak için PB6'yı ayarlayacak temel kurulum işlevidir.
Adım 8: Döngü ve ISR İşlevleri
Döngü şu şekilde çalışır: "seri. kullanılabilir" işlevimizle bir değişiklik algılanırsa, "seri.oku" işlevimiz bu değişikliği saklar ve "seri.yazma" işlevimiz bu değişikliği seri monitöre koyar. Bir değişken i, frekans dizisinin boyutundan küçük olduğu sürece, çıkışı o dizideki i'nin konumu olacak şekilde ayarlayacak ve bu konumdaki frekansı çıkaracaktır. ISR, sıfırlama işlevi görür, burada frekans dizisi konumu 0'a eşit değilse (başka bir deyişle "q" tuşuna basılmazsa), frekansı verir, ancak "q" tuşuna basıldığında sıfırlanır. Lütfen dikkat: bu kod kesintileri kullanır, ancak kesintiler devre dışı bırakılarak yapılabilir. Herhangi bir istek alırsam, kodu kesinti olmadan yayınlayacağım, sadece kesme sürümünün daha eğlenceli olduğunu düşünüyorum.
Adım 9: Kablolama
Bu kodun kablolaması son derece kolaydır, sadece PB6'dan bir devre tahtasına bir çıkış kablosu koyun, bununla seri olarak bir buzzer veya hoparlör bağlayın ve tekrar toprağa bağlayın. Not: Hoparlör kullanıyorsanız, hoparlörün önüne küçük bir direnç koyun. Sadece çıkışı görmek istiyor ama duymuyorsanız, PB6'yı bir osiloskopun kırmızı ucuna ve siyah ucu da toprağa bağlayın.
Adım 10: Hepsini Bir Araya Getirmek
Kodun tamamını önceki adımlarda anlattığım için bu adıma ekledim. Sadece farklı frekanslar için bir klavye girişi alır ve bu frekansı PB6'ya verir. IDE ile kodlamanın farklı bir yolunu okumaktan keyif aldığınızı umuyoruz!
Ayrıca lütfen Mikrodenetleyici yarışmasında buna oy verin:D
Önerilen:
LED'lerin Doğru Seri Bağlanması - Seri Vs Paralel Bağlantı: 6 Adım
LED'leri Doğru Seri Vs Paralel Bağlantıya Bağlama: Bu talimatta, LED - Işık Yayan Diyotlardan ve birden fazla ünitemiz varsa bunları nasıl bağlayabileceğimizden bahsediyoruz. Bu, keşke en başından bilseydim dediğim bir ders çünkü elektronik devrelerle uğraşmaya başladığımda birkaç tane inşa ettim
Arduino Synth / Ton Üreteci: 5 Adım
Arduino Synth/Tone Generator: Bu, Arduino'ya özgü Tone komutunu kullanan bir Synth/Tone Generator'dır. Herhangi bir kare dalga frekansını çalmak için ayarlanabilen 12 ayrı tuşa sahiptir. Bir buton ile oktavları aşağı yukarı hareket ettirme özelliğine sahiptir. Ayrıca bir s
Arduino Pro Mini Kullanan Ton Üreteci "Jimikky Kammal": 5 Adım
Arduino Pro Mini Kullanan Ton Üreteci "Jimikky Kammal": Bu, Arduino Pro Mini kullanan basit bir ton üreteci projesidir. Süper hit şarkı "Jimikky Kammal " "Velipadinte Pusthakam" filminin; monoton olarak geliştirilir. Müzik notaları doğada pürüzsüz ve yuvarlanan sinüs şeklinde bulunur
Mors Ton Üreteci (düşük Güçlü CW Beeper): 3 Adım
Mors Ton Jeneratörü (düşük Güçlü CW Beeper): Burada oğluma mors alfabesini öğretmek için kullandığım basit bir düşük güçlü ton üretecinin nasıl yapıldığını anlatıyorum. Mahzenimi temizlerken eski Wehrmacht mors keyer'ımı buldum. Bu keyer, ikinci dünya savaşı sırasında Alman kuvvetleri tarafından kullanıldı. Anahtarcının bir
C-kodlu Mikrodenetleyici Kumaş Ton Üreteci: 8 Adım (Resimlerle)
C-kodlu Mikrodenetleyici Kumaş Ton Jeneratörü: Geçen yılın Ekim ayının sonunda, carmitsu kullanıcısı, beslenme çantası synth'imi gördükten sonra bana bir mesaj gönderdi. Mesajından: İlkokulda müzik öğretiyorum. Bir sürü kaydedici müzik çalıyoruz. yani çocuklar küçük flüt çalıyor