Loading...
  Show Posts
Pages: [1] 2 3 ... 11
1  International / Software / Re: ArduinoDue Scheduler on: April 22, 2013, 06:43:11 am
eccomi smiley

allora, il codice in questione è questo:

Code:
void dda_move(long micro_delay)
{
  long max_delta;
  long x_counter;

  // initialise Heartbeat
  //=====================
  InitialiseHeartBeat(true);

  // enable our steppers
  //====================
  enable_steppers();

  // figure out our deltas
  //======================
  max_delta = delta_steps.x;

  // init stuff
  //===========
  x_counter = -max_delta/2;

  // our step flags
  //===============
  x_can_step = false;

  if (micro_delay >= 16383)
    milli_delay = micro_delay / 1000;
  else
    milli_delay = 0;

  #ifdef DEBUG
    Serial.print("MaxDelta: ");
    Serial.print(max_delta, DEC);
    Serial.print(" MilliDelay: ");
    Serial.print(milli_delay, DEC);
    Serial.print(" MicroDelay: ");
    Serial.println(micro_delay, DEC);
  #endif
 
  // do our DDA line!
  do
  {
    // see if user hit eStop
    //======================
    eSTOP();
    x_can_step = can_step(FC_HOME, FC_LIMIT, current_steps.x, target_steps.x, x_direction);

    if (x_can_step)
    {
      x_counter += delta_steps.x;

      if (x_counter > 0)
      {
        do_step(BIG_EASY_DRIVER_STEP);
        x_counter -= max_delta;

        if (x_direction)
          current_steps.x++;
        else
          current_steps.x--;
      }
    }
    current_units.x = to_units(unit_X_MM, float(current_steps.x));
   
    if (!x_can_step)
      return;
     
    // wait for next step
    //===================
    if (milli_delay > 0)
      delay(milli_delay);
    else
      delayMicroseconds(micro_delay);
    Heartbeat();
  } while (x_can_step);
 
  // set our current to target
  //==============================
  /*if (!free_run_end_exec){
    current_units.x = target_units.x;
    Serial.print("current_units.x= ");
    Serial.println(current_units.x);
  }
  else{
    target_units.x = current_units.x;
  }*/
    Serial.print("current_units.x= ");
    Serial.println(current_units.x);
    Serial.print("target_units.x= ");
    Serial.println(target_units.x);
   
  //current_units.x = target_units.x;
  calculate_deltas();

  // reset Heartbeat
  //================
  InitialiseHeartBeat(false);
}

sarebbe da gestire con interrupt o qualcosa di simile, al momento è gestito da un ciclo do{} che "blocca" il ciclo all'interno di esso..

mediante scheduler ho evitato che il codice mi si bloccasse sul serio all'interno del loop, ma non è sufficiente per poter gestire il display senza ritardi nel invio degli impulsi di step smiley
se riuscite a postarmi un esempio per una gestione ottimale di un interrupt (timer) con arduinodue vi sarei molto grato!!! smileysmileysmileysmileysmileysmileysmileysmileysmiley

saluti
kattivik76
2  International / Software / Re: ArduinoDue Scheduler on: April 19, 2013, 01:52:54 pm
Eccomi di nuovo alla carica,

Utilizzo lo scheduler con buoni risultati, ma non è quello che cerco... Nel senso, ho un motore stepper ed un LCD I2C... Ed ecco il domandone che già immagini:

Come posso implementare un interrupt al mio progetto?

Ovviamente al momento se libero il codice che mi visualizza i dati sul display, il motore subisce una drastica riduzione degli impulsi... Inevitabile visto che il tutto funziona sul clock di sistema ed è subordinato a tempi di delay prestabiliti di 10microsecondi...

Grazie smiley-wink

Saluti kattivik76
3  International / Software / Re: Caricamento file compilati tramite porta usb senza sorgente on: April 18, 2013, 02:39:36 am
finalmente si vede la luce in fondo al tunnel smiley

grazie delle info che mi hai passato, mi sono messo un po' d'impegno ed ho realizzato un programma per il "Live Update" della mie applicazioni ArduinoDue, questo in previsione di piazzarne parecchie sul mercato smiley

la gestione del liveupdate si divide in due parti:

1.0.0 ) caricamento da parte dello sviluppatore (io) del file xxx.cpp.bin (file compilato da IDE) su un server apposito insieme ad un file denominato CHKSUM.
1.0.1 ) il file CHKSUM contiene nel ordine: summa di controllo checksum, nome del file, dimensione del file, modello apparecchio, versione firmware bed9fdb3a2e2fb7b9abe27ea2c9fd2f2,xxx.cpp.bin,63.21KB,BASIC,v05ok-1

2.0.0 ) programma eseguibile da installare su PC
2.0.1 ) verifica della presenza di ArduinoDue collegato al PC, mediante VID e PID hardware, recupero della corrispondente COMx
2.0.2 ) invio richiesta versione firmware e modello apparecchiatura ad ArduinoDue
2.0.3 ) download del file xxx.cpp.bin dal server liveupdate
2.0.4 ) calcolo chksum del file scaricato
2.0.5 ) lettura (non download) del file CHKSUM e recupero delle relative informazioni
2.0.6 ) confronto della versione del firmware presente su ArduinoDue con la versione presente nel file CHKSUM appena letto
2.0.7 ) confronto summa di checksum calcolata del file xxx.cpp.bin con il checksum presente nel file CHKSUM appena letto
2.0.8 ) confronto del modello apparecchiatura collegata (BASIC) con quella presente nel file CHKSUM appena letto
2.0.9 ) se tutto corrisponde ed il firmware di arduino è meno aggiornato del firmware appena scaricato, effettua l'aggiornamento di ArduinoDue mediante il file bossac.exe
2.1.0 ) effettua il RESET dell'apparecchiatura riavviando il sistema con il nuovo firmware.

in questo modo riesco "virtualmente" a mantenere aggiornate tutte le apparecchiature mediante un semplice programma che NON necessita di nessun intervento da parte dell'utilizzatore finale smiley

pacca sulla spalla grazie !!! smiley

saluti
kattivik76
4  International / Hardware / Re: ArduinoDue Native USB Port on: April 13, 2013, 09:53:05 am
Ecco il link: http://www.sainsmart.com/sainsmart-sensor-shield-v2-for-arduino-mega-2560-r3-1280-iic-bluetooth-lcd-sd-io.html ma posso provare con la porta serial0 mediante FTDI?

Grazie
Kattivik76
5  International / Software / Re: Caricamento file compilati tramite porta usb senza sorgente on: April 12, 2013, 01:16:42 pm
Moooooltooo interessante e molto utile,

Come al solito effettuerò delle prove e poi posterò tutto smiley-wink

Grazie
kattivik76
6  International / Software / Caricamento file compilati tramite porta usb senza sorgente on: April 12, 2013, 09:37:05 am
Ciao a tutti,

dove vengono posizionati i files che vengono generati durante la compilazione di un progetto (IDE 1.5.2)?
è possibile effettuare il caricamento di una scheda ArduinoDue tramite porta USB dei soli file compilati senza avere a disposizione il progetto sorgente?
è necessario un programma diverso dalla IDE?

questo perchè vorrei realizzare una sorta di live update per la distribuzione del mio nuovo firmware senza distribuire il codice sorgente, è possibile?

grazie a tutti smiley

saluti
kattivik76
7  International / Software / Re: Problemi con stringhe!! on: April 11, 2013, 05:01:29 pm
Io uso semplicemente questo modo:

Code:
// our command string
//===================
# define COMMANDSIZE 128
char GWord[COMMANDSIZE];

// move with G1 + feedrate in freerun (max distance -3mt)
sprintf(GWord, "G1 X-3000 F%4.1f", pot_feedrate, " :");


GWord conterrà per esempio, "G1 X-3000 F500.3 :" ed è un array char di lunghezza 18 anche se l'array dichiarato è 128 smiley-wink
8  International / Software / Re: ArduinoDue Scheduler on: April 11, 2013, 04:37:20 pm
Eccomi dopo varie prove smiley

Da quello che ho potuto vedere lo scheduler funziona come il "vecchio" doevent() di visual basic smiley-wink

mio avviso il tutorial non è chiaro per niente!!!

Per restituire il controllo al task in un ciclo do{} l'istruzione yield() deve essere inserita al suo interno, così come per tutti gli altri task creati, il delay() non restituisce il controllo a nessun task smiley-wink

Grazie delle info smiley-wink
9  International / Software / Re: ArduinoDue Scheduler on: April 11, 2013, 08:32:41 am
grazie Leo,

