www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Arduino Mega ter Ethernet in branje NTP
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
clownfish
Član
Član



Pridružen-a: Pet 05 Avg 2005 13:05
Prispevkov: 764
Aktiv.: 3.43
Kraj: Povir / Ljubljana

PrispevekObjavljeno: Čet Jun 12, 2014 10:35 pm    Naslov sporočila:  Arduino Mega ter Ethernet in branje NTP Odgovori s citatom

Imam tale Arduino Mega z Ethernet shield-om.
Zadevo že nekaj časa testiram in deluje zadovoljivo.

Sedaj pa se mi je pojavila malce čudna težava.

V sketch-u za branje NTP čas iz interneta zadeva deluje če Arduino pridobi lokalni IP preko DHCP serverja.

Če pa v kodi zamenjam DHCP del z linijo z fiksnim IP-jem potem več ne dobim NTP časa iz interneta. Preprosto ne gre. Zanimivo WEB interface v obeh primerih deluje brez problemov.


Ima kdo kakšen namig ali idejo ??

Sem pa menjal že tako mac kot lokalni IP ampak ne pomaga.
Edino kar še nisem preizkusil je, da zadevo odnesem in priključim na drugo lokalno omrežje.

Koda:
// skupni del

byte mac[] = { 0xA5, 0x11, 0xC1, 0xD8, 0x1E, 0x2F };
#define LOCAL_IP 192,168,8,177 //change this to a local fixed ip address
IPAddress ip(LOCAL_IP);



// Primer uporabe fiksnega IP-ja

Ethernet.begin(mac,ip);       



// Oziroma pridobivanje IP preko DHCP serverja

// DHCP part - assign IP form DHCP server

       // Ethernet shield and NTP setup
       int i = 0;
       int DHCP = 0;
       DHCP = Ethernet.begin(mac);


       //Try to get dhcp settings 30 times before giving up
       while( DHCP == 0 && i < 30){
         delay(1000);
         DHCP = Ethernet.begin(mac);
         i++;
         Serial.print("DHCP try: ");
         Serial.println(i);

       }
       if(!DHCP){
        Serial.println("DHCP FAILED");
         for(;;); //Infinite loop because DHCP Failed
       }
       Serial.println("DHCP Success");
         Serial.print("IP number assigned by DHCP is ");
         Serial.println(Ethernet.localIP());
       
       




Prilagam še celoten sketch - pobran iz interneta

Koda:
    #include <SPI.h>
    #include <Ethernet.h>
    #include <EthernetUdp.h>
    #include <Time.h>
     
    /* ******** Ethernet Card Settings ******** */
    // Set this to your Ethernet Card Mac Address
//    byte mac[] = { 0xA5, 0x11, 0xC1, 0xD8, 0x1E, 0x2F };
    byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
     
    /* ******** NTP Server Settings ******** */
    /* us.pool.ntp.org NTP server
       (Set to your time server of choice) */
//    IPAddress timeServer(64, 99, 80, 30); //NE dela
//    IPAddress timeServer(193,193,193,107); //DELA :)
//    IPAddress timeServer(212,235,187,82); //DELA :)
    IPAddress timeServer(132,163,4,101); //DELA :)
//    IPAddress timeServer(213,161,18,102); //DELA :)
//    IPAddress timeServer(46,54,225,12); //DELA :)
//    IPAddress timeServer(46,54,225,12); //DELA :)
    /* Set this to the offset (in seconds) to your local time
       This example is GMT - 6 */
//    const long timeZoneOffset = -21600L; 
    const long timeZoneOffset = 7200L; 
     
    /* Syncs to NTP server every 15 seconds for testing,
       set to 1 hour or more to be reasonable */
    unsigned int ntpSyncTime = 15;       
     
     
    /* ALTER THESE VARIABLES AT YOUR OWN RISK */
    // local port to listen for UDP packets
    unsigned int localPort = 8888;
    // NTP time stamp is in the first 48 bytes of the message
    const int NTP_PACKET_SIZE= 48;     
    // Buffer to hold incoming and outgoing packets
    byte packetBuffer[NTP_PACKET_SIZE]; 
    // A UDP instance to let us send and receive packets over UDP
    EthernetUDP Udp;                   
    // Keeps track of how long ago we updated the NTP server
    unsigned long ntpLastUpdate = 0;   
    // Check last time clock displayed (Not in Production)
    time_t prevDisplay = 0;           
     
#define LOCAL_IP 192,168,8,177 //change this to a local fixed ip address
//#define LOCAL_IP 192,168,8,231 //change this to a local fixed ip address


