Show Posts
Pages: [1] 2 3 ... 12
1  International / Hardware / Re: Cineslider, un nuovo prodotto con core ArduinoDUE on: October 15, 2013, 09:31:22 am
all'interno c'è la scheda ArduinoDUE con una sensorshield adeguata e con tutti i cablaggi necessari smiley

saluti
kattivik76
2  International / Hardware / Re: Cineslider, un nuovo prodotto con core ArduinoDUE on: October 14, 2013, 05:01:14 pm
Grazie per la dritta e per i consigli tecnici smiley-wink

Al momento il firmware è consolidato con funzioni base, in un futuro chissà! smiley-wink

Grazie
Kattivik76
3  International / Hardware / Re: Cineslider, un nuovo prodotto con core ArduinoDUE on: October 14, 2013, 11:12:55 am
GRAZIE smiley

è stato realizzato da me, un apposito software per l'aggiornamento Live della blackbox ecco le caratteristiche principali:
  • si installa in un solo click (clickone)
  • costantemente aggiornato, ogni volta che viene lanciato il software, effettua una verifica della disponibilità di una nuova versione, se disponibile informa l'operatore richiedendone l'aggiornamento
  • collega la tua blackbox per l'aggiornamento, non dovrai fare altro!
  • riconoscimento PID periferica USB (ArduinoDue)
  • verifica automatica della versione del firmware installato nella blackbox
  • download nuovo firmware + verifica checksum MD5
  • flash ArduinoDue in automatico + reset

sarà presto disponibile per il download a questo link: http://www.nemoforthepeople.com/downloads.software.php

saluti
kattivik76
4  International / Hardware / Cineslider, un nuovo prodotto con core ArduinoDUE on: October 14, 2013, 10:40:35 am
Ciao a tutti,

vorrei rendervi partecipi del progetto appena ultimato (primi 3 prototipi by TEAM NEMO) che racchiude un Core tutto ArduinoDUE smiley

per tutti gli interessati ecco i link smiley-wink

home page:
http://www.nemoforthepeople.com/

sistema di comando blackbox (ArduinoDUE):
http://www.nemoforthepeople.com/page.full.blackbox.php

crowdfunding:
http://it.ulule.com/cineslider-by-nemo/

ecco un estratto di quello che potrete trovare smiley

----------------------------------------------------


...a forza di parlarne e di lavorarci duramente per oltre un anno, dopo ostacoli infiniti ed infinite lungaggini di ordine tecnico, burocratico ed economico, cominciamo (noi del Team Nemo) ad intravedere l'inizio del compimento della prima fase della presentazione al pubblico del nostro Cineslider.

Per chi di voi ancora non lo sapesse o non fosse al corrente degli ultimi ausili in materia di videoripresa, sappiate che il nostro prototipo è stato concepito con l'intento di migliorare le vostre riprese con qualsiasi telecamera che abbia un attacco fotografico sulla parte inferiore.

Abbiamo scelto un modo un po' singolare e, speriamo promettente, per testare la nostra creatura prima di immetterla definitivamente sul mercato: abbiamo voluto avvalerci di Ulule.com

----------------------------------------------------

smiley smiley smiley smiley smiley

saluti
kattivik76
5  International / Software / Re: Enerduino custom on: September 12, 2013, 01:58:32 am
Ciao,

ho fatto delle prove ma nulla di fatto, qui sotto metto l'output del compilatore:

Binary sketch size: 23.324 bytes (of a 32.256 byte maximum) - 72% used

e questa è la stampa di freeRam() ->>> 281
costanti ed invariati....

il risultato non cambia, si blocca in modo random dopo alcune ore di funzionamento...

grazie,
saluti

kattivik76
6  International / Software / Re: Enerduino custom on: September 06, 2013, 08:44:58 am
ok, metto la freeram(); anche nel loop,

ma quindi è constatato che può essere un problema di saturazione di memoria?

è corretto come ho dichiarato le variabili?
è corretto l'uso della funzione free(); per recuperare memoria dopo aver utilizzato una variabile?
Code:
...
free(&bout);
free(buf);
...

grazie smiley
saluti
kattivik76
7  International / Software / Enerduino custom on: September 06, 2013, 03:16:07 am
Ciao a tutti

ho modificato il famoso progetto enerduino per la lettura dei lampeggi del contatore enel ed effettuare un log orario su sd.

