Loading...
  Show Posts
Pages: [1] 2
1  International / Software / Re: Cronometro on: October 19, 2012, 11:51:35 am
il fatto è che il passo successivo del mio progetto sarebbe stato salvare alcuni tempi su una memoria sd usando una shield apposita!!

Stavo pensando se magari fosse possibile creare un oscillatore esterno e collegarlo ad uno dei pin digitali di arduino impostandolo come input e nel programma fare incrementare la variabile ad ogni cambio di stato del pin digitale!?? Per la comunicazione con la decodifica, userei leOS!

secondo te potrebbe essete fattibile??

Grazie
2  International / Software / Re: Cronometro on: October 18, 2012, 03:56:17 pm
ho dato un po' un occhiata al progetto ma mi sembra di capire che questo metodi mi implica di non utilizzare la scheda arduino ma solo il microprocessore!

è così?
grazie
3  International / Software / Re: Cronometro on: October 18, 2012, 03:42:25 pm
ok! grazie
prove e in caso ti faccio sapere

ciao
4  International / Software / Re: Cronometro on: October 18, 2012, 03:14:42 pm
OK!!
Quindi il problema riguarda l'oscillatore che usa arduino!!!

Ti ringrazio per la soluzione cha mi hai proposto soltanto che non ho la più pallida idea di come fare ad attuarle!!
Potresti darmi una mano o uno spunto!

grazie
5  International / Software / Re: Cronometro on: October 17, 2012, 02:27:59 pm
Ho già provato a separare la funzione di incremento da quella di visulizzazione inserendola nel  loop, ma così facendo non aggiorna costantemente tutte le variabili e quindi si sballa il conteggio!!

Ho provato in mille altri modi ma quello che scopro sempre alla fine è che ottengo un cronometro che ogni minuto sballa di 4-5secondi!!!

Non riesco a capire dove sia il problema!!!!
Pultroppo non ho a disposizione un'oscilloscopio per verificare che leOS faccia incrementare effettivamente la variabile ogni 10 millisecondi!!!
6  International / Software / Re: Cronometro on: October 17, 2012, 10:18:36 am
Quindi se tolgo il funzione millis e serial  il clock del mio cronometro dovrebbe essere perfetto?
Grazie
7  International / Software / Cronometro on: October 17, 2012, 09:32:15 am
Ciao
Sto cercando di creare un cronometro visualizzato su 6 display a 7 segmenti comandati da una decodifica BCD/7segmenti in multiplexing.
Per dare il clock di incremento del tempo ho usato la libreria leOS in modo tale che ogni 10 microsecondi incrementi una variabile, più precisamente la variabile dei centesimi di secondo.

Ho realizzato il circuito che funziona perfettamente, però l'incremento dei microsecondi è sballato e non di pochissimo;
per verificare nel programma ho inserito la funzione millis() nel void comandato da leOS in modo da vedere se effettivamente c'è questo errore; facendo questa prova ha effettivamente verificato che c'è un errore nella tempistica, infatti l'incremento non è sempre costante e non è quello che ho impostato su leOS!

Cosa può essere secondo voi??

di seguito vi riporto il programma in questione:

Quote
#include <leOS.h>

leOS schedulatore;

int massa_csec = 2;
int massa_dsec = 3;
int massa_sec1 = 4;
int massa_sec2 = 5;
int massa_min1 = 6;
int massa_min2 = 7;

int a = 8;
int b = 9;
int c = 10;
int d = 11;


int numeri_a[10]={LOW,HIGH,LOW,HIGH,LOW,HIGH,LOW,HIGH,LOW,HIGH}; //array per comunicare con decodifica BCD to 7 segment
int numeri_b[10]={LOW,LOW,HIGH,HIGH,LOW,LOW,HIGH,HIGH,LOW,LOW};
int numeri_c[10]={LOW,LOW,LOW,LOW,HIGH,HIGH,HIGH,HIGH,LOW,LOW};
int numeri_d[10]={LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,HIGH,HIGH};
int num_csec =0;// centesimi di secondo
int num_dsec =0;// decimi di secondo
int num_sec1 =0;// secondi
int num_sec2 =0;// secondi
int num_min1 =0;// minuti
int num_min2 =0;// minuti

void setup(){
  
  pinMode(massa_csec, OUTPUT);
  pinMode(massa_dsec, OUTPUT);
  pinMode(massa_sec1, OUTPUT);
  pinMode(massa_sec2, OUTPUT);
  pinMode(massa_min1, OUTPUT);
  pinMode(massa_min2, OUTPUT);
 
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  
  digitalWrite(massa_csec, HIGH); // situazioni iniziale per multiplexing
  digitalWrite(massa_dsec, HIGH);
  digitalWrite(massa_sec1, HIGH);
  digitalWrite(massa_sec2, HIGH);
  digitalWrite(massa_min1, HIGH);
  digitalWrite(massa_min2, HIGH);
 
 Serial.begin(9600);
 Serial.println("Cronometro");
schedulatore.begin();
schedulatore.addTask(incrementa, 10);

}

