Gönderen Konu: ATMEGA8 için 32.768KHz kristal ile RTC oluşturma hk.  (Okunma sayısı 804 defa)

est32

  • Kahraman Üye
  • *****
  • İleti: 124
  • EMEKLİ ÖĞRENCİ
Merhaba,
Çok uzun zamandır basicden C diline geçmek istiyor ve tembelliğimden erteliyordum. Kısa süre önce bu işi, uğraşır zorda kalırsam ancak öyle öğrenebilirim düşüncesi ile çözmeye karar verdim ve yapmayı planladığım çok fonksiyonlu duvar saatimin yazılımına başladım.
Yazılıma başladığım kısım, en kritik kısım olan harici 32KHz kristal ile oluşturacağım RTC üzerinden kesme ile 1 saniye zamanı elde etmek.

Yani devremdeki ATMEGA8 işlemcisi dahili 4MHz RC osilatör ile çalışırken, işlemci bacaklarına bağlamış olduğum 32.768KHz kristal ile 1 saniyelik zaman elde ederek saat çalıştırmak istiyorum.
C diline yeni giriştiğim için baya bocaladım önce, hatta atmeganın datasheeti de pice göre biraz daha zor geldi bana, tam çözemedim. kendi imkanlarım ve netten gördüğüm kadarıyla timer2 üzerine birşeyler denedim ama sanıyorum ki yakıp söndürmeyi başardığım PORTB.3 pinine bağlı led, harici osc den aldığı sinyal ile çalışacağına, dahili osc den clock alıyor. Bunun için yardımcı olur musunuz, nerede yanlış yapıyorum? Bu sorunu aşsam yazılıma devam edeceğim. Yardımcı olabilir misiniz?
Atmel studio 6 kullanıyorum,devre ve yazılım aşağıdaki gibidir;
Kod: Linkleri görmek için Kayıt Olun ya da Giriş Yapın
/*
 * atmega8_duvar_saati.cpp
 *
 * Created: 13.11.2016 12:20:15
 *  Author: Esat
 */
#define F_CPU 4000000UL//CPU 4MHZ
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#define LED_ON PORTB|=(1<<PORTB3)
#define LED_OFF PORTB&=~(1<<PORTB3)
#define LED_TOGGLE PINB|=(1<<PINB3)

ISR(TIMER2_OVF_vect)
{
LED_TOGGLE;

}

int main(void)
{
DDRB|=(1<<PORTB3);
TCCR2|=(1<<CS21)|(1<<CS22);
TCCR2 |= (1 << WGM21);
TIMSK|=(1<<TOIE2);
TIFR|=(1<<TOV2);
ASSR|=(1<<AS2);
sei();/* set global interrupt enable */
TCNT2 = 0;
while(ASSR & _BV(TCN2UB)); // Wait until TC2 is updated
    while(1)
    {
//LED_ON;_delay_ms(1000);LED_OFF;_delay_ms(1000);
}
}
KALDIRIM TEKNİKERİ

mehmetbey

  • Kahraman Üye
  • *****
  • İleti: 103
Ynt: ATMEGA8 için 32.768KHz kristal ile RTC oluşturma hk.
« Yanıtla #1 : 23 Kasım 2016, 02:37:43 »
Bu güzel bir örnek...
Linkleri görmek için Kayıt Olun ya da Giriş Yapın
"Bir mum diğer mumu tutuşturmakla ışığından bir şey kaybetmez'' Mevlânâ

est32

  • Kahraman Üye
  • *****
  • İleti: 124
  • EMEKLİ ÖĞRENCİ
Ynt: ATMEGA8 için 32.768KHz kristal ile RTC oluşturma hk.
« Yanıtla #2 : 24 Kasım 2016, 08:06:30 »
Teşekkür ederim Mehmetbey, seyahatten yeni döndüğüm için fazla inceleyemedim, biraz karışık gibi fakat işime yarayacaktır. Bu akşam kısmet olursa uğraşacağım tekrar.
Başka örneği olan varsa bekliyorum.
KALDIRIM TEKNİKERİ

