Show Posts
Pages: [1] 2 3 4
1  International / Software / Re: Doppio dimmer con attiny85 e triac on: October 24, 2012, 11:20:22 pm
beh, anche a me compila senza errori, ma non mi funziona all'atto pratico...
2  International / Software / Re: Doppio dimmer con attiny85 e triac on: October 24, 2012, 03:55:27 pm
eccolo:

Code:
volatile int i=0, y=0;               // variabili contatore...
volatile boolean zero_cross1=0, zero_cross2=0;  // booleane per lo zero crossing
int out1 = 0, out2 = 1;                // Output >> ai moc...
int pot1 = 3, pot2=4;             // ingressi trimmer
int bright1 = 0, bright2 = 0;   // livello di luminosità (0-128)  0 = on, 128 = 0ff

//int freqStep = 78;    // ritardo del timer in microsecondi
void setup() {
cli();//fermo gli interrupt
TCCR0A &= ~((1<<COM0A0) | (1<<COM0A1)); //disattivi gli interrupt del timer
//modalità contatore fino all'overflow
TCCR0A &= ~((1<<WGM01) | (1<<WGM00));
TCCR0B &= ~(1<<WGM02);
//prescaler a /8
TCCR0B &= ~((1<<CS02) | (1<<CS00));
TCCR0B |= (1<<CS01);
TCNT0 = 178; //valore iniziale
TIMSK |= (1<<TOIE0); //attivo un interrutp all'overflow
sei(); //riattivo gli interrupt
pinMode(out1, OUTPUT);
pinMode(out2, OUTPUT);
attachInterrupt(0, zero_cross_detect, RISING); //zero crossing detection con interrupt esterno

}

void zero_cross_detect() {   
  zero_cross1 = true;
zero_cross2 = true;
i=0;
y=0;
  digitalWrite(out1, LOW);
digitalWrite(out2, LOW);
}                                 


ISR (TIMER0_OVF_vect) {
    TCNT0 = 178;
  if(zero_cross1 == true) {             
    if(i>=bright1) {                     
      digitalWrite(out1, HIGH);       
      i=0;                         
      zero_cross1 = false;               
    }
    else {
      i++;                           
    }                               
  } 
if(zero_cross2 == true) {             
    if(y>=bright2) {                     
      digitalWrite(out2, HIGH);       
      y=0;                         
      zero_cross2 = false;               
    }
    else {
      y++;                           
    }                               
  }                                                                 
}                                   

void loop() {                       
  bright1 = analogRead(pot1) / 8; 
  bright2 = analogRead(pot2) / 8;
}
3  International / Software / Re: Doppio dimmer con attiny85 e triac on: October 24, 2012, 01:27:30 pm
@leo, ho fatto le prove con attiny45 e attiny85 sia ad 1mhz sia ad 8mhz, ed in tutti e 4 i casi, funziona!

non so perchè a me non funzioni in quel caso, ma a me interessa aver risolto smiley-wink
4  International / Software / Re: ATtiny 85 avrdude: stk500_getsync(): not in sync: resp=0x15 on: October 24, 2012, 12:48:08 pm
sono d'accordo con te smiley-wink

ho solo sostenuto che il metodo giusto o sbagliato che sia, funziona, nient'altro... smiley-wink
5  International / Software / Re: Doppio dimmer con attiny85 e triac on: October 24, 2012, 12:35:27 pm
@brunello... una resistenza da 5w (perchè col calcolo mi esce circa 3w) è abbastanza grossa, e riscalderà comunque, a quel punto mi conviene il condensatore... grosso + o - nello stesso modo, e non riscalda come la resistenza...

@leo, non so perchè non mi va xD ma con quella modifica è apposto...

cos'è il toolchain avr?