IPAddress ip(LOCAL_IP);
     
    void setup() {
       Serial.begin(38400);
       Serial.println("VKLOP NTP test 1");


  Ethernet.begin(mac,ip);       

/*

// DHCP part - assign IP form DHCP server

       // Ethernet shield and NTP setup
       int i = 0;
       int DHCP = 0;
       DHCP = Ethernet.begin(mac);



       //Try to get dhcp settings 30 times before giving up
       while( DHCP == 0 && i < 30){
         delay(1000);
         DHCP = Ethernet.begin(mac);
         i++;
         Serial.print("DHCP try: ");
         Serial.println(i);

       }
       if(!DHCP){
        Serial.println("DHCP FAILED");
         for(;;); //Infinite loop because DHCP Failed
       }
       Serial.println("DHCP Success");
         Serial.print("IP number assigned by DHCP is ");
         Serial.println(Ethernet.localIP());
       
*/       
       
       //Try to get the date and time
       
       int trys=0;
       while(!getTimeAndDate() && trys<10) {
         trys++;
         Serial.print("Trys = ");         //DS
         Serial.println(trys);         //DS
       }
       
    }
     
    // Do not alter this function, it is used by the system
    int getTimeAndDate() {
       int flag=0;
       Udp.begin(localPort);
           
//       sendNTPpacket(timeServer);

      memset(packetBuffer, 0, NTP_PACKET_SIZE);
      packetBuffer[0] = 0b11100011;
      packetBuffer[1] = 0;
      packetBuffer[2] = 6;
      packetBuffer[3] = 0xEC;
      packetBuffer[12]  = 49;
      packetBuffer[13]  = 0x4E;
      packetBuffer[14]  = 49;
      packetBuffer[15]  = 52;   

     
      Udp.beginPacket(timeServer, 123);
      Udp.write(packetBuffer,NTP_PACKET_SIZE);
      Udp.endPacket();
 
       
       delay(1000);
       if (Udp.parsePacket()){
         Udp.read(packetBuffer,NTP_PACKET_SIZE);  // read the packet into the buffer
         unsigned long highWord, lowWord, epoch;
         highWord = word(packetBuffer[40], packetBuffer[41]);
         lowWord = word(packetBuffer[42], packetBuffer[43]); 
         epoch = highWord << 16 | lowWord;
         epoch = epoch - 2208988800 + timeZoneOffset;
         flag=1;
         setTime(epoch);
         ntpLastUpdate = now();
         

Serial.print("NTP time = ");         
clockDisplay();
while(1);
         
       }
       return flag;
    }
     
    // Clock display of the time and date (Basic)
    void clockDisplay(){
      Serial.print(hour());
      printDigits(minute());
      printDigits(second());
      Serial.print(" ");
      Serial.print(day());
      Serial.print(" ");
      Serial.print(month());
      Serial.print(" ");
      Serial.print(year());
      Serial.println();
    }
     
    // Utility function for clock display: prints preceding colon and leading 0
    void printDigits(int digits){
      Serial.print(":");
      if(digits < 10)
        Serial.print('0');
      Serial.print(digits);
    }
     
    // This is where all the magic happens...
    void loop() {
        // Update the time via NTP server as often as the time you set at the top
       
       
        if(now()-ntpLastUpdate > ntpSyncTime) {

         
          int trys=0;
          while(!getTimeAndDate() && trys<10){
            trys++;
         Serial.print("Trys = ");         //DS
         Serial.println(trys);         //DS

           
          }
          if(trys<10){
            Serial.println("ntp server update success");
          }
          else{
            Serial.println("ntp server update failed");
          }

//      getTimeAndDate();
      }
       
        // Display the time if it has changed by more than a second.
        if( now() != prevDisplay){
          prevDisplay = now();
          clockDisplay(); 
        }
    }

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
eddie
Član
Član



Pridružen-a: Sre 10 Dec 2003 21:02
Prispevkov: 706
Aktiv.: 3.17
Kraj: Severna primorska

PrispevekObjavljeno: Pet Jun 13, 2014 6:59 am    Naslov sporočila:   Odgovori s citatom

Po DHCP-ju verjetno dobiš tudi IP Gatewaya, ki te spušča na internet. Ali ga v primeru ročne konfiguracije kje definiraš?
Brez gatewaya na internet in do NTP strežnika pomoje neboš prišel.

PS: Gateway je IP tvojega routerja za internet.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
clownfish
Član
Član



Pridružen-a: Pet 05 Avg 2005 13:05
Prispevkov: 764
Aktiv.: 3.43
Kraj: Povir / Ljubljana

