Pages: 1 [2]   Go Down
Author Topic: Doppio dimmer con attiny85 e triac  (Read 1777 times)
0 Members and 1 Guest are viewing this topic.
Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@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 ?
Usa il core Tiny:
http://code.google.com/p/arduino-tiny/

1) cancella il precedente core
2) scarica ed installa il nuovo

Quote
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
Quindi tu hai effettivamente riscritto il nuovo fuse sul micro, giusto? Però il delay lo vedi accelerato? Allora vuol dire che stai compilando ad 1 MHz ed eseguendo ad 8 MHz. Riprova con il core ti ho passato, poi ne riparliamo.
Logged


San Pier Niceto (ME), Sicily
Offline Offline
Newbie
*
Karma: 0
Posts: 48
Scopriamo arduino...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

San Pier Niceto (ME), Sicily
Offline Offline
Newbie
*
Karma: 0
Posts: 48
Scopriamo arduino...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@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)...
Logged

Tuscany
Offline Offline
Edison Member
*
Karma: 37
Posts: 1478
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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)...

fai un semplice calcolo W=V*I
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@leo CI SONO RIUSCITOOO!!!!

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

mi è bastato cambiare TIM0_OVF_vect  in TIMER0_OVF_vect...
Il leOS io l'ho compilato, caricato ed usato su molti dei micro che supporta: Attiny85, Attiny84, Atmega168/328, Atmega644/1284, Atmega32U4. E non ho avuto nessun problema usando TIM0_OVF_vect. L'ultimo progetto in ordine di tempo prevede un Attiny85, che sta regolarmente funzionando su una breadboard di test. Perché a te non va?  smiley-roll-sweat
Mi togli una curiosità? Ma che toolchain Avr stai usando? Quella dell'IDE o quella che hai sul sistema?
A proposito, che versione dell'IDE e che SO usi?
Logged


San Pier Niceto (ME), Sicily
Offline Offline
Newbie
*
Karma: 0
Posts: 48
Scopriamo arduino...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@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.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La toolchain Avr è quel gruppo di programmi e librerie che servono per poter compilare i firmware per i microcontrollori Atmel. Se non sai cos'è ed hai Windows, stai sicuramente utilizzando la toolchain distribuita con l'IDE di Arduino.

Mi potresti fare un test? Potresti scaricare il leOS ed usare l'esempio BlinkWithoutMillis su un pin del microcontrollore e dirmi se:
1) compilando ricevi errori
2) una volta uploadato il programma, questo fa effettivamente lampeggiare il led

Te ne sarei grato per capire se è una cosa della toolchain che sto utilizzando io oppure no.
Logged


San Pier Niceto (ME), Sicily
Offline Offline
Newbie
*
Karma: 0
Posts: 48
Scopriamo arduino...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@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
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Puoi pubblicare il codice che stai usando in questo momento?
Logged


San Pier Niceto (ME), Sicily
Offline Offline
Newbie
*
Karma: 0
Posts: 48
Scopriamo arduino...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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;
}
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho provato su un computer che non è il mio ma ha Windows XP con IDE 1.0.1 e core Tiny. A me ha compilato sia con TIM0 che con TIMER0 senza errori.
Logged


San Pier Niceto (ME), Sicily
Offline Offline
Newbie
*
Karma: 0
Posts: 48
Scopriamo arduino...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

beh, anche a me compila senza errori, ma non mi funziona all'atto pratico...
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

beh, anche a me compila senza errori, ma non mi funziona all'atto pratico...
Ah. Perché inizialmente avevi detto che ti dava errore anche in compilazione
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Guarda, ho compilato e caricato ora uno sketch di test.
Code:
byte stato=1;
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(0, OUTPUT);
}
ISR (TIMER0_OVF_vect) { //funziona anche con TIM0_OVF_vect ovviamente
    TCNT0 = 178;
    digitalWrite(0, stato);
    stato ^=1;
   
}
void loop(){}

Ho messo un led sul pin D0 per verificare che funzionasse correttamente. A me va sia con TIM0 che con TIMER0. Ed ora sono su Linux e con la toolchain ufficiale Atmel.
C'è qualcosa sul tuo PC che non va e che non capisco cosa sia...  smiley-roll-sweat
Ci vorrebbero altri riscontri.
Logged


Pages: 1 [2]   Go Up
Jump to: