Go Down

Topic: Doppio dimmer con attiny85 e triac (Read 2 times) previous topic - next topic

Ultra Phonic 2

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

leo72

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.

Ultra Phonic 2

@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 ;)

leo72

Puoi pubblicare il codice che stai usando in questo momento?

Ultra Phonic 2

eccolo:

Code: [Select]
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;
}

Go Up