Show Posts
Pages: 1 2 3 [4] 5 6 ... 20
46  International / Hardware / Re: Schema triac e optotriac on: January 08, 2013, 02:34:34 am
Che circuito essenziale hai provato ? Perchè ti ripeto che anche a me funziona... ma con una lampada questa blinka.. mentre un altra no... senza il circuito snubber funzionano tutte.. ma lo snubber è utile come un salva triac o aiuta triac...
Rileggi la risposta di uwefed e mi sembra molto chiaro...

senza snubber... praticamente un triac un fototriac ed una resistenza ... comunque stasera come ti dicevo salvo imprevisti provo meglio.
Probabilmente lo snubber va un po' tarato cambiando eventualmente il condensatore o le resistenze in base al carico...speriamo scriva uwe...
in ogni caso io non mi strapperei i capelli per lo snubber: è per carichi induttivi e di per se una lampada a fluorescenza del vecchio tipo a reattore è un carico induttivo ma le nuove lampade "elettroniche" migliorano la situazione (almeno sulla carta) e poi... sono 10-15 watt in tutto di lampada quindi non credo succedano 'ste gran cose.
47  International / Hardware / Re: Levitazione magnetica con arduino on: January 08, 2013, 02:06:36 am
ok in teoria questo lo sapevo xD il fatto è che una volta  che rilevo l'oggetto ad un certo liv non posso staccaree la corrente con arduino dato che lo alimento con un alimentatore


ma come non puoi staccare la corrente con arduino... arduino rimane alimentato, legge le altezze  e comanda un bel mosfet che apre e chiude la bobina...
48  International / Hardware / Re: Schema triac e optotriac on: January 07, 2013, 04:58:14 pm
allora.. per le prove che ho fatto.... era come intuivo..
Se stacco il condensatore che ha in serie la resistenza per il circuito snubber... il problema non si presenta più... infatti il lampeggio sembra proprio una scarica di un condensatore (infatti misurando la tensione si vede che un po' ne passa e a picchi) e se (anche con il condensatore) installo nel portalampade un altra lampada, ma di marca e tipo diversa ma sempre a basso consumo, questa non ha il problema...
Secondo uwefed non si possono usare i triac con questo tipo di lampade... ma non capisco perchè alcune lo fanno e altre no... e cosa dovrei usare se voglio togliere i relè meccanici...  smiley-fat

io ho provato un circuito "essenziale" e mi funziona... era quindi come ipotizzavo sopra che la base ti rimaneva per qualche motivo eccitata...
Per la fluorescente che non si accende con il triac penso che uwe intendesse che non si dimmerizza ma no che non si possa in assoluto accendere o spegnere... comunque domani sera provo.... osram e filips
49  International / Software / Re: Velocità del loop on: January 07, 2013, 04:28:41 pm
Quote
ho fatto un gran casino co 'sti test...
si infatti, gli ultimi 10 post non li ho nemmeno letti ahahahahah non ho capito cosa volete fare con gli interrupt tu e Lesto smiley-wink
Ho solo visto che la seriale sta ferma e buona, non rallenta nulla fino a quando non viene sollevato il suo interrupt, per cui credo che la stessa cosa valga per gli altri smiley))

ciao

gli interrupt si voleva disabilitarli per evitare che venissero fatti e rallentassero il ciclo... solo che gli interrupt servono per aggiornare il timer0... quello del millis... no timer0 no millis no misura...
Allora: un conto è un interrupt su un segnale di un pin... tipo quello che può accadere sulla seriale... un conto è un timer: per definizione il contatore conta conta conta e conta... probabilmente si possono disabilitare giocando sul registro di controllo: a questo punto avrei da disabilitare tutti tranne lo 0 e riabilitarli eventualmente solo per il serial... ma ho lasciato le prove anche perchè ci sono tante cose che mi disturbano mentalmente più degli interrupt che so che ci sono:
1) le ottimizzazioni di questo imprevedibile compilatore.
2) il while che va 5 volte più veloce del loop...
50  International / Software / Re: acquisizione segnale analogico e misurazione della frequenza on: January 07, 2013, 03:52:07 pm
salve a tutti sono nuovo ed essendo alle prime armi con arduino duemilanove mi sono rivolto a voi.... ho acquistato questa scheda per rilevare il battito cardiaco attraverso il dito----->http://embedded-lab.com/blog/?p=5508
dovrei acquisire la tensione d'uscita con arduino e misurare la frequenza di questa in un determinato arco di tempo per poi calcolare la frequenza cardiaca.... dopodiche devo visualizzare il risultato su un display a 3 cifre ... potete darmi una mano? grazie in anticipo


...un passo alla volta... il sensore ti da già l'onda quadra: riesci a leggerla? hai attaccato bene il sensore?
se riesci a leggerla poi passiamo a come calcolare la frequenza...
però vedo un ostacolo all'orizzonte: display 3 cifre... di che tipo attaccato come?
in poche parole: quanto sei ferrato a livello di elettronica e quanto sei ferrato a livello di programmazione?
51  International / Software / Re: PWM 38Khz on: January 07, 2013, 03:11:24 pm
Ciao a tutti,
per una barriera IR, sto cercando di ottenere un segnale pwm a 38Khz.
Sto utilizzando un Arduino Mega.
Ho trovato questo codice per ottenere tale segnale sul pin digitale 10, lavorando a livello dei registri.
Code:
const byte LED = 10;  // Timer 2 "A" output: OC2A

void setup() {
  pinMode (LED, OUTPUT);
  
  // set up Timer 2
  TCCR2A = _BV (COM2A0) | _BV(WGM21);  // CTC, toggle OC2A on Compare Match
  TCCR2B = _BV (CS20);   // No prescaler
  OCR2A =  209;          // compare A register value (210 * clock speed)
                         //  = 13.125 nS , so frequency is 1 / (2 * 13.125) = 38095

}  // end of setup

void loop() { }

Non ho dimestichezza con la gestione dei registri, così al fine di ottenere il segnale sul pin 6 ho visto che bisogna agire sul timer4.
Ho quindi modificato il codice banalmente come segue, ma non funziona.
Potete aiutarmi?

Code:
const byte LED = 6;  

void setup() {
  pinMode (LED, OUTPUT);
  
  // set up Timer 4
  TCCR4A = _BV (COM4A0) | _BV(WGM41);  
  TCCR4B = _BV (CS40);   // No prescaler
  OCR24 =  209;          // compare A register value (210 * clock speed)
                         //  = 13.125 nS , so frequency is 1 / (2 * 13.125) = 38095
}  // end of setup

non funziona ma cosa fa?
la cosa che mi viene in mente è che il timer 2 è a 8 bit mentre il 4 è a 16...

poi l'ocr24... forse intendevi ocr4a?
52  International / Generale / Re: problema lettura secondi RTC on: January 07, 2013, 03:04:04 pm
Ok, apriamo un topic dedicato, chissa se l'admin ci puo dedicare uno spazio in rilievo sulla pagina.

rilievo mi pare eccessivo ma magari in megatopic...
53  International / Software / Re: Velocità del loop on: January 07, 2013, 03:02:20 pm
qsecofr ma che arduino hai?

 cli();                // disable global interrupts
 sei();                // enable interrupts

ma come si fa ad abilitarne o disabilitarne 1 o 2 soltanon non lo so....

un mega ed un leonardo: scritto sotto i precedenti messaggi... però capisco: ho fatto un gran casino co 'sti test...
54  International / Software / Re: Velocità del loop on: January 07, 2013, 12:56:02 pm
usa micros() al posto di millis() e lascia

