- Donanım Kurulumu ve Gereksinimi
- Nuvoton N76E003 ile LED Arabirimi için Devre Şeması
- Nuvoton N76E003'teki Zamanlayıcı Pimleri
- Nuvoton N76E003'te Zamanlayıcı Kayıtları
- Nuvoton N76E003 Zaman Türleri
- Zamanlayıcılar için Nuvoton N76E003 Mikrodenetleyiciyi Programlama
- Zamanlayıcı İşlevselliği için Yanıp Sönen Kod ve Çıkış Doğrulanıyor
Önceki Nuvoton Microcontroller eğitimlerimizde, başlangıç kılavuzu olarak temel bir LED yanıp sönen program kullandık ve ayrıca dokunsal bir anahtarı bağlamak için bir giriş olarak GPIO'yu arayüzledik. Bu eğitimle, Keil projesinin nasıl yapılandırılacağının ve N76E003 Nuvoton mikrodenetleyicinin programlanması için ortamın nasıl kurulacağının tamamen farkındayız. Mikrodenetleyici biriminin dahili bir çevre birimini kullanma ve N76E003'ün dahili Zamanlayıcısını kullanarak biraz daha ileriye gitme zamanı.
Önceki eğitimimizde, bir LED'i yakıp söndürmek için yalnızca bir yazılım gecikmesi kullandık, bu nedenle bu eğitimde, Zamanlayıcı gecikme işlevinin yanı sıra Zamanlayıcı ISR'nin (Interrupt Service Routine) nasıl kullanılacağını ve iki ayrı LED'in nasıl yanıp söneceğini öğreneceğiz. Zamanlayıcıları diğer mikrodenetleyicilerle nasıl kullanacağınızı kontrol etmek için Arduino Timer Tutorial ve PIC Timer eğitimine de göz atabilirsiniz. Fazla zaman kaybetmeden ne tür bir donanım kurulumuna ihtiyacımız olduğunu değerlendirelim.
Donanım Kurulumu ve Gereksinimi
Bu projenin gerekliliği Timer ISR ve timer delay fonksiyonunu öğrenmek olduğundan, biri while döngüsünde timer gecikmesi kullanılarak yanıp sönecek ve diğeri ISR fonksiyonu içinde yanıp sönecek olan iki LED kullanacağız.
N76E003 geliştirme kartında bir LED mevcut olduğundan, bu proje LED akımını sınırlamak için bir ek LED ve akım sınırlama direnci gerektirir. İhtiyaç duyduğumuz bileşenler -
- LED'in herhangi bir rengi
- 100R direnç
Yukarıdaki bileşenlerin dışında, N76E003 mikrodenetleyici tabanlı geliştirme kartına ve Nu-Link Programcı'ya ihtiyacımız var. Ek olarak, tüm bileşenleri bağlamak için devre tahtası ve bağlantı kabloları da gereklidir.
Nuvoton N76E003 ile LED Arabirimi için Devre Şeması
Aşağıdaki şemada görebileceğimiz gibi, Test LED'i geliştirme kartının içinde mevcuttur ve 1.4 numaralı bağlantı noktasına bağlanır. 1.5 numaralı bağlantı noktasına ek bir LED bağlanır. Rezistör R3, LED akımını sınırlamak için kullanılır. En solda, programlama arayüzü bağlantısı gösterilmektedir.
Nuvoton N76E003'teki Zamanlayıcı Pimleri
N76E003 pin diyagramı görüntü-aşağıda görüldüğü
Gördüğümüz gibi, her bir pinin farklı özellikleri vardır ve her bir pim birden çok amaç için kullanılabilir. Ancak, LED çıkış pini olarak kullanılan pim 1.5, PWM'yi ve diğer işlevleri kaybedecektir. Ancak, bu proje için başka bir işlev gerekmediğinden bu bir sorun değildir.
Çıkış olarak pin 1.5 ve giriş olarak pin 1.6 seçilmesinin nedeni, kolay bağlantı için GND ve VDD pinlerinin en yakın mevcudiyetidir. Ancak bu mikrodenetleyicide 20 pinden 18 pim bir GPIO pini olarak kullanılabilir ve Reset girişi için özel olarak kullanılan pim 2.0 haricinde diğer herhangi bir GPIO pini çıkış ve Giriş ile ilgili amaçlar için kullanılabilir ve olarak kullanılamaz. çıktı. Tüm GPIO pinleri aşağıda açıklanan modda yapılandırılabilir.
Veri sayfasına göre, PxM1.n ve PxM2.n, G / Ç portunun kontrol çalışmasını belirlemek için kullanılan iki kayıttır. LED kullandığımız ve pini genel çıkış pinleri olarak istediğimiz için bu nedenle pinler için Quasi-bidirectional modunu kullanacağız.
Nuvoton N76E003'te Zamanlayıcı Kayıtları
Zamanlayıcı, herhangi bir mikro denetleyici birimi için önemli bir şeydir. Mikrodenetleyici, yerleşik bir zamanlayıcı çevre birimi ile birlikte gelir. Nuvoton N76E003 ayrıca 16 bit zamanlayıcı çevre birimleriyle birlikte gelir. Bununla birlikte, her zamanlayıcı farklı amaçlar için kullanılır ve herhangi bir zamanlayıcı arayüzünü kullanmadan önce zamanlayıcı hakkında bilgi sahibi olmak önemlidir.
Nuvoton N76E003 Zaman Türleri
Zamanlayıcı 0 ve 1:
Bu iki zamanlayıcı zamanlayıcı0 ve zamanlayıcı1, 8051 zamanlayıcılarla aynıdır. Bu iki zamanlayıcı, genel bir zamanlayıcı veya sayaç olarak kullanılabilir. Bu iki zamanlayıcı dört modda çalışır. Gelen Modu 0, bu zamanlayıcı 13 bit Zamanlayıcı / Sayaç modunda çalışacaktır. Olarak Mod 1, çözünürlük, 16-bit olacak olan iki zamanlayıcının bit. Olarak Mod 2, zamanlayıcılar, 8-bit çözünürlükte bir otomatik yeniden modu olarak yapılandırılır. Olarak Mod 3, zamanlayıcı 1 durdurulur ve zamanlayıcı aynı zamanda 0, bir sayaç ve sayaç olarak kullanılabilir.
Bu dört moddan çoğu durumda Mod 1 kullanılır. Bu iki zamanlayıcı, sabit veya önceden ölçeklenmiş modda (Fys / 12) Fsys'i (Sistem Frekansı) kullanabilir. Ayrıca harici bir saat kaynağından da saati ölçülebilir.
Zamanlayıcı 2:
Zamanlayıcı 2 ayrıca, esas olarak dalga biçimi yakalama için kullanılan 16 Bitlik bir zamanlayıcıdır. Ayrıca sistem saatini kullanır ve saat frekansını 8 farklı ölçek kullanarak bölerek farklı uygulamalarda kullanılabilir. Karşılaştırma modunda veya PWM oluşturmak için de kullanılabilir.
Zamanlayıcı 0 ve Zamanlayıcı 1 gibi, Zamanlayıcı 2 otomatik yeniden yükleme modunda kullanılabilir.
Zamanlayıcı 3:
Zamanlayıcı 3 ayrıca 16 bit zamanlayıcı olarak kullanılır ve UART için baud hızı saat kaynağı için kullanılır. Aynı zamanda otomatik yeniden yükleme özelliğine de sahiptir. Uygulama UART iletişimi gerektiriyorsa, bu zamanlayıcıyı yalnızca Seri iletişim (UART) için kullanmak önemlidir. Zamanlayıcı kurulumundaki çakışan süreç nedeniyle bu tür bir durumda bu zamanlayıcıyı başka amaçlarla kullanmamanız önerilir.
Bekçi köpeği Zamanlayıcısı:
Watchdog Timer standart 6-bit zamanlayıcı olarak kullanılabilir ancak bu amaç için kullanılmaz. İzleme zamanlayıcısının genel amaçlı bir zamanlayıcı olarak kullanılması, mikro denetleyicinin çoğunlukla boş modda kaldığı düşük güç tüketimli uygulamalar için geçerlidir.
Watchdog Timer, adından da anlaşılacağı gibi, her zaman mikro denetleyicinin düzgün çalışıp çalışmadığını kontrol eder. Mikrodenetleyicinin askıda kalması veya durdurulması durumunda, WDT (Watchdog Timer) mikro denetleyiciyi otomatik olarak sıfırlayarak mikro denetleyicinin takılıp kalmadan, takılmadan veya durma durumlarında sürekli kod akışında çalışmasını sağlar.
Kendi Kendini Uyanma Zamanlayıcısı:
Bu, bir bekçi uygulaması zamanlayıcısı ile aynı şekilde özel bir zamanlama sürecine hizmet eden başka bir zamanlayıcı çevre birimidir. Bu zamanlayıcı, mikro denetleyici düşük güç modunda çalışırken sistemi periyodik olarak uyandırır.
Bu zamanlayıcı çevre birimi, mikro denetleyiciyi uyku modundan uyandırmak için dahili olarak veya harici çevre birimleri kullanılarak kullanılabilir. Bu proje için Timer 1 ve Timer 2'yi kullanacağız.
Zamanlayıcılar için Nuvoton N76E003 Mikrodenetleyiciyi Programlama
Pinleri Çıkış Olarak Ayarlama:
Önce çıktı bölümüyle başlayalım. İki LED kullanıyoruz, biri Test adlı yerleşik LED'dir ve P1.4 portuna ve P1.5 pinine bağlı harici bir LED'e bağlıdır.
Bu nedenle, bu iki pin, aşağıdaki kod parçacıkları kullanılarak bu iki LED'i bağlamak için bir çıkış pini olarak yapılandırılmıştır.
#define Test_LED P14 #define LED1 P15
Bu iki pim, kurulum işlevinde Yarı çift yönlü pim olarak ayarlanır.
geçersiz kurulum (void) {P14_Quasi_Mode; P15_Quasi_Mode; }
Zamanlayıcı İşlevini Ayarlama:
Kurulum işlevinde, istenen çıktıyı elde etmek için Zamanlayıcı 2'nin yapılandırılması gerekir. Bunun için, T2MOD kaydını 1/128 saat bölme faktörüyle ayarlayacağız ve otomatik yeniden yükleme gecikme modunda kullanacağız. İşte T2MOD kaydına genel bakış:
T2MOD kaydının 4,5 ve 6. biti zamanlayıcı 2 saat bölücüsünü ve 7. bit otomatik yeniden yükleme modunu ayarlar. Bu, aşağıdaki satır kullanılarak yapılır -
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Bu iki satır Function_define.h dosyasında şu şekilde tanımlanır:
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF # tanımla TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Şimdi, bu satırlar Zamanlayıcı 2 ISR için gerekli zamanlama değerini ayarlar.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Fonksiyon_define.h dosyasında ayrıca tanımlanmıştır.
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
Yani 16000000, 100 ms zaman gecikmesini ayarlayan 16 Mhz'lik kristal frekansıdır.
İki satırın altında, Zamanlayıcı 2 Düşük ve Yüksek baytları boşaltılacaktır.
TL2 = 0; TH2 = 0;
Son olarak aşağıdaki kod, zamanlayıcı 2 kesintisini etkinleştirecek ve Zamanlayıcı 2'yi başlatacaktır.
set_ET2; // Timer2 kesintisini etkinleştir set_EA; set_TR2; // Timer2 çalıştır
Tam kurulum işlevi aşağıdaki kodlarda görülebilir.
geçersiz kurulum (void) { P14_Quasi_Mode; P15_Quasi_Mode; TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode; RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8; TL2 = 0; TH2 = 0; set_ET2; // Timer2 kesintisini etkinleştir set_EA; set_TR2; // Timer2 run }
Zamanlayıcı 2 ISR İşlevi:
Zamanlayıcı 2 ISR işlevi aşağıdaki kodda görülebilir.
void Timer2_ISR (void) interrupt 5 { clr_TF2; // Timer2 Kesinti İşaretini Temizle LED1 = ~ LED1; // LED1 geçişi, P1.5'e bağlı; }
Zamanlayıcı İşlevselliği için Yanıp Sönen Kod ve Çıkış Doğrulanıyor
Derlendiğinde kod (aşağıda verilmiştir) 0 uyarı ve 0 Hata döndürdü ve Keil'deki varsayılan yanıp sönme yöntemini kullanarak onu parlattım. Yanıp söndükten sonra, LED'ler programlandığı gibi tanımlanmış bir zamanlayıcı gecikmesinde yanıp sönüyordu.
Kartın bu kod için nasıl çalıştığının tam bir gösterimi için aşağıda verilen videoyu izleyin. Öğreticiden keyif aldığınızı ve herhangi bir sorunuz varsa yararlı bir şeyler öğrendiğinizi umarız bunları aşağıdaki yorum bölümünde bırakın. Diğer teknik soruları göndermek için forumlarımızı da kullanabilirsiniz.