Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

ccs c enc28j60

Başlatan Emre MERMİ, 27 Ocak 2015, 21:47:04

Emre MERMİ

Bugün ccs c 5.037 yi indirdim biraz kurcaladım. enc28j60 kütüphanesi gelmiş( bir ara baya  aramış bulamamıştım). Gördüm çok sevindim. Uzun zamandır micro c de görüp imrendiğim, neden bizde de yok dediğim  bir kütüphaneydi.
uygulama geliştiren , kütüphaneyi inceleyen arkadaş  oldu mu ?

Emre MERMİ


baran123

Sanırım ethernet uygulaması yapmak istiyorsunuz.Bende bir ara heveslendim ama PIC'den çok diğer alanlarda da bilgi gerekli, yapcağınız uygulamaya göre internete bağlama pc ile iletişim ip vs gibi.Tavsiyem önce bunları bir incelemeniz çok yararlı oluyor.Çünkü bazı bilgiler edinmeden girince hiç bir şey aanlaşılmıyor kendimden biliyorum :)

Emre MERMİ

hocam bir ara çok heveslendim pic ile yapmaya ccs ile kütüphane bulamadım micro c ye de giremedim o yüzden kaldı. Barış samancı hocamın çok güzel bir projesi vardı kendi sitesinde biraz inceledim ama yapamadım. Şimdi hazır kütüphane de varken kolay olur diye düşündüm. Aslında arduino ile çok kolay da ben pic ile de yapmak istiyorum birşeyler öğrenmek için. Dediğiniz gibi bağlantı kurmak çok sıkıntı web konusunda baya bilgi lazım. Eğer yapabilirsem paylaşmayı düşünüyorum. Tavsiyeniz için çok teşekkür ederim :)

baran123

Evet bende o kaynakları gördüm.Barış samancı'nın bilgileri güzel.Eğer böyle bir şey yapmaya karar verirsen arduino uygulamaları inceleyerek kendi derleyicine çevirmeye çalışabilirsin.Normalde öğreneceğin bilginin kat kat fazlasını alıyorsun çünkü derleyiciler arasıdan farklılıklar oalbiliyor misal ben XC8 kodunu CCS e çevirmeye çalışıyorum tahmin ettiğimden çok şey öğrendim :) Bu tarz projede ilk adım olarak C# üzerinden TCP/IP uygulamalarını inceleyebilirsin ethernet yolu ile PIC le iletişim kurabilirsin daha sonra internete bağlama gibi işlemler yaparsın.Yada ESP modül ile WİFİ den bağlanabilirsin ethernet kadar sıkıntıya sokmaz ama yine internet bilgisi :/ Bende sınavları atlatınca derinlemesine gireceğim bu internet oalylarına :D

Emre MERMİ

kod çevirmeyi gözüm yemediği için hiç girmedim ama tavsiyeniz üzerine o olaya da dalarım hocam, aynen benimde  bütlerim var bitmesini bekliyorum bitince konuya dalacağım , özellikle 2. dönemin başında sağlam bir proje ile konu açabilirim forumda :)

gokhangokcen

#6
hocam ben epey dallandım bu olaya hatta şu an bile önümde :D gayet güzel çalışıyor modemde nat açtım dünyanın öbür ucundan bile arkadaşlar bağlanıp bazen ledleri oynuyor :) bu konuda elimden geldiğince yardımcı olurum. Ne yapmak nasıl başlamak istediğinizi söylerseniz nokta atışı ile başlayabiliriz.

Hatta ben başlangıç için bir kaç resim ve dosya yükleyeyim;