quindi sarebbe plausibile il fatto che mi si resetti o si blocchi arduinodue in caso di posizionamento errato di yield();?

stasera ci riprovo smiley

grazie smiley

kattivik76
10  International / Software / Re: ArduinoDue Scheduler on: April 11, 2013, 07:18:02 am
grazie Leo,

quindi se non ho capito male:

mettiamo che io abbia 5 task,

loop();  //contiene dei delay per gli impulsi dello stepper
task02(); contiene dei delay per il display
task03(); nessun delay, solo stati logici
task04(); nessun delay, solo stati logici
task05(); contiene dei delay

in questo caso, l'istruzione yield(); va messa soltanto in task03(); e task04(); giusto?

grazie
saluti

kattivik76
11  International / Software / ArduinoDue Scheduler on: April 11, 2013, 04:06:31 am
Ciao a tutti,

ho inserito la libreria http://arduino.cc/en/Reference/Scheduler nel mio progetto,
ma non ho capito come interagisce con il loop (main) e gli altri task.

ho notato che se eseguo un programma con un banale delay(xxx); contenuto in un task chiamato loop2(); arduino si blocca o si resetta...
inoltre non mi è chiaro cosa serva l'istruzione yield();

passa il controllo ad un altro task, ma il task corrente rimane in esecuzione o si interrompe?

la gestione dei task mi server per poter visualizzare in tempo reale su un display la posizione corrente, la posizione richiesta e la velocità di movimentazione di un motore stepper, e visto che il comando del motore per la gestione del BigEasyDriver avvieme mediante ciclo do{} non posso gestire il display nello stesso task in quanto esso è come se si "bloccasse" fino al termine del posizionamento del motore.

la struttura che vorrei realizzare è la seguente:

task loop() lanciato di default e contenente il parse gcode e la gestione del motore (questo task contiente il ciclo do{})
task display(); per la gestione del display e la selezione delle informazioni da visualizzare in base ai modi di funzionamento
task mode(); gestisce i modi di funzionamento e gli I/O verso led di segnalazione, pulsanti vari e selettori

spero che qualcuno mi possa spiegare meglio smiley-wink

grazie

saluti
kattivik76
12  International / Hardware / Re: ArduinoDue Native USB Port on: April 09, 2013, 05:28:23 pm
ho installato il sensor shield v2 su arduinodue, questo shield è provvisto di un paio di morsetti a vite per l'alimentazione esterna... pensavo fosse Vin non 5V...

il tutto è stato alimentato a 12vdc per circa 2 sec...

il sam dovrebbe essere a posto perchè alimentando successivamente arduinodue, il led spia (pin13) lampeggiava ancora, ma la parte di comunicazione non da segni di vita (lato PC) mentre rimangono accesi i led di RX,TX (vicino al jack di alimentazione), ON e L.

la porta di programmazione non viene vista dal PC, mentre la porta nativa viene vista ma come hardware sconosciuto (i driver di entrambe le porte sono installati)

grazie,

saluti
kattivik76
13  International / Hardware / Re: ArduinoDue Native USB Port on: April 09, 2013, 04:43:42 pm
ok.... avendo appurato che il problema, come pensavo, è nella parte di comunicazione sia su porta nativa che su porta di programmazione causa errore nel alimentazione di arduinoDue...

qualcuno è in grado di riparare la mia scheda?

saluti
kattivik76
14  International / Hardware / Re: Lettura dati tra Arduino e SIEMENS S7-300 on: April 09, 2013, 04:40:13 pm
Ciao,

l'unica strada percorribile in maniera quasi indolore è quella della comunicazione in modbus, sia su infrastruttura ethernet che seriale RS232 o RS485

non è possibile implementare direttamente il protocollo s7-online per accedere direttamente alle variabili presenti nel PLC.

potresti partire da questa libreria http://playground.arduino.cc/Code/ModbusMaster che peraltro funziona molto bene smiley

saluti
kattivik76
15  International / Hardware / Re: ArduinoDue Native USB Port on: April 07, 2013, 12:19:18 pm
Grazie smiley

Ma il fatto è che sulla porta di programmazione non riconosce nulla, mentre su quella nativa mi riconosce una periferica USB ma non installa automaticamente il driver corretto...

Il sistema operativo è Windows 7 enterprise

Grazie saluti
Kattivik76


Pages: [1] 2 3 ... 11