sul pc con cui compilo, ho win xp pro sp2 (originale) (su un pc con i5 e 4gb di ram), ide versione 1.0.1, utilizzo come compiler arduino isp, anche se in realtà ho creato un piccolo clone dell'arduino serial e l'ho assemblato per uso di programmatore... uso un semplice usb > rs232 per la comunicazione.
6  International / Software / Re: ATtiny 85 avrdude: stk500_getsync(): not in sync: resp=0x15 on: October 24, 2012, 11:50:44 am
michele posso assicurarti che mi sono creato un arduino-clone (con porta seriale), adibito a mo di stk500-compatible usando arduinoisp, ed ho messo il condensatore da 10uF tra reset e gnd, ho programmato atmega168, atmega168pa, atmega644a, attiny45, ed attiny85, e fin'ora non mi ha dato nessun problema...

questo messaggio mi è apparso solo una volta... purtroppo avevo dimenticato di collegare l'alimentatore :/ xD
7  International / Software / Re: ATtiny 85 avrdude: stk500_getsync(): not in sync: resp=0x15 on: October 24, 2012, 11:33:47 am
il condensatore di solito si mette da 10uF col positivo sul reset (di arduino) ed il negativo a massa (gnd)...

una volta mi è successa una cosa del genere, ed i possibili problemi sono:

nel menù di arduino devi settare Strumenti > Programmatore > Arduino as ISP
poi se questo va bene, controlla che in board tu abbia selezionato la voce con attiny85 @ 8mhz o 1mhz (a seconda di come hai il clock del micro impostato)
se anche questo e ok, controlla i collegamenti, controlla che i fili non siano ossidati e che facciano contatto.
8  International / Software / Re: Doppio dimmer con attiny85 e triac on: October 24, 2012, 11:26:33 am
@leo CI SONO RIUSCITOOO!!!!

leo, ti do un bacione a distanza!  smiley-kiss

mi è bastato cambiare TIM0_OVF_vect  in TIMER0_OVF_vect...

adesso, mi è però nato un problema hardware... a prescindere dai funzionamenti...

mi sono accorto che la resistenza da 47k 1/4W che ho messo dopo il ponte di diodi, che alimenta il 4n35, riscalda maledettamente!

basterà metterne una da 1/2W, oppure devo cambiare il valore?

non vorrei ricorrere alla Xc (reattanza capacitiva)...
9  International / Software / Re: Doppio dimmer con attiny85 e triac on: October 24, 2012, 10:27:48 am
ho provato col tuo core, ma ho lo stesso identico problema...

se metto il code normale non funziona nulla, se faccio il blink commentando la routine isr...ecc mi fa un lampeggio e poi stop... se tolgo anche la parte che va da cli() a sei(), il blink funziona perfettamente...

adesso non so proprio che fare...

aspetto tue risposte... lo so che ti sto facendo perdere un sacco di tempo, e mi scuso per questo...

solo, che voglio riuscire a farlo funzionare, ormai è diventata una questione di principio...
10  International / Software / Re: Doppio dimmer con attiny85 e triac on: October 24, 2012, 07:45:04 am
@leo non so che dirti...

io ho solo visto quella stringa in quella guida che ho linkato, e in quel modo non genera errori.

mettendo un semplice blink nel loop, disabilitando la routine ISR... ecc ecc, il loop è moolto veloce, cioè un delay di 1000mS è diventato di neanche metà...

il core che uso l'ho preso da qui: http://hlt.media.mit.edu/?p=1695 e nella cartella "hardware" trovo la cartella "attiny" nella quale trovo "variants" e "boards.txt", in "variants" trovo "tiny8" e "tiny14" nelle quali c'è un file "pins_arduino.h".

potresti cortesemente passarmi il core che usi tu ?

il chip è stato impostato con internal rc osc ad 8mhz - startup 6ck/14ck + 64ms (quello di default), e settando i fuses tramite avrdude gui.

ho tolto il ckdiv8, facendo così diventare il low fuse da 0x62 a 0xE2