[IMG]http://i62.tinypic.com/14mgygw.jpg[/img]
[IMG]http://i61.tinypic.com/2ir7uip.jpg[/img]
[IMG]http://i62.tinypic.com/33dhvsz.jpg[/img]
[IMG]http://i58.tinypic.com/2eci6bm.jpg[/img]
[IMG]http://i61.tinypic.com/jta0ck.jpg[/img]
[IMG]http://i58.tinypic.com/2prxr92.jpg[/img]
[IMG]http://i62.tinypic.com/2w6v21h.jpg[/img]
[IMG]http://i61.tinypic.com/25iyc2e.jpg[/img]
[IMG]http://i57.tinypic.com/eg5uo8.jpg[/img]
[IMG]http://i62.tinypic.com/1zpto3l.jpg[/img]
[IMG]http://i60.tinypic.com/2lbzuki.jpg[/img]

arkadaşlar kendi düzenlediğim web sayfası vardı onu koymadım malum firma ismi bir kaç şey girdiğim için hoş olmaz diye düşündüm.
resimler gayet anlaşılır diye düşünüyorum kodları tek tek koymaya kalksam gereksiz kalabalık olacak(çok fazla include içeriği var hepsini tek tek koymak zor olacak) eğer bulunsun derseniz eklerim sorun yok.

resimleri kısaca özet geçecek olursak;


  • 1. olarak işlemci seçimimi 18f4620 den yana kullandım çünkü oldukça fazla hafıza ve ram'a ihtiyaç var
  • 2. adımda soltan tcp/ip sekmesini seçip gerekli ayarlamaları yapıyoruz.Ben manuel ip atadım ip Address bloğu bizim cihazımızın yani işlemcinin ip'sidir. gateway address bloğu ise modem ya da ana sunucu adresidir.netmask tam olarak bilmediğim için yorum yapmak istemiyorum.default değeri olarak bıraktım
  • 3. resimde ise işlemciyi bir server olarak kurmak istersek seçeceğimiz sekme HTTP Server'dir. port olarak 80 default geliyor tarayıcıdan girmek için extra port girmemek için değiştirmedim.
    Dynamic display fields ise ekrana(tarayıcıya) anlık veri(değişken) göndermek/göstermek için kullanılıyor. Input buton ise tarayıcı üzerinde bir buton oluşturuyor adetleri 3 olarak girdim isteğiniz doğrultusunda bu adetleri değiştirebilirsiniz
  • Derleyicide bir sıkıntı(bana göre) var fuse ayarlarını otomatik olarak girmiyor.o yüzden main programı içerisine mutlaka fuse ayarlarını yapmanız gerekir yoksa işlemci çalışmıyor.ya da saçmalıyor.
  • bu resimdeki main.c ise benim düzenlediğim bir kod rgb led var pinlere bağlı durumlarını ekrana(tarayıcıya) gönderiyor
  • bu resimde ise tarayıcı üzerindeki butonların kullanımı(ben bu şekilde kullandım isteğiniz doğrultusunda kodları yazarsınız) ile ilgili bir görsel.
  • tarayıcıdaki işlemci sayfasının görünüş şekli, ben tekrar işlemciye kod yüklemedim hazır içinde kendi kodum vardı bu oluşturulan index sayfası görüntüsüdür.Görüldüğü gibi project wizardda oluşturduğumuz 3 input butonu ve 3 değişken tablosu vardur.başlangıçta atadığımız cihaz ip sini tarayıcıya girdiğimizde de aynı sayfayı göreceğiz
  • bu ise sayfanın html alt yapısı buradan istediğimiz düzenlemeleri yapabiliyoruz.buton sayısı arttırma ekrana logo ekleme,site yönlendirmeleri aklınıza gelebilecek her şey :)
    Not: editlemek için oluşturduğunuz proje klasöründe pages isimli klasörün içindeki index sayfasını kullanabilirsiniz.
  • 12. resmimiz ise yine proje klasöründeki mpfs kod parçacıklarıdır.
    Kısaca yaptığı iş html sayfasında yaptığımız arayüz değişikliklerini ccs c derleyicisine include etmektedir.Html kod parçacıklarında yaptığınız değiştirmeden sonra sayfayı kaydedip mutlaka bu işlemleri yapmalısınız..

    1. olarak mpfs.exe yi çalıştırıyoruz.
    2. olarak makempfsimg.bat uygulamasını çalıştırıyoruz
    3. olarak ise ccs c programını derleyip işlemciye kodu yüklüyoruz.