PrispevekObjavljeno: Pet Jun 13, 2014 9:10 am    Naslov sporočila:   Odgovori s citatom

eddie je napisal/a:
Po DHCP-ju verjetno dobiš tudi IP Gatewaya, ki te spušča na internet.


Verjetno res..

Citiram:
Ali ga v primeru ročne konfiguracije kje definiraš?
Brez gatewaya na internet in do NTP strežnika pomoje neboš prišel.

PS: Gateway je IP tvojega routerja za internet.


To vem, samo kako in kje to določim?
Kot gledam tale sketch tega nima definiranega?

Sam sem bolj razmišljal v smeri, da aplikacija kliče NTP server preko negovega IP-ja vseeno da to deluje nekako avtomatsko in da ne potrebuješ navesti IP od gateway-a'

namig?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
forest70
Član
Član



Pridružen-a: Ned 20 Jul 2008 1:00
Prispevkov: 588
Aktiv.: 3.07
Kraj: Koper

PrispevekObjavljeno: Pet Jun 13, 2014 9:43 am    Naslov sporočila:   Odgovori s citatom

To bo rešilo tvoje probleme Very Happy
Citiram:
// add if needed by your router or gateway
byte dns_server[] = { 192, 168, 1, 2 }; // The address of your DNS server
byte gateway[] = { 192, 168, 1, 254 }; // your gateway address

And change the first line in setup to include the gateway address in the startup values for Ethernet:

Ethernet.begin(mac, ip, dns_server, gateway);
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mobwap
Član
Član



Pridružen-a: Sre 14 Mar 2012 9:42
Prispevkov: 326
Aktiv.: 2.21
Kraj: Doma

PrispevekObjavljeno: Pet Jun 13, 2014 9:51 am    Naslov sporočila:   Odgovori s citatom

Ethernet Library dokumentacija.

Glede na topologijo omrežij, ethernet knjižnica prevzame prehod in DNS glede na ročno nastavljen IP in zamenja zadnji oktet z 1 (192.168.1.123 - arduino IP = prehod in DNS 192.168.1.1)

Prehod in DNS lahko nastaviš tudi ročno
Koda:

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
byte ip[] = { 192, 168, 1, 123 };   
byte dns[] = { 192, 168, 1, 1 };   
byte prehod[] = { 192, 168, 1, 1 };   

void setup()
{
  Ethernet.begin(mac, ip, dns, prehod);
}


Glede na to da DHCP deluje, si poglej nastavitve tvojega omrežja na routerju. Lahko da imaš nastavljen DHCP avtoritativno in router ne dovoli povezav iz IP naslovov, ki niso dodeljene s strani DHCP strežnika.
Ali pa imaš nastavljen DNS in Gateway na kaj drugega kot IP xxx.xxx.xxx.1

_________________
INSTALLING DEMOCRACY.... ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡€€€€€€€€€€€€€€ 44% DONE.
Installation failed.
404 error: form not found.

FORMING GOVERNMENT.... ‡‡‡‡‡€€€€€€€€€€€€€€€€€€€€€€ 23% DONE.
Formation failed.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
clownfish
Član
Član



Pridružen-a: Pet 05 Avg 2005 13:05
Prispevkov: 764
Aktiv.: 3.43
Kraj: Povir / Ljubljana

PrispevekObjavljeno: Pet Jun 13, 2014 9:54 am    Naslov sporočila:   Odgovori s citatom

Hvala za namig.

Srčno upam, da bo to pomagalo ker je res nenavadno da baje že precejkrat sprobana koda drugje deluje pri meni pa ne.

Javim !
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
clownfish
Član
Član



Pridružen-a: Pet 05 Avg 2005 13:05
Prispevkov: 764
Aktiv.: 3.43
Kraj: Povir / Ljubljana

PrispevekObjavljeno: Pet Jun 13, 2014 10:13 am    Naslov sporočila:   Odgovori s citatom

Še nekaj me zanima.

Kako določim MAC naslov tako, da bom vedel, da je ta še prost in še neuporabljen na kateri drugi napravi?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mirkatmir
Član
Član



Pridružen-a: Pet 25 Jul 2003 9:14
Prispevkov: 1876
Aktiv.: 8.42
Kraj: Ribnica (JN75IR)

PrispevekObjavljeno: Pet Jun 13, 2014 10:41 am    Naslov sporočila:   Odgovori s citatom