sto impazzendo con un problema (fantasma), nel senso che il sistema funziona, acquisisco i lampeggi mediante interrupt, conto i secondi mediante SQW di DS1307 + interrupt, scrive su sd quando deve smiley-wink.... ma dopo un numero di ore random, ma maggiore di 24, si congela e non capisco il perchè.

hardware utilizzato:
- ArduinoUNO
- Ethernet Shield (solo per la SD)
- RTC DS1307 I2C
- LCD I2C 20x4

memoria occupata dallo sketch 72%
allego il progetto per eventuali analisi smiley

grazie!!!

saluti
Kattivik76
allego il progetto
8  International / Software / Re: Libreria MsTimer2.h (RISOLTO con IRQx) on: August 30, 2013, 01:51:13 am
ciao a tutti smiley

allora, come promesso ho modificato e testato il mio progetto in modo tale da utilizzare 2 Interrupt:
- IRQ0 -> rilevamento fronte di discesa lampeggio (acquisito mediante fotoresistenza)
- IRQ1 -> rilevamento fronte di discesa SQW di RTC (DS1307)

in più ho aggiunto un display LCD 20x4 su bus I2C + le funzioni che mi permettono di effettuare il log dei dati su scheda SD dello shield Ethernet.

il tutto funziona correttamente, ma ad un certo punto, circa dopo 8ore, arduino si frizza e non capisco perchè... necessita di una pressione sul tasto reset per ripartire...

se volete dare un'occhiata allo sketch, lo allego a questo post.

p.s.: la libreria MsTimer2.h non fa più parte di questo progetto smiley

grazie!!!

saluti
kattivik76
9  International / Software / Re: Libreria MsTimer2.h on: August 23, 2013, 10:30:56 am
posso anche togliere di mezzo la MsTimer2 ed implementare la tua LeOS, ho sbirciato nella lib ed ho visto che comunque supporta un periodo di 1 ora smiley-wink
Avresti gli stessi problemi perché anche la leOS usa la fonte di clock della scheda.
Forse con la swRTC, che ha internamente un meccanismo di correzione dello scostamento del tempo calcolato da quello reale, potresti riuscire a migliorare qualcosa.

Io però farei in un'altra maniera.
Usi il DS1307, vero? Prova a portare fuori il segnale del clock dell'RTC con 1 Hz di frequenza e collega il pin SQW ad un pin dell'Arduino dove puoi agganciare un interrupt hardware. Scrivi poi una routine che conta il numero di secondi che vuoi far passare, e dopo che lo hai raggiunto, cambi lo stato alla tua variabile di controllo. A quel punto è passato esattamente il numero di secondi prescelto. Senza possibilità di errori.

OTTIMO!!!! ora so anche che cosa è lo SQW  smiley direi che è la soluzione migliore e precisa smiley

p.s.: farò anche delle prove con altre schede arduino, giusto per sfizio!!!

grazie ancora
saluti
kattivik76
10  International / Software / Re: Libreria MsTimer2.h on: August 23, 2013, 09:40:52 am
posso anche togliere di mezzo la MsTimer2 ed implementare la tua LeOS, ho sbirciato nella lib ed ho visto che comunque supporta un periodo di 1 ora smiley-wink

vediamo cosa accade smiley-razz

saluti
kattivik76
11  International / Software / Re: Libreria MsTimer2.h on: August 23, 2013, 09:26:34 am
ma anche la UNO ha il quarzo da 16Mhz esterno...

... non mi torna comunque, il ritardo che ho è di 3608ms/ora costante per ogni ora che passa...

la tensione di alimentazione può incidere? è alimentato con un cavo usb (5vdc carica batteria iphone)
una 2009 non l'ho, ho una mega2560 in alternativa smiley

grazie
kattivik76
12  International / Software / Re: Libreria MsTimer2.h on: August 23, 2013, 09:11:23 am
allego il file dei consumi di ieri per chiarezza.

saluti kattivik76
13  International / Software / Re: Libreria MsTimer2.h on: August 23, 2013, 09:04:44 am
la MsTimer2 gestisce solo il timer di 60min impostato
Quindi mi confermi che i 60 minuti sono gestiti dalla MsTimer2, che allora si baserà sul risuonatore dell'Arduino
(premetto che non ho ancora guardato il codice).