dilim döndüğünce elimden geldiğince anlatmaya çalıştım umarım birilerine faydası dokunur. Takıldığınız yer olursa sorabilirsiniz.

iyi günler dilerim cümleten
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

Emre MERMİ

#7
Hocam elektromanyetik teorisi 2 dersi bütü vardı az önce ondan çıktım sıfır alacağım okul uzayacak falan ama şu mesajınızı ve anlatımınızı görünce o kadar mutlu oldum ki sınavın kötü geçtiğini bile unuttum, çok teşekkür ediyorum anlatımınız  için Allah razı olsun sizden. En kısa sürede devreyi kurup çalıştıracağım. Bunun için enc modülü alacağım hemen elimdeki modül bozuldu. Modül elime geçer geçmez deneyeceğim. Tekrar tekrar teşekkür ediyorum :)

gokhangokcen

Şu an cihaz aktif aslında gayet güzel çalışıyor :) web server olarak açık 3 led bağladım dünyanın neresinden istersek bu ledleri açıp kapatabiliyoruz :)
Takıldığınız yer olursa buradan sorabilirsiniz başkalarına faydamız olsun
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

Emre MERMİ

#9
Ben aynısını arduino ile yaptım dediğiniz gibi port açarak her yerden kontrol sağlanıyordu. [emoji4]

Recep METE

@gokhangokcen, çok teşekkürler gayet yararlı oldu. Hocam bu çalışmanın kodlarını verebilir misiniz. Teşekkürler.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

gokhangokcen

@semfero hocam ccs c kurulu ise kodlara ihtiyacınız yok resimdeki adımları takip edin zaten kodları kendisi oluşturuyor tek eklemen gereken #fuses satırıdır
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

Recep METE

Alıntı yapılan: gokhangokcen - 31 Ocak 2015, 12:34:40
@semfero hocam ccs c kurulu ise kodlara ihtiyacınız yok resimdeki adımları takip edin zaten kodları kendisi oluşturuyor tek eklemen gereken #fuses satırıdır

Hocam html kodlarını yükler miniz. Duacı oluruz.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

baran123

Gohangocen hocam siz fazla uzaklasmayin :D

gokhangokcen

#14
pages klasörünün içindeki index.htm dosyasına sağ tık yapıp not defterinde açtığınızda karşınıza çıkacak olan kod

index.htm
<html>
<head>
<script type="text/javascript">
/////////////////////////////////////////////////////////////////////////
////                                                                 ////
////  AJAX routines for rx/tx of data without having to reload page. ////
////                                                                 ////
////  Written by CCS, Inc.                    http://www.ccsinfo.com ////
////                                                                 ////
////        (C) Copyright 1996,2013 Custom Computer Services         ////
//// This source code may only be used by licensed users of the CCS  ////
//// C compiler.  This source code may only be distributed to other  ////
//// licensed users of the CCS C compiler.  No other use,            ////
//// reproduction or distribution is permitted without written       ////
//// permission.                                                     ////
/////////////////////////////////////////////////////////////////////////
var ajaxGet;
var t;
var waiting = 0;
var tValid = 0;
var nextCgi = "";
var lastCgi = "";
var ios6workaround = 0;

function setStartTime()
{
   tValid = 1;
   t = setTimeout('ajax()', 500);
}