if (!cont){ //vediamo quanto impiega a overfloodare!

se proprio non ti fidi equvale a: (quando overflodda la variabile torna ad essere 0)

if (cont == 0){ //vediamo quanto impiega a overfloodare!

no no tranquillo che mi fido... tant'è che il primo test sul loop l'ho fatto con il !cont... solo che sai... quando non sai dove sbattere la testa le provi tutte... ed infatti con questa logica random ho provato a cambiare anche piattaforma: leonardo...


Code:
unsigned int cont = 0;
unsigned long dif;
int somma = 1;
unsigned long tempoInizioMs;
void setup(){
 Serial.begin(9600); //mi aspetto molti meno interrupt/s dalla seriale
 tempoInizioMs = micros();
}

void loop(){
 while(1){
  cont=cont +somma;


  
  if (!cont){ //vediamo quanto impiega a overfloodare!
    dif = micros();
    dif = dif -tempoInizioMs;
     Serial.println( dif);
     tempoInizioMs = micros();
     cont =0;
    };
  };
}

29070MICROsecondi... quindi 29.... leonardo ha 4 timer se non vado errato...
nota che ho cambiato il cont++.... ho tentato di imbrogliare il compilatore perchè con il cont++ lo stesso programma mi fa uscire 4microsecondi...

In conclusione imho la velocità del ciclo loop "semivuoto" è dettata dal numero di interrupt (...leggasi quindi timers) che l'arduino ha attaccato... questo perchè in se il loop è tradotto con poche istruzioni assembler abbastanza ottimizzate (...all'inizio dicevo 10-15 cicli di clock perchè penso che un incremento, un salto ed un test su long grossomodo quello impieghino) però il processore è ugualmente gravato dall'aggiornamento dei timers ed eventualmente di altri interrupt esterni.

la curiosità è che questo compilatore non smette mai di stupirmi... vedi ottimizzazione che lui si è fatto sul ciclo while(1) senza che nessuno gli dica nulla..



Code:
unsigned int cont = 0;
unsigned long dif;
int somma = 1;
unsigned long tempoInizioMs;
void setup(){
 Serial.begin(9600); //mi aspetto molti meno interrupt/s dalla seriale
 tempoInizioMs = micros();
}

void loop(){
// while(1){
  cont=cont +somma;


 
  if (!cont){ //vediamo quanto impiega a overfloodare!
    dif = micros();
    dif = dif -tempoInizioMs;
     Serial.println( dif);
     tempoInizioMs = micros();
     cont =0;
    };
 // };
}

completo... poi lascio e vado a mangiare.... 120.000 microsecondi il ciclo senza il while con il solo loop... e la differenza è veramente tanta... ma in teoria dovrebbe essere solo una chiamata ad una funzione quindi.... pochi cicli di clock... imho c'è qualcosa ancora sotto... da 29 a 120ms non vi sembra strano?


55  International / Software / Re: Velocità del loop on: January 07, 2013, 12:40:22 pm
vedi sopra, la unsigned int è solo di 65535, quindi o la trasformi in long oppure passiamo ad usare la micros()

edit:
Quote
sta mega non si muove...

uhm qualche altra mega di confronto? sarebbe un bel problema se le mega avesserouna pesante perdita di prestazioni da qualche parte

ma no... quanti timer ha da gestire la uno? 3 ?
il mega? 6... il nostro ciclo impiega veramente pochi cicli di clock... ma i timer vanno tenuti aggiornati comunque...
c'è un modo per disattivarli (tranne il timer 0) ?
56  International / Software / Re: Velocità del loop on: January 07, 2013, 12:35:50 pm
Code:
unsigned int cont = 0;
unsigned long dif;
unsigned long tempoInizioMs;
void setup(){
 Serial.begin(9600); //mi aspetto molti meno interrupt/s dalla seriale
 tempoInizioMs = millis();
}

void loop(){
 while(1){
  cont++;
 
  if (cont == 65535){ //vediamo quanto impiega a overfloodare!
    dif = millis();
    dif = dif -tempoInizioMs;
     Serial.println( dif);
     tempoInizioMs = millis();
     cont =0;
    };
  };
}

a me sto codicice da i numeri... mi stampa solo 0.... secondo me qua il compilatore me la sta mettendo sul didietro...
l'ho un po' modificato ancora il codice qua sopra... lo so è un casino: non si fanno le prove così cambiando sempre qualcosa ma non va accidenti: ho provato il logico e l'illogico...
57  International / Software / Re: Velocità del loop on: January 07, 2013, 12:21:27 pm
rispolverando il codice iniziale (più o meno)... noto 544ms... sta mega non si muove...
Code:
const unsigned int CNT_MAX = 65000;
long cnt=0;
unsigned long prevMillis = 0;
long dif = 0;

void setup() {
    Serial.begin(9600);
}


void loop() {
    cnt++;
    if (cnt > CNT_MAX)  {
       dif = millis() - prevMillis;
        Serial.println((int) dif);
        prevMillis = millis();
        cnt = 0;
    }
}
58  International / Software / Re: Velocità del loop on: January 07, 2013, 12:11:01 pm

edit: interrupts(); per riattivare gli interrupt

emmm.... nointerrupt no timer... smiley-mr-green  sorry...


59  International / Software / Re: Velocità del loop on: January 07, 2013, 12:03:58 pm
Code:
unsigned int cont = 0;
unsigned long tempoInizioMs;
void setup(){
 Serial.begin(9600); //mi aspetto molti meno interrupt/s dalla seriale
 tempoInizioMs = millis();
}

void loop(){
 while(1){
  cont++;
  if (!cont){ //vediamo quanto impiega a overfloodare!
     Serial.println( millis()-tempoInizioMs );
     tempoInizioMs = millis();
    };
  };
}

senza while 494-495ms di media.
con il while... mi stampa tutti 0... smiley-eek boo... adesso indagooo

mega 2560...
60  International / Software / Re: Velocità del loop on: January 07, 2013, 11:23:39 am
9600 ma che importa, non la usa fino a quando l'if non è vero, tra l'altro l'attivo dopo....

Code:
void setup() {}
void loop() {
    cnt++;
    if (cnt > CNT_MAX)  {
       Serial.begin(9600);  
       Serial.println(millis() - prevMillis);
       Serial.end();
        cnt = 0;
        prevMillis = millis();
    }
}

ps .. ho provato anche con 115200 è uguale il risultato 0.495 anche  Serial.begin nel setup, cambia nulla

Può darsi che la mega debba fare più cose e quindi più lenta tu di quale MCU parli?

si  ma continui a misurare i millisecondi mentre attivi la seriale... prima fai la differenza (e la relativa chiamata a funzione millis che non si è capito quanto dura) e poi attivi quello che vuoi e stampi quello che vuoi.
Proporrei anche un ciclo molto molto più lungo...
Pages: 1 2 3 [4] 5 6 ... 20