18F2550 ile Nextion HMI ekran kullanımı

Başlatan Furkan KELEŞOĞLU, 07 Mart 2019, 23:45:26

Furkan KELEŞOĞLU

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.
Mekatronik Teknikeri. <br />Elektrik-Elektronik Teknisyeni.

taydin

Eline sağlık Furkan.

Yalnız program kaynak kodu eklerken direkt olarak mesaja paste etme. Onun yerine "#" resmi olan butonu kullanarak KOD penceresi aç ve onun içine paste et. Mesela aşağıdaki gibi:

#include <stdio.h>

int main(void)
{
   printf("Hello world!\n");
   return 0;
}
Elektrik sayacı döndürücüsü ...

Furkan KELEŞOĞLU

Alıntı yapılan: taydin - 08 Mart 2019, 16:11:21Eline sağlık Furkan.

Yalnız program kaynak kodu eklerken direkt olarak mesaja paste etme. Onun yerine "#" resmi olan butonu kullanarak KOD penceresi aç ve onun içine paste et. Mesela aşağıdaki gibi:

#include <stdio.h>

int main(void)
{
   printf("Hello world!\n");
   return 0;
}


Teşekkür Ederim abi , Dediğin gibi düzelttim sağolasın :)
Mekatronik Teknikeri. <br />Elektrik-Elektronik Teknisyeni.

Hızlı Yanıt

Not: Bu konu bir moderatör tarafından onaylanmadan görüntülenmeyecektir.

Adı:
E-Posta:
Doğrulama:
Lütfen bu kutuyu boş bırakın:
IRFP250 Nedir:
kısayollar: göndermek için alt+s veya önizleme yapmak için alt+p'ye basın