function ajax()
{
   if (waiting)
   {
      waiting--;
      if (waiting == 0)
      {
         if (lastCgi != "")
         {
            if (nextCgi == "")
               nextCgi = lastCgi;
            else
               nextCgi = lastCgi   "&"   nextCgi;
         }
      }
   }

   if (!waiting)
   {
      ajaxGet=GetXmlHttpObject();

      if (ajaxGet==null)
      {
         alert ("Your browser does not support AJAX!");
         return;
      }

      waiting = 5;  //wait 2.5 seconds for a response

      ajaxGet.open("POST", "index.xml", true);

      ajaxGet.onreadystatechange = stateChanged;

      if (nextCgi != "")
      {
         ajaxGet.send(nextCgi);
         lastCgi = nextCgi;
         nextCgi = "";
      }
      else
      {
         ajaxGet.send("IGNOREDTAG=" ios6workaround);

         if (  ios6workaround > 255)
            ios6workaround = 0;
      }
   }

   setStartTime();
}

function sendCgi(cmd, value)
{
   if (nextCgi != "")
      nextCgi  = "&";

   nextCgi  = cmd   "="   value;
}

function GetElementNodeValue(xmlDoc, id)
{
   return xmlDoc.getElementsByTagName(id)[0].childNodes[0].nodeValue;
}

function GetElementAttributeValue(xmlDoc, element, attribute)
{
   var n;
   var i;

   n = xmlDoc.getElementsByTagName(element)[0].attributes.length;

   for (i=0; i<n; i  )
   {
      if (xmlDoc.getElementsByTagName(element)[0].attributes[i].name == attribute)
      {
         return xmlDoc.getElementsByTagName(element)[0].attributes[i].value;
      }
   }

   return "";
}

function UpdateExistingTable(xmlDoc)
{
   var i = 0;

   for(;;)
   {
      var id = "dyn" i;
      i  ;
      if (document.getElementById(id))
      {
         document.getElementById(id).innerHTML = GetElementNodeValue(xmlDoc, id);
      }
      else
         break;
   }
}

function stateChanged()
{
   if (ajaxGet.readyState==4)
   {
      UpdateExistingTable(ajaxGet.responseXML.documentElement);

      waiting = 0;
  }
}

function GetXmlHttpObject()
{
   if (window.XMLHttpRequest)
   {
      // code for IE7 , Firefox, Chrome, Opera, Safari
      return new XMLHttpRequest();
   }
   if (window.ActiveXObject)
   {
      // code for IE6, IE5
      return new ActiveXObject("Microsoft.XMLHTTP");
   }
   return null;
}
</script>


<title>Demo page</title>

</head>

  <body>


<a href="http://www.google.com.tr"><center><h1>Google</center></h1></a>
<center><h3>Led Kontrol Sayfasına Hoşgeldiniz</H3></center>
<center><b>Aydınlatmada Devrim Çoktan Başladı!..</b></center>

</br>

<table cellpadding="2" cellspacing="2" width="20%">
<tr>
<td bgcolor="#cccccc">Column 1</td>
<td bgcolor="#cccccc">Column 2</td>
</tr>
<tr>
<td>Row 2</td>
<td>Row 2</td>
</tr>
</table>

<body>
</html>


arkadaşlar kendimiz için düzenlediğim html kodları 3 led kontrolünü sağlıyor program main programınıda ekleyeyim

main.c
#include <main.h>

int lamba=0;
  int durum1=0,durum2=0,durum3=0;