Mislim, da ti za to ni treba skrbeti, ter pustiš kar tistega, ki ga imaš v sketchu, ker bo naprava delovala v tvojem lan omrežju, kjer pa nimaš nekaj miljonov naprav, da bi se podvojile.
_________________
lp, Miran (Miro - S51SK)
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
clownfish
Član
Član



Pridružen-a: Pet 05 Avg 2005 13:05
Prispevkov: 764
Aktiv.: 3.43
Kraj: Povir / Ljubljana

PrispevekObjavljeno: Pet Jun 13, 2014 11:18 am    Naslov sporočila:   Odgovori s citatom

Aha torej MAC naslov ne sme biti isti kot na drugi napravi v istem lokalnem omrežju?
Za navzven pa ni važno ??
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mobwap
Član
Član



Pridružen-a: Sre 14 Mar 2012 9:42
Prispevkov: 326
Aktiv.: 2.21
Kraj: Doma

PrispevekObjavljeno: Pet Jun 13, 2014 11:59 am    Naslov sporočila:   Odgovori s citatom

Točno tako.
_________________
INSTALLING DEMOCRACY.... ‡‡‡‡‡‡‡‡‡‡‡‡‡‡‡€€€€€€€€€€€€€€ 44% DONE.
Installation failed.
404 error: form not found.

FORMING GOVERNMENT.... ‡‡‡‡‡€€€€€€€€€€€€€€€€€€€€€€ 23% DONE.
Formation failed.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
clownfish
Član
Član



Pridružen-a: Pet 05 Avg 2005 13:05
Prispevkov: 764
Aktiv.: 3.43
Kraj: Povir / Ljubljana

PrispevekObjavljeno: Pet Jun 13, 2014 10:23 pm    Naslov sporočila:   Odgovori s citatom

Fantje...

HVALA




Cool Laughing Applause



Komentar verjetno ni potreben?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
bajdec
Član
Član



Pridružen-a: Čet 12 Nov 2009 19:56
Prispevkov: 287
Aktiv.: 1.63
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Sob Jun 14, 2014 10:00 pm    Naslov sporočila:   Odgovori s citatom

Živjo, malo si bom sposodil temo.

Na ebayu sem naročil 28j60 ethernet modul in ga povezal s arduinom na pine 10 do 13 kot sem prebral na spletu.

Sedaj mi utripa oranžna lučka na ethernet modulu, na arduino je naložen webserver primer. Arduino pa preko serijskega vmesnika sporoči, da ne dobi IPja. Ne vem kaj bi lahko bilo narobe? Slab stik ni, se pa obnaša ravno tako...

EDIT: Arduno Pro Mini, atmega 328, 5V, PL2303 za 3.3V napetost
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
dumr666
Član
Član



Pridružen-a: Tor 31 Jan 2012 23:30
Prispevkov: 409
Aktiv.: 2.75
Kraj: Ljubljana

PrispevekObjavljeno: Sob Jun 14, 2014 10:43 pm    Naslov sporočila:   Odgovori s citatom

poglej, kako imaš nastavljen rutar, da nimaš ipja nastavljenega izven območja dovoljenih ipjev na ruterju oziroma kaj podobnega.
_________________
Robots will steal your job. But that's OK.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
bajdec
Član
Član



Pridružen-a: Čet 12 Nov 2009 19:56
Prispevkov: 287
Aktiv.: 1.63
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Ned Jun 15, 2014 10:35 am    Naslov sporočila:   Odgovori s citatom

Na ruterju so nastavitve OK, ne deluje v nobeni konfiguraciji (statično/dinamično(DHCP)). Ruter je Enkom (amis modem) z prehodom na 192.168.1.254.

Na arduino izpiše "Server is at 0.0.0.0".

Ethernet modul je pravilno povezan na pine 10, 11, 12 in 13.

Deluje ENC28J60 s ethernet.h knjižico?

Je mogoče kakšna omejitev dolžine kabla? Trenutno imam ~30-40cm kabla med arduinom in ethernet modulom.

Mogoče potrebujem kak "napetostni" pretvornik, glede na to, da je arduino 5V, 28J60 pa 3.3V?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
rafaellsi
Član
Član



Pridružen-a: Ned 11 Sep 2011 18:54
Prispevkov: 478
Aktiv.: 3.12
Kraj: Radovljica

PrispevekObjavljeno: Ned Jun 15, 2014 12:18 pm    Naslov sporočila:   Odgovori s citatom

Verjetno bi bilo bolje poiskusiti s kako knjižnjico namenejeno za ENC28J60 vmesnik. ... recimo tole
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 67 dni


Powered by phpBB © 2001, 2005 phpBB Group