Mert BİLGÜSİ

  • Abone
  • Kahraman Üye
  • *****
  • İleti: 116
Ynt: ATMEGA8 için 32.768KHz kristal ile RTC oluşturma hk.
« Yanıtla #3 : 27 Kasım 2016, 18:53:28 »
Merhaba;

Mcu extarnel xtall seçeneğini işaretlemeyi unutma avrstudio kullanıyorsan programlayıcı kısmında fuse seçeneğinin altında  extarnel crystal seç ki hariçi  taktığın kristale göre çalışşın.
|^^^^^^^^^^^^\ ||\        
|___BERİK.NET____|  ||'""|""\___
| _____________      l |  |__|__|___| )
 (@!)!(@)"""""**|(@) (@)****|(@)

est32

  • Kahraman Üye
  • *****
  • İleti: 124
  • EMEKLİ ÖĞRENCİ
Ynt: ATMEGA8 için 32.768KHz kristal ile RTC oluşturma hk.
« Yanıtla #4 : 28 Kasım 2016, 09:30:40 »
Linkleri görmek için Kayıt Olun ya da Giriş Yapın
Merhaba;

Mcu extarnel xtall seçeneğini işaretlemeyi unutma avrstudio kullanıyorsan programlayıcı kısmında fuse seçeneğinin altında  extarnel crystal seç ki hariçi  taktığın kristale göre çalışşın.
Hocam bu şimdi benim biraz kafamı karıştırdı;
Saatin kendi içindeki işlemleri(ekran tarama, kumanda kodu çözme, ısı okuma vs.) için dahili 4MHz RC osilatör zaten çalışacak. Saatin sayımı, yani timer çalışması için harici 32KHz kristal de çalışacak. Şimdi senin dediğini yapacak olursam işlemci sadece harici 32KHz çalışacakmış ve tüm işlemler bu hızda gerçekleşecekmiş gibi algılıyorum. Tabii ki bu işi sen daha iyi biliyorsun ama ben bunu ayırt edemiyorum. Yani dahili 4MHz + harici 32.768 yapmam için gereken fuse ayarlarını anlayamadım. Biraz daha açabilir misin?
ayrıca bunu proteusta da yapabilir miyim?
teşekkür ederim.
« Son Düzenleme: 28 Kasım 2016, 09:32:11 Gönderen: est32 »
KALDIRIM TEKNİKERİ

mehmetbey

  • Kahraman Üye
  • *****
  • İleti: 103
Ynt: ATMEGA8 için 32.768KHz kristal ile RTC oluşturma hk.
« Yanıtla #5 : 29 Kasım 2016, 08:55:31 »
Verdiğim örnekdeki sihirli kısım;
Kod: Linkleri görmek için Kayıt Olun ya da Giriş Yapın
ASSR |= (1<<AS2);   //Timer/Counter 2 clocked from a crystal to the Timer Oscillator 1 (TOSC1) pin
TCCR2 = (1<<CS22) | (1<<CS20); //clkT2S/128 (From prescaler)
burada. ASSR.3 Timer2 nin saat kaynağını
seçiyor. İnterrup olarak da T2 taşma ile
zaman rutinleri çalışıyor...
"Bir mum diğer mumu tutuşturmakla ışığından bir şey kaybetmez'' Mevlânâ

est32

  • Kahraman Üye
  • *****
  • İleti: 124
  • EMEKLİ ÖĞRENCİ
Ynt: ATMEGA8 için 32.768KHz kristal ile RTC oluşturma hk.
« Yanıtla #6 : 29 Kasım 2016, 09:06:14 »
Çok teşekkür ederim Mehmet bey, kısa süre içerisinde yeniden deneyeceğim.
Bir misafir, bir seyahat, bir hastalık, gündüzleri iş derken hiç deneme yapamadım, kusura bakmayın. Deneyeceğim inş.
sağolun Allah razı olsun.
Hatta bu proje ile ilgili soracağım daha çok şey var, sağolun.
KALDIRIM TEKNİKERİ