unsigned int8 http_format_char(char* file, char id, char *str, unsigned int8 max_ret)
{
  char new_str[25];

if(id == 0) //dynamic element 0
{
durum1 = bit_test (PORTB, 0);
if(durum1==1)
{
sprintf(new_str,"Mavi Led %s","Acik");
strncpy(str, new_str, max_ret);
}else{
sprintf(new_str,"Mavi Led %s","Kapali");
strncpy(str, new_str, max_ret);
}
}
if(id == 1) //dynamic element 1
{
durum2 = bit_test (PORTB, 1);
if(durum2==1)
{
sprintf(new_str,"Yesil Led %s","Acik");
strncpy(str, new_str, max_ret);
}else{
sprintf(new_str,"Yesil Led %s","Kapali");
strncpy(str, new_str, max_ret);
}
}
if(id == 2)
{
durum3 = bit_test (PORTB, 2);
if(durum3==1)
{
sprintf(new_str,"Kirmizi Led %s","Acik");
strncpy(str, new_str, max_ret);
}else{
sprintf(new_str,"Kirmizi Led %s","Kapali");
strncpy(str, new_str, max_ret);
}
}
} 

   
 
   
void http_exec_cgi(char* file, char *key, char *val)
{
   /* TODO: This is a callback function to the HTTP stack.
   This function is called with each key/value pair read in
   the GET/POST request before any web data is sent to the
   web browser. 'key' matches the name of the field and
   'val' is the value it was changed to.
   Example:
   int8 v = atoi(val);
   if (stricmp(key,led1_key)==0)
      LedSet(0, v);
   */
   if (strcmp(key, "button00") == 0)
   {
         lamba=1;
   }
   if (strcmp(key, "button01") == 0)
   {
         lamba=2;
   }
   if (strcmp(key, "button02") == 0)
   {
         lamba=3;
   }
   if (strcmp(key, "button03") == 0)
   {
         lamba=4;
   }
   if (strcmp(key, "button04") == 0)
   {
         lamba=5;
   }
   if (strcmp(key, "button05") == 0)
   {
         lamba=6;
   }   
   if (strcmp(key, "button06") == 0)
   {
         lamba=7;
   }

}

void IPAddressInit(void)
{
   //MAC address of this unit
   MY_MAC_BYTE1=MY_DEFAULT_MAC_BYTE1;
   MY_MAC_BYTE2=MY_DEFAULT_MAC_BYTE2;
   MY_MAC_BYTE3=MY_DEFAULT_MAC_BYTE3;
   MY_MAC_BYTE4=MY_DEFAULT_MAC_BYTE4;
   MY_MAC_BYTE5=MY_DEFAULT_MAC_BYTE5;
   MY_MAC_BYTE6=MY_DEFAULT_MAC_BYTE6;

   //IP address of this unit
   MY_IP_BYTE1=MY_DEFAULT_IP_ADDR_BYTE1;
   MY_IP_BYTE2=MY_DEFAULT_IP_ADDR_BYTE2;
   MY_IP_BYTE3=MY_DEFAULT_IP_ADDR_BYTE3;
   MY_IP_BYTE4=MY_DEFAULT_IP_ADDR_BYTE4;

   //network gateway
   MY_GATE_BYTE1=MY_DEFAULT_GATE_BYTE1;
   MY_GATE_BYTE2=MY_DEFAULT_GATE_BYTE2;
   MY_GATE_BYTE3=MY_DEFAULT_GATE_BYTE3;
   MY_GATE_BYTE4=MY_DEFAULT_GATE_BYTE4;

   //subnet mask
   MY_MASK_BYTE1=MY_DEFAULT_MASK_BYTE1;
   MY_MASK_BYTE2=MY_DEFAULT_MASK_BYTE2;
   MY_MASK_BYTE3=MY_DEFAULT_MASK_BYTE3;
   MY_MASK_BYTE4=MY_DEFAULT_MASK_BYTE4;
}

void main()
{

   IPAddressInit();
   TickInit();
   enable_interrupts(GLOBAL);
   StackInit();


   while(TRUE)
   {
      StackTask();
      StackApplications();
   
switch(lamba)
{
case 1:
output_high(PIN_B0);
lamba=9;
break;
case 2:
output_low(PIN_B0);
lamba=9;
break;
case 3:
output_high(PIN_B1);
lamba=9;
break;
case 4:
output_low(PIN_B1);
lamba=9;
break;
case 5:
output_high(PIN_B2);
lamba=9;
break;
case 6:
output_low(PIN_B2);
lamba=9;
break;
case 7:
output_low(PIN_B0);
output_low(PIN_B1);
output_low(PIN_B2);
lamba=9;
break;
case 9:
output_toggle(PIN_B3);
delay_ms(100);
break;

}
   }

}
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.