se ti serve sapere altro, sono a disposizione
11  International / Software / Re: Doppio dimmer con attiny85 e triac on: October 23, 2012, 08:04:12 am
Ciao leo,

ho provato il tuo codice, ma durante la verifica mi da quest'errore:
Quote
core.a(wiring.c.o): In function `__vector_5':
C:\Documents and Settings\user\Desktop\arduino-1.0.1\hardware\arduino\cores\arduino/wiring.c:49: multiple definition of `__vector_5'
dimmer.cpp.o:C:\DOCUME~1\user\IMPOST~1\Temp\build3703977071899918311.tmp/dimmer.cpp:243: first defined here

il codice è così adesso...
Code:
volatile int i=0, y=0;               // variabili contatore...
volatile boolean zero_cross1=0, zero_cross2=0;  // booleane per lo zero crossing
int out1 = 0, out2 = 1;                // Output >> ai moc...
int pot1 = 3, pot2=4;             // ingressi trimmer
int bright1 = 0, bright2 = 0;   // livello di luminosità (0-128)  0 = on, 128 = 0ff

//int freqStep = 78;    // ritardo del timer in microsecondi
void setup() {
cli();//fermo gli interrupt
TCCR0A &= ~((1<<COM0A0) | (1<<COM0A1)); //disattivi gli interrupt del timer
//modalità contatore fino all'overflow
TCCR0A &= ~((1<<WGM01) | (1<<WGM00));
TCCR0B &= ~(1<<WGM02);
//prescaler a /8
TCCR0B &= ~((1<<CS02) | (1<<CS00));
TCCR0B |= (1<<CS01);
TCNT0 = 178; //valore iniziale
TIMSK |= (1<<TOIE0); //attivo un interrutp all'overflow
sei(); //riattivo gli interrupt
pinMode(out1, OUTPUT);
pinMode(out2, OUTPUT);
attachInterrupt(0, zero_cross_detect, RISING); //zero crossing detection con interrupt esterno

}

void zero_cross_detect() {    
  zero_cross1 = true;
zero_cross2 = true;
i=0;
y=0;
  digitalWrite(out1, LOW);
digitalWrite(out2, LOW);
}                                


ISR (TIM0_OVF_vect) {
    TCNT0 = 178;
  if(zero_cross1 == true) {              
    if(i>=bright1) {                    
      digitalWrite(out1, HIGH);      
      i=0;                        
      zero_cross1 = false;                
    }
    else {
      i++;                          
    }                                
  }  
if(zero_cross2 == true) {              
    if(y>=bright2) {                    
      digitalWrite(out2, HIGH);      
      y=0;                        
      zero_cross2 = false;                
    }
    else {
      y++;                          
    }                                
  }                                                                  
}                                  

void loop() {                        
  bright1 = analogRead(pot1) / 8;  
  bright2 = analogRead(pot2) / 8;
}

EDIT: confermo che il chip è stato settato ad 8mhz con quarzo interno... ho tolto il ckdiv
EDIT2:
seguendo questa guida: http://www.atmel.com/Images/doc2505.pdf

a pagina 9 ho visto TIMER0_OVF0_vect, e l'ho modificato nel codice che mi hai dato... adesso non genera errori, ma provandolo, il loop è diventato velocissimo! e la funzione che dovrebbe farmi, non me la fa...

Grazie
12  International / Software / Re: Doppio dimmer con attiny85 e triac on: October 22, 2012, 12:10:58 pm
leo, ho bisogno di una mano...
ho letto la guida che mi hai dato, ma purtroppo non ho ancora le competenze per comprenderla...

ecco il codice che uso:
Code:
volatile int i=0, y=0;               // variabili contatore...
volatile boolean zero_cross1=0, zero_cross2=0;  // booleane per lo zero crossing
int out1 = 0, out2 = 1;                // Output >> ai moc...
int pot1 = 3, pot2=4;             // ingressi trimmer
int bright1 = 0, bright2 = 0;   // livello di luminosità (0-128)  0 = on, 128 = 0ff