void loop(){
if(num_csec>9){
  num_csec=0;
  num_dsec=num_dsec++;
}
if(num_dsec>9){
  num_dsec=0;
  num_sec1=num_sec1++;
}
if(num_sec1>9){
  num_sec1=0;
  num_sec2=num_sec2++;
}
if(num_sec2>5){
  num_sec2=0;
  num_min1=num_min1++;
}
if(num_min1>9){
  num_min1=0;
  num_min2=num_min2++;
}
if(num_min2>9){
  num_min2=0;
}

}
void incrementa(){
 Serial.println(millis());
  num_csec=num_csec++; //incremento centesimi di secondo
digitalWrite(massa_min2, HIGH);            //comandi decodifica in multiplexing per 6 display!
  digitalWrite(a, numeri_a[num_csec]);
  digitalWrite(b, numeri_b[num_csec]);
  digitalWrite(c, numeri_c[num_csec]);
  digitalWrite(d, numeri_d[num_csec]);
  digitalWrite(massa_csec, LOW);
  delay(1);
  digitalWrite(massa_csec, HIGH);
  digitalWrite(a, numeri_a[num_dsec]);
  digitalWrite(b, numeri_b[num_dsec]);
  digitalWrite(c, numeri_c[num_dsec]);
  digitalWrite(d, numeri_d[num_dsec]);
  digitalWrite(massa_dsec, LOW);
  delay(1);
  digitalWrite(massa_dsec, HIGH);
  digitalWrite(a, numeri_a[num_sec1]);
  digitalWrite(b, numeri_b[num_sec1]);
  digitalWrite(c, numeri_c[num_sec1]);
  digitalWrite(d, numeri_d[num_sec1]);
  digitalWrite(massa_sec1, LOW);
  delay(1);
  digitalWrite(massa_sec1, HIGH);
  digitalWrite(a, numeri_a[num_sec2]);
  digitalWrite(b, numeri_b[num_sec2]);
  digitalWrite(c, numeri_c[num_sec2]);
  digitalWrite(d, numeri_d[num_sec2]);
  digitalWrite(massa_sec2, LOW);
  delay(1);
  digitalWrite(massa_sec2, HIGH);
  digitalWrite(a, numeri_a[num_min1]);
  digitalWrite(b, numeri_b[num_min1]);
  digitalWrite(c, numeri_c[num_min1]);
  digitalWrite(d, numeri_d[num_min1]);
  digitalWrite(massa_min1, LOW);
  delay(1);
  digitalWrite(massa_min1, HIGH);
  digitalWrite(a, numeri_a[num_min2]);
  digitalWrite(b, numeri_b[num_min2]);
  digitalWrite(c, numeri_c[num_min2]);
  digitalWrite(d, numeri_d[num_min2]);
  digitalWrite(massa_min2, LOW);
  delay(1);
}

8  International / Hardware / Arduino Due on: October 15, 2012, 11:35:04 am
Qualcuno sa qualcosa su "Arduino Due"

Ciao
Grazie
9  International / Software / Re: Problema con l'utilizzo delle variabili on: October 14, 2012, 07:07:31 am
Non puoi chiamare una variabile con lo stesso nome di un pin!
Tu hai chiamato il pin 8 "up" e poi "up" lo usi anche come variabile (up = digitalRead(up)smiley-wink.
devi creare un'altra variabile con un altro nome diverso da up al quale assegni come valore quello letto con "digitalRead(up).
Ex
int up = 8; //chiami il pin 8 up
int val_up; //definisci una variabile di tipo intero

void setup(){
pinMode(up, INPUT) //definisci che up ovvero il pin 8 è OUTPUT
}
void loop(){
val_up = digitalRead(up); //assegni alla variabile val_up, il valore aquisito da digitalRead(up)
}

e uguale dovrai fare con il resto del programma!
10  International / Software / Re: Creare Librerie on: October 14, 2012, 06:58:19 am
Sapete indicarmi una buona guida per il c++?
Grazie
11  International / Software / Re: Programmare in C on: October 13, 2012, 01:57:38 pm
Io avrei bisogno di un  programma per scrivere in C per Windows

Grazie
12  International / Software / Programmare in C on: October 13, 2012, 01:48:30 pm
Sapete indicarmi un buon programma per programmare in C free. In italiano sarebbe il top!
Cosa ne pensate di DEV-C++?

Grazie
13  International / Software / Re: Creare Librerie on: October 13, 2012, 12:29:38 pm
Non esiste un'altra guida che spiega come creare librerie, perchè quella riportata da arduino non spiega molto bene e vedendo librerie create da altri, mi sembra non spieghi nemmeno tutto.

Grazie
14  International / Software / Re: Registri di sistema on: October 12, 2012, 01:58:38 pm
Perfetto
Grazie
15  International / Software / Re: Registri di sistema on: October 12, 2012, 01:31:28 pm
Ok
ma dove le trovo queste librerie??
Pages: [1] 2