si esatto, ho dato un'occhiata alla libreria...
ho visto che effettua delle selezioni in base alla CPU utilizzata es ATmega328P che credo sia la CPU di ArduinoUno...
ma non ci ho capito molto smiley-razz
se hai tempo e vuoi dargli un'occhiata ben venga smiley sicuramente sei più ferrato di me sui timer (LeOS) smiley-wink

grazie smiley
kattivik76
14  International / Software / Re: Libreria MsTimer2.h on: August 23, 2013, 08:58:22 am
si si, l'ho visto smiley

ma il mio problema è che si accumula un ritardo di 3608ms ogni volta che viene reinizializzato il timer dell'interrupt e non capisco perchè...

il ritardo di 3608ms non è imputabile al codice di formattazione e scrittura su uSD perchè il led di test che ho installato, ha un periodo di flash identico al led del contatore.

vedi il codice interessato dal marker "<<<<<<"

Code:
void loop(void) 
{
  // make a string for assembling the data to log:
  String dataString = "";
 
  //Serial.println(analogRead(PHOTO_IN));  // FIXME
   
  // Read the photo sensor value
  if (analogRead(PHOTO_IN) > threshold)  <<<<<< Lampeggio ricevuto da contatore enel
  {
    // read and parse RTC data from DS1307
    read_RTC();
 
    digitalWrite(ledflash,HIGH);               <<<<<< Accendo il led di spia per Lampeggio ricevuto da contatore enel
    flash++;
   
    dataString = getDate();
    dataString += " ";
    dataString += getClock();
   
    lcd.setCursor(0, 1);
    lcd.print("T: " + dataString);
   
    lcd.setCursor(0, 2);
    lcd.print("Flash: " + flash);
   
    dataString = String(flash/1000);
   
    lcd.setCursor(0, 3);
    lcd.print("Energia: " + dataString + " KW" );
   
    Serial.print("Flash: ");       // FIXME
    Serial.println(flash); 
    while (analogRead(PHOTO_IN) > threshold)
    {
    // Just wait the flash to turn off (to avoid multiple counts)   
    } 
    digitalWrite(ledflash,LOW);                    <<<<<< Spengo il led spia per Lampeggio ricevuto da contatore enel
  }

essendo i consumi non uniformi per ovvi motivi di utilizzo, non posso pensare che sia un ritardo accumulato dovuto all'acquisizione del lampeggio in quando è costante su 3608ms indipendentemente dal numero di lampeggi totalizzati.

grazie smiley
kattivik76
15  International / Software / Re: Libreria MsTimer2.h on: August 23, 2013, 08:42:09 am
functions.ino
Code:
void read_RTC(){
  char strDay[10];
  char strMonth[15];
  
  DateTime now = RTC.now();
  RTC_TimeStamp = now.unixtime();
  RTC_year = now.year();
  RTC_month = now.month();
  RTC_day = now.day();
  RTC_hour = now.hour();
  RTC_minute = now.minute();
  RTC_second = now.second();
  RTC_dayOfWeek = now.dayOfWeek();
  
  /*
  Serial.print(RTC_day);
  Serial.print('/');
  Serial.print(RTC_month);
  Serial.print('/');
  Serial.print(RTC_year);
  Serial.print(' ');
  Serial.print(RTC_hour);
  Serial.print(':');
  Serial.print(RTC_minute);
  Serial.print(':');
  Serial.print(RTC_second);
  Serial.println();
  */
  //string(int x1, int y1, int x2, int y2, int colour, uint8_t font, uint8_t fill, char text[]);
  switch(int(RTC_month)){
    case 1:
      sprintf(strMonth, "%s", "Gennaio");
      break;
    case 2:
      sprintf(strMonth, "%s", "Febbraio");
      break;
    case 3:
      sprintf(strMonth, "%s", "Marzo");
      break;
    case 4:
      sprintf(strMonth, "%s", "Aprile");
      break;
    case 5:
      sprintf(strMonth, "%s", "Maggio");
      break;
    case 6:
      sprintf(strMonth, "%s", "Giugno");
      break;
    case 7:
      sprintf(strMonth, "%s", "Luglio");
      break;
    case 8:
      sprintf(strMonth, "%s", "Agosto");
      break;
    case 9:
      sprintf(strMonth, "%s", "Settembre");
      break;
    case 10:
      sprintf(strMonth, "%s", "Ottobre");
      break;
    case 11:
      sprintf(strMonth, "%s", "Novembre");
      break;
    case 12:
      sprintf(strMonth, "%s", "Dicembre");
    break;
  }
  //Serial.println(strMonth);
  
  switch(RTC_dayOfWeek){
    case 1:
      //sprintf(strDay, "%s", "Lunedi'", " %d", RTC_day, strMonth, RTC_year );      // convert data from long to char
      sprintf(strDay, "Lunedi' %d", RTC_day, " %s", strMonth, "%d", RTC_year);
    break;
    case 2:
      sprintf(strDay, "%s", "Martedi'", RTC_day, " %s", strMonth, "%d", RTC_year);      // convert data from long to char
    break;
    case 3:
      sprintf(strDay, "%s", "Mercoledi'", RTC_day, " %s", strMonth, "%d", RTC_year);      // convert data from long to char
    break;
    case 4:
      //sprintf(strDay, "Giovedi' %d", RTC_day, " %s", strMonth, "%d", RTC_year );      // convert data from long to char
      sprintf(strDay, "Giovedi' %d", RTC_day, " %s", strMonth, "%d", RTC_year);
    break;
    case 5:
      sprintf(strDay, "%s", "Venerdi'", RTC_day, " %s", strMonth, "%d", RTC_year);      // convert data from long to char
    break;
    case 6:
      sprintf(strDay, "%s", "Sabato", RTC_day, " %s", strMonth, "%d", RTC_year);      // convert data from long to char
    break;
    case 7:
      sprintf(strDay, "%s", "Domenica", RTC_day, " %s", strMonth, "%d", RTC_year);      // convert data from long to char
    break;
    }
  //Serial.println(strDay);
}

// Get the time from the external clock
char* getClock()
{
  char buffer[5]=" ";
  char timeStr[8] = " ";
  
  itoa(RTC_hour,buffer,10);
  strcpy(timeStr,buffer);
  strcat(timeStr,":");
  itoa(RTC_minute,buffer,10);

  // Add 0 if a single digit minute has been returned
  if (strlen(buffer)==1)
  {
    strcat(timeStr,"0");  
  }  
  strcat(timeStr,buffer);

  // Seconds are not useful at this time. Commented out
  strcat(timeStr,":");
  itoa(RTC_second,buffer,10);
  strcat(timeStr,buffer);

  return timeStr;
}

// Get the date from extrenal clock
char* getDate()
{
  char buffer[5]=" ";
  char dateStr[10] = " ";
  
  itoa(RTC_day,buffer,10);
  strcpy(dateStr,buffer);
  strcat(dateStr,"/");  
  itoa(RTC_month,buffer,10);
  strcat(dateStr,buffer);
  strcat(dateStr,"/");
  itoa(RTC_year,buffer,10);  
  strcat(dateStr,buffer);

  return dateStr;
}

// Write data to log file named data.log
void write_log(String msg)
{
  // make a string for assembling the data to log:
  String dataString = "";
 
  dataString = msg;

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  File dataFile = SD.open("datalog.txt", FILE_WRITE);

  // if the file is available, write to it:
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    // print to the serial port too:
    Serial.println(dataString);
  }  
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.csv");
  }
}