int freqStep = 78;    // ritardo del timer in microsecondi
void setup() {
pinMode(out1, OUTPUT);
pinMode(out2, OUTPUT);
attachInterrupt(0, zero_cross_detect, RISING); //zero crossing detection con interrupt esterno

}

void zero_cross_detect() {   
  zero_cross1 = true;
zero_cross2 = true;
i=0;
y=0;
  digitalWrite(out1, LOW);
digitalWrite(out2, LOW);
}                                 


void br_check() {              // SUB CHE DEVE ESSERE ESEGUITA OGNI "FREQSTEP [uS]" (78 microsecondi)   
  if(zero_cross1 == true) {             
    if(i>=bright1) {                     
      digitalWrite(out1, HIGH);       
      i=0;                         
      zero_cross1 = false;               
    }
    else {
      i++;                           
    }                               
  } 
if(zero_cross2 == true) {             
    if(y>=bright2) {                     
      digitalWrite(out2, HIGH);       
      y=0;                         
      zero_cross2 = false;               
    }
    else {
      y++;                           
    }                               
  }                                                                 
}                                   

void loop() {                       
  bright1 = analogRead(pot1) / 8; 
  bright2 = analogRead(pot2) / 8;
}

come scritto nel codice, voglio che la sub br_check() venga eseguita indipendentemente dal loop, ogni 78uS.

saresti in grado di inviarmi un pezzo di codice che possa risolvere il mio problema usando un timer?
se possibile, potresti commentare lo sketch, così che io riesca a comprendere determinati passaggi, e se non chiedo troppo, anche una breve spiegazione sull'uso dei timer?

Grazie smiley-wink
13  International / Software / Re: Doppio dimmer con attiny85 e triac on: October 21, 2012, 05:30:29 pm
@uwe certo smiley-wink

@leo vedrò che riesco a fare...

purtroppo non posso provarlo fino a domani pomeriggio, perchè c'è la scuola di mezzo...

grazie, vedrò se riesco a risolvere
14  International / Software / Re: Doppio dimmer con attiny85 e triac on: October 21, 2012, 11:51:53 am
si, scusami.. microsecondi...

mi servono 2 timer, perchè devo gestire 2 dimmer separati... con lo stesso micro.. ognuno è indipendente dall'altro...

mi potresti dare un piccolo spezzone di codice per usare i timer, perchè purtroppo le librerie non vanno... li timerone mi genera tantissimi errori, e le altre all'atto pratico non fungono...
come hai detto c'è un'interrupt esterno, ma quello mi funziona...
gli altri 2 timer devono essere indipendenti da esso, e dal loop...

EDIT: effettivamente, mi basterebbe anche un solo timer, che però abbia appunto risoluzione di 78uS (microsecondi)
15  International / Software / Re: Doppio dimmer con attiny85 e triac on: October 21, 2012, 04:36:07 am
@uwe, non ho problemi circuitali, perchè al posto della resistenza da 33k il mio prof, mi ha detto di metterla da 47k, riguardo il pilotaggio del triac, funziona alla grande, il led del fototriac è collegato con una resistenza da 330ohm quindi si accende pienamente.
facendo delle prove tipo blink, le 2 lampade si accendono e spengono perfettamente... anche insieme...
EDIT: uso moc3021...


@leo... non so dirti... se guardi il sorgente di quel circuito, vedi che il timer, serve a dare l'uscita in un determinato istante, tramite un contatore fatto nella sub del timer.
il timer ha risoluzione di 65ms (perchè li sono 60hz), io ho fatto il calcolo per 50hz come scritto nello sketch, e mi esce circa 78ms...

quindi riepilogando... mi servono 2 timer indipendenti dal loop con risoluzione impostabile a 78ms, tenendo presente che non sto usando un ATMEGA168/328 ma un ATTINY85
Pages: [1] 2 3 4