TA3UIS
Doğan
- Katılım
- 15 Kasım 2023
- Mesajlar
- 3,056
Arduino kartı olmadan, mikrodenetleyicinin kendi kapasitesini kullanarak sıfırdan inşa etmeye çalıştığım bir Dijital Saat projesi hazırladım.
Bu proje benim için sadece bir saat değil; kristal osilatörden RTC haberleşmesine, register seviyesinden ISP programlamaya kadar elektronikte bir yolculuuk gibi oldu.
Neden Bağımsız?
Hazır bir Arduino Uno üzerine shield takmak yerine, Atmega328P-PU çipini breadboard üzerinde tek başına çalıştırdım. Kendi 16MHz kristalini, kapasitörlerini ve reset devresini kurmak, projeden aldığım keyfi katladı.
Malzemeler:
Mikrodenetleyici Atmega328P-PU
Zamanlayıcı DS1307 RTC Entegresi + 32.768 kHz Kristal (Gerçek zamanlı saat için)
Görüntüleme 4 Haneli 7 Segment Display (Ortak Katot)
Osilatör 16 MHz Kristal + 2x 22pF Seramik Kondansatörr,
Programlayıcı CH341A USB Programlayıcı
Dirençler Segmentler için 7x 220R, Pull-up/down hatları için 10k Ohm dirençler.
Güç 5V DC
Teknik Detaylar ve Karşılaştığım Zorluklar:
Projenin en can alıcı noktalarından biri, işlemciye kod yüklemeden önce Chip Erase yapmanın önemiydi. Eski verileri temizlemeden çoğu durumda kararlı bir çalışma elde edilemiyor. Ayrıca saatin saniyelerini temsil eden o yanıp sönen nokta için Atmega nın 15. fiziksel bacağını konfigüre ettim.
Saat modülü (DS1307) I2C protokolü üzerinden işlemciyle haberleşiyor.
Pil desteği sayesinde elektrik kesilse bile zaman akmaya devam ediyor. Ayar butonları ile dakika ve saati anlık olarak güncelleyebiliyorum.
Yazılım Özellikleri
Kodda SevSeg kütüphanesini optimize ederek kullandım. Baştaki sıfırların titrememesi için Leading Zero Blanking özelliğini kapattım ve saniyede bir yanıp sönen noktayı millis() fonksiyonu ile asenkron hale getirdim.
Breadboard üzerindeki kablo karmaşası içinde o ilk 12:00 yazısını görmek ve noktanın yanıp söndüğünü izlemek çok keyifliydi.
Bu proje benim için sadece bir saat değil; kristal osilatörden RTC haberleşmesine, register seviyesinden ISP programlamaya kadar elektronikte bir yolculuuk gibi oldu.
Neden Bağımsız?
Hazır bir Arduino Uno üzerine shield takmak yerine, Atmega328P-PU çipini breadboard üzerinde tek başına çalıştırdım. Kendi 16MHz kristalini, kapasitörlerini ve reset devresini kurmak, projeden aldığım keyfi katladı.
Malzemeler:
Mikrodenetleyici Atmega328P-PU
Zamanlayıcı DS1307 RTC Entegresi + 32.768 kHz Kristal (Gerçek zamanlı saat için)
Görüntüleme 4 Haneli 7 Segment Display (Ortak Katot)
Osilatör 16 MHz Kristal + 2x 22pF Seramik Kondansatörr,
Programlayıcı CH341A USB Programlayıcı
Dirençler Segmentler için 7x 220R, Pull-up/down hatları için 10k Ohm dirençler.
Güç 5V DC
Teknik Detaylar ve Karşılaştığım Zorluklar:
Projenin en can alıcı noktalarından biri, işlemciye kod yüklemeden önce Chip Erase yapmanın önemiydi. Eski verileri temizlemeden çoğu durumda kararlı bir çalışma elde edilemiyor. Ayrıca saatin saniyelerini temsil eden o yanıp sönen nokta için Atmega nın 15. fiziksel bacağını konfigüre ettim.
Saat modülü (DS1307) I2C protokolü üzerinden işlemciyle haberleşiyor.
Pil desteği sayesinde elektrik kesilse bile zaman akmaya devam ediyor. Ayar butonları ile dakika ve saati anlık olarak güncelleyebiliyorum.
Yazılım Özellikleri
Kodda SevSeg kütüphanesini optimize ederek kullandım. Baştaki sıfırların titrememesi için Leading Zero Blanking özelliğini kapattım ve saniyede bir yanıp sönen noktayı millis() fonksiyonu ile asenkron hale getirdim.
Breadboard üzerindeki kablo karmaşası içinde o ilk 12:00 yazısını görmek ve noktanın yanıp söndüğünü izlemek çok keyifliydi.
Son düzenleme:
