This post is also available in: English

forum-banner


Forum Navigation
Konu ve mesaj oluşturabilmek için giriş yapmanız gerekmektedir.

18F2550 ile Nextion HMI ekran kullanımı

Merhaba Arkadaşlar gecen sene aldığım ilk aldığımda sadece Nexiton ekranın kendi IDE si ile Nexiton ekranda projeler yaapıyordum daha önce hiç haberleştirmesini yapmamıştım.

Sistem Analizi ve tasarımı dersinde bana robotik cerrahi ve biyomedikal konuları gelince bende biraz araştırma ile Elektromiyografi (EMG) dalgalarını gösteren bir cihaz yapmaya karar verdim. ( Zaten bu cihazı yaptınız mı otomatik olarak protez kol gibi v.b yapıları sürebiliyorsunuz ) .  Bunun içinde Nexiton ekranı kullanmaya karar verdim.

 

Bendeki Nexiton ekran 3,5" İnchlik bir ekran. Ekranıma Bir adet Waveform komponeneti ekledim. ve nexiton ekranıma bu arayüzü yükledim daha sonra haberleşmesini yapmaya başladım. PİC ile yapılmış örnek bulamadım zaten. olsa bile heleki bizim Türk milleti kodunu gizlemeyi acayip cok seviyor. her neyse benim de Şuan görev aldığım geliştirmeye calıştığımız bir platform var PICKAT adında. bende hazır böyle bir proje yapıyorum bu platform üzerinde deniyeyim ( platformun kullandığı pic 18F2550)

 

Her neyse ben nexiton ile haberleşmeye başladım. bir türlü ekrana dalga şeklini cizdiremiyorum. bütün gece uğraştım. okumadığım kaynak kalmadı en sonunda. oldu.

#include "mcu.h"   // 18F2550 nin register adreslerini icerir.
#include "config.h"  // picin sigorta ayarlarını tutar
#include "standart.h"  // Arduino fonksiyonlarını calıştırır
#include "UART.c"  // Donanımsal UART DRİVERİ

int durum=0;  // GLOBAL DEĞİŞKENLER
int ADC_VERI=0;
char YaziSonuc[50];

long map(long x, long in_min, long in_max, long out_min, long out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

char* itoa(int i, char b[]){    

 // DESİMAL SAYIYI KARAKTERE CEVİRİR. 
char const digit[] = "0123456789";
char* p = b;
if(i<0){
*p++ = '-';
i *= -1;
}
int shifter = i;
do{ 
++p;
shifter = shifter/10;
}while(shifter);
*p = '\0';
do{ 
*--p = digit[i%10];
i = i/10;
}while(i);
return b;
}

void VERI_YAZ(void)
{
UART_VERI_GONDER("\xff");
UART_VERI_GONDER("\xff");
UART_VERI_GONDER("\xff");
Delay(5); // 5ms bekle

}

void main(void)
{

pinMode(A4,INPUT);  // analog pin giriş olarak yapılandı
UART_BASLAT(9600);  // 9600 baud rate ile ileitşim başladı
Delay(100);   // 100 ms bekle
VERI_YAZ();   // nexitona başladığımızı bildiir.
UART_VERI_GONDER("page0"); // nexiton ekranın 0.sayfasına git
VERI_YAZ();

while (1)
{
ADC_VERI=analogRead(A4);  // analog A4 girişinı oku ADC_VERI değişkenine yükşe
durum=map(ADC_VERI,0,1024,0,250);  // 0-1023 aralığında gelen ADC değerini 0-250 arasına eşitle veya oranla durum değişkenine yükle
itoa(durum,YaziSonuc); // bizim işlenmiş analog değerimizi ekrana basabilmek icin karaktere cevirmemiz lazım bu fonksiyon o işi yapar. durum değişkeni desimal değere sahiptir YaziSonuc değeri 51 adet karakter dizisi tutan bir karakter arrayıdır. cevrim sonucunu karakter arrayına yükler yani YaziSonuc değişkenine ( değişken isimleri değişebilir sabit değildir sabit olan parametrelerdir)
UART_VERI_GONDER("add 1,0,"); // add diyerek ekleme yapacağımızı bildiriyoruz. parametre şöyledir. add  <waveform>,<kanal>,<değer> burada waveform nexiton ekrandaki waveform komponentin ID sidir.  vawe formda 4 adet kanal vardı 0. kanaldan 3. kanala kadar ben 0.kanalı kullandım.  ilk olarak ID ve kanalı belirttikten sonra.
UART_VERI_GONDER(YaziSonuc);  // peşine bizim işlenmiş ve karaktere dönüştürülmüş ADC değerimizi yolluyoruz.
VERI_YAZ();  // VERI YAZ FONKSİYONU ise şu işi yapar ; Bu ekranın üreticileri komut setinde şöyle demiş her iletişime başladıktan veya bitirdikten sonra 3 byte "\xFF" karakteri gönderin demiş bende VERI_YAZ fonksiyonunda 3 kere peş peşe bunu gönderiyorum her iletişimin başında ve sonunda. yada şöyle söyliyeyim her komut başlangıcı ve bitişinde.

}
}

 

Bu kod dökümantasyonunda belirttiğim gibi A4 girişinden analog veriyi okuyup okuduğu 0-1023 arası değişken değeri  map komutu yardımı ile bizim ekranımızın max alacağı 255 değerrine oranlar.  yani 0-1023 = 0-255 olur.

ekranımıza 1023 gönderirsek waveform komponentin değeirni aşacağı icin ya hata verecektir veya dalganın 255 ten yukarı olan değeri ekranda görünmeyecektir.

 

değerimizi oranladıktan sonra Serialden nexiton ekrana bu bilgiyi basacağız Nexiton üretecileri tüm komutlar ASCII formatındadır diyede belirtmiş. zaten desimal değeri direk seriale basar iseniz değere karşılık gelen karakteri görürsünüz o yüzden bizim karakter olarak basmamız lazım değerimizi bunun icinde itoa fonksiyonu ile desimal değeri karaktere ceviriyoruz.

 

daha sonra nexiton ekrana yeni birşey ekleyeceğimiz veya eklmeye devam edeceğimiz komutu add ile dalgaformu komponentin ID sini , Kanalını gönderiyoruz gönderikten sonra peşinede bizim desimalden karaktere dönmüş değerimizi basıp. VERI_YAZ fonksiyonu ile iletişimin bittiğini söylüyoruz. hepsi bu kadar.

 

Nexiton ekranın Serial uygulamaları bu kadar az olduğu için yayınlamak istedim hiç olmazsa mantığı anlaşılsın diye farklı komponentlerlede nasıl haberleşilir. boş zamanım oldukca deneyip tecrübeleirmi buraya aktaracağım.

 

 

Nexiton ekranın komut seti :  https://nextion.itead.cc/resources/documents/instruction-set/

 

Kullandığım Nexiton ekran : https://tr.banggood.com/3_5-Inch-480x320-Nextion-NX4832T035-HMI-TFT-LCD-Touch-Display-Module-Resistive-Touch-Screen-p-1138608.html?gmcCountry=TR&currency=TRY&createTmp=1&utm_source=googleshopping&utm_medium=cpc_bgcs&utm_content=zouzou&utm_campaign=pla-trg-ele-diy-pc&cur_warehouse=CN

 

Kullandığım 18F2550 kartı : https://pickat.org/

 

Buda projeden bir görüntü A4 girişinden potu cıkararak parmağıma değdirip gürültü ve parazitlerin ekranda nasıl göründüğünün bir resmi : https://hizliresim.com/zj1kv6

Nexiton ekranda Arayüz oluşturmak ve programlamak icin şu IDE yi kulalnıyoruz :  https://nextion.itead.cc/resources/download/nextion-editor/

 

Ben Nexiton ekranın nasıl kullanıldığını  Yotubede Teknik Kariyer adlı Bayram Güran Hocamızın kanalında paylaştığı eğitim videoları ile öğrendim : https://www.youtube.com/channel/UCWcYYSqI0N44SIoGoD_9frw

 

Tek Türkçe detaylı kaynağı Bayram Güren hocamız veriyor.

 

Ben kodu PICKAT üzerinden yazdım ama değişne bir şey yok C dili ile yazdım. Zaten komutlar cok acık. O yüzden MikroC ile de aynı iş yapılabilir. Tabiki MikroC nin kendi librarylerini kullanarak.

Tüm forum üyelerine mutlu günler dilerim. İyi calışmalar.

 

 

 

 

Merhabalar

Güzel çalışma olmuş ancak kodları "Code Insert" içine yazarsan daha güzel görülebilir.

PICKAT i siz mi geliştiriyorsunuz öyle bir şey okudum ancak tam anlayamadım ?

Kodlara baktığımda çok basitçe MikroC ile de yapılabilir PICKAT üzerinde geliştirme sebebin neydi onuda merak ettim .

Ayrıca yukarıda Türkçe fonksiyon isimleri var bu fonksiyonların içeriklerini görebiliyor muyuz ?

İyi Çalışmalar

 

Hocam PICKAT  Pic Geliştirme platformu olarak yerli girişimciler tarafından başlatılmış marka tescili olan bir proje. Ve bende PICKAT ın geliştirmek için çalışıyorum.

Arduino için yapılmış modülleri kullanıcılar rahatlıkla kullanabilirsin diye Kart tasarımı arduino boardına uygun olarak yapıldı.

 

Evet MikroC de yazabilirdim ancak. PICKAT yeni bir şey olduğu için örnekler oluşsun diye PİCKAT kartında yapmak istedim. hem pic üstüne böyle projeler oldukça az olsa bile koduna ulaşmak mümkün değil. En başta Türkçe kaynak yok. Bende Herkes anlayabilsin diye böyle birşey yaptım.

 

Arduino dan bu karta gececek kişiler zorlanmasın diye Arduinoda ki fonksiyonlar ile de calışabilir şekilde kütüphaneleri hazırlandı.

 

Türkçe Fonksiyonu ben UART.c de oluşturdum. normalde isimleri değişecek. Evet Kullanıcılar bu işlerin nasıl olduğunu anlasın diye kütüphanelerde acık kaynak olarak paylaşılacak.

Şu kişiden alıntılanmıştır: Furkan_Geri_Geldi tarhinde 8 Mart 2019, 01:39

En başta Türkçe kaynak yok.

Birileri yapacak ki Türkçe kaynak olsun. Başka türlü olamaz zaten .

Ben yinede istediği kadar yerli olsun bu tarz hazır platformları hiç sevemedim ve tavsiye de etmiyorum hiç kimseye, bence bu tarz platformlar kod tembelliğine yol açıyor.

İyi Çalışmalar

 

Hocam bunun IDE sinde direk C dili ile sıfırdan kendinizde yazabiliyorsunuz. Yani ister hazır fonksiyon kullanılsın isterseler aynı IDE icerisinde kendileri sıfırdan programlasın.  Hobi olarak uğraşan kişiler de kullanabilsin diye böyle bir şey düşünüldü.  Kart tasarımıda yine hangi dilde yazılırsa yazılsın 18f2550 üzerinde hemen yükle dene mantığında yapıldı IDE üstünden direk karta USB yolu ile kod yüklenebiliyor aslında MikroC ile karşılaştırmak gerekirse bire bir diyebiliriz.

 

Evet Hocam Hazır platformlar kod yazma tembellğine ve algoritma zayıflığına neden oluyor. Fakat bu işin daha geniş alana hitap etmesi için böyle bir şey düşünüldü.

 

İyi Calışmalar. :)


Hiçbir şahsi sosyal medya hesabım yoktur
Yanlızca tanıtım amaçlı sosyal hesaplar kullanılmaktadır
İletişim için sadece soru-cevap forumunu kullanınız