Nuvoton N76E003AT20

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
24,130
Elimde deek robot'un voltaj akım ölçen paneli var. Çok verimli ölçüm yaptığı söylenemez, ama üzerinde uzun zamandır ilgi duyduğum bir MCU var, Nuvoton'un N76E003AT20 işlemcisi. O yüzden bunun üzerindeki diğer komponentleri söktüm ve sadece işlemciyi bıraktım. Bunun üzerinde kod geliştirmek için ve hardware debug yapabilmek için gereken bileşenleri linux için oluşturmak istiyorum.

N76E003AT20, 8051 mimariye sahip. Bunun programlama ve debug adaptörü olan nulink2pro yu da uzun zaman önce almıştım. Ama Nuvoton'un bu işlemci için öne çıkardığı yazılım geliştirme araçları, sadece windows'da çalışan IAR Embedded Studio ve Keil uVision. Linux'ta çalışıyor olsalardı bile, sadece çok kısıtlı kod büyüklüğünü bedava destekliyor. İşlemcinin bütün kaynaklarını kullanan kod yazmak için binlerce dolar para vermek gerekiyor. Nuvoton bir de Eclipse bazlı bir IDE koymuş, ama o da linux altında çalışmadı, bir sorun var.

Bu konu başlığı altında, bu işlemci için linux bazlı, ve tamamen açık kaynak bileşenlerden oluşan kod geliştirme ve hardware debug ortamının hazırlanması ile uğraşacağım. LED blink kurulumu hazır :D

1731231489013.jpeg
 
Gene de öncelikle mevcut kartın devre şemasını çıkardım. Blink kodu çalıştıktan sonra belki daha iyi çalışan bir volt/amper ölçer yapabiliriz

1731965967296.png
 
Emülatörün doğru çalıştığını teyit etmek için Keil uVision ve driver'larını indirdim. Emülatör sorunsuz çalıştı. Artık bu noktada OpenOCD yi uygun bir şekilde yapılandırıp denemeler yapacağım. Nuvoton, özel olarak yapılandırdığı OpenOCD nin kaynak kodlarını da yayınlamış. Baya eski versiyon. Ama öncelikle bununla çalışır hale getirip ortamı iyice anladıktan sonra belki son versiyonu da çalışır hale getirebiliriz

 
Bugün konu ile ilgili vakit harcama imkanım oldu. Nuvoton'un özel olarak N76E003AT20 için modifiye ettiği OpenOCD ile denemeler yaptım, ama stabil çalışmadığını farkettim. Bazan bağlanabiliyor bazan bağlanamıyor, bağlanınca takılıyor ve öldürülmesi gerekiyor ...

Nuvoton'un github sayfasına biraz daha bakınca, Windows altında çalışan bir programlayıcı yazılımı yayınlamışlar. Yazılım ücretsiz.

1731948029703.png


Bu yazılımı indirip Windows makinaya kurdum. MCU ya bağlanmada bir sorunun olmadığını gördüm. Bu durumda eğer bedava derleyici ile program geliştirebilirsek, bu programlayıcıyı kullanarak işlemciye yazabileceğiz. O yüzden OpenOCD ile şimdilik uğraşmadım.
 
Nuvoton'un açık kaynak olarak kullanıma sunduğu ve Eclipse bazlı geliştirme ortamını dana önce denemiştim. Benim linux makina ile uyumsuzluk çıkarmıştı ve çalışmamıştı. Diğer desteklenen derleyiciler de zaten Keil ve IAR, ikisi de binlerce dolar. Ben de Eclipse geliştirme ortamı tarafından da kullanılan ve açık kaynak olan SDCC derleyicisine odaklandım.


Programı, sitesinden açıklandığı gibi linux makinaya kurdum.

Sonra dan Opennuvoton dan N76E003AT20 MCU nin "board support package" (BSP) ini indirdim. Ama BSP yi yazan bunu sadece windows altından test etmiş herhalde, linux altından dosya isimlerinde büyük/küçük harf ayrımı olduğu için doğru çalışmadı. Bu sorunu gidermek için Opennuvoton'un BSP sini fork ettim ve kendi fork'umda sorunu giderdim


Bu BSP yi de indirip linux'da uygun bir yere koymamız yeterli, herhangi bir kurulum prosedürü gerekmiyor.
 
Sonra da bir dizin altında minimal projemi oluşturdum. Fırsat bu fırsat, VSCode da kurdum benim linux makinaya ve C/C++ geliştirme için gereken eklentileri de kurdum. Minimal program Makefile bazlı ve aşağıdaki depoda


Programı "make clean all" ile derliyoruz ve bize bir çeşit hex formatı olan ihx dosyasını üretiyor

1731947697948.png
 
Program aslında bir LED blink edecek, ama ilk başta daha temel olarak test edebilmek için şu anda P1 portunun bütün pinlerinde kare dalga ürettiriyorum.

Bir süre buglar ve MCU nun datasheet'indeki bilgilerle boğuştuktan sonra çalışan bir IHX dosyası elde ettim. Şu anda 30 kHz lik bir kare dalga alıyorum pinlerden.

1731947940006.png
 
Sonrasında loop değişkenini unsigned long yapıp 10 bin kat daha büyük bir count seçince frekans 30 kHz de 3 Hz e düştü

C:
#include "numicro_8051.h"

void main(void)
{
    unsigned long i;

    P1M1 = 0x00;
    P1M2 = 0xFF;

    while (1)
    {
        P1 = 0xFF;
        for (i = 0; i < 200000; ++i)
        {
            ;
        }

        P1 = 0x00;
        for (i = 0; i < 200000; ++i)
        {
            ;
        }
    }
}

 
Evet artık 2 KByte kod limiti olmadan, işlemcinin bütün kaynaklarını kullanarak kod yazabilirim. İlk fırsatta bu panelmetre için yeni firmware yazıp çalışır hale getireceğim.
 

Çevrimiçi personel

Forum istatistikleri

Konular
6,944
Mesajlar
118,678
Üyeler
2,821
Son üye
Sfkzdmr

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top