Ciao leo,
ho provato il tuo codice, ma durante la verifica mi da quest'errore:
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...
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