// Routine executed by the timer interrupt. This flush the  
// data to the log file
void flushCounter(void)
{
  Serial.println("flushCounter");
  writeLog = 1;
}

int freeRam () {
  extern int __heap_start, *__brkval;
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}

Handling_lcd.ino (non abilitato al momento)
Code:
// new version of function i2c_display2s(String a2, char* b2, String c2, char* d2)
// change data type String to pointer char* to external data
// old version: i2c_display2s(String a2, String b2, String c2, String d2)
// new version: i2c_display2s(String a2, char* b2, String c2, char* d2)
// String type as a costant data type
/*
void i2c_display2s(String a2, char* b2, String c2, char* d2){  
      int aLength = a2.length();
      int bLength = sizeof(b2);
      int cLength = c2.length();
      int dLength = sizeof(d2);
      
      int abSpace = 15 - (aLength + bLength);
      int cdSpace = 15 - (cLength + dLength);
      
      String ax = "";
      for (int i=0;i<abSpace;i++){
        ax += " ";
      }
      String cx = "";
      for (int i=0;i<cdSpace;i++){
        cx += " ";
      }      
      
      lcd.setCursor(0, 0);
      lcd.print(a2+ax+b2);

      lcd.setCursor(0, 1);
      lcd.print(c2+cx+d2);
      delay(1);    
}
*/
Pages: [1] 2 3 ... 12