Sono disperato...ho fatto
un piccolo e semplice firmware per la gestione di alcune sonde pt100 e alcuni consensi dei relè e roba simile, il tutto visualizzato su display LCD.
La gestione del tutto è affidata al microcontrollore atMega16.
Ora il problema è che volevo gestire un semplice orologio che mi serve per alcuni parametri, ma nonostante utilizzi sempre il solito sistema di interrupt sul timer1, stavolta non riesco a farlo funzionare.
Ogni volta che interviene l'interrupt, mi si resetta il micro.
Allora ho rifatto il programma solo per gestire l'interrupt, ma nulla da fare, si resetta ad ogni interrogazione.
Dove sbaglio?? qualcuno sa aiutarmi??
Posto il programma timer1.
- Codice: Seleziona tutto
// Target : M16
// Crystal: 8.0000Mhz
#include <iom16v.h>
#include <macros.h>
char secondi=0;
void port_init(void)
{ PORTA = 0xF0;
DDRA = 0xF0;
PORTB = 0xFF;
DDRB = 0xFF;
PORTC = 0xF0;
DDRC = 0xF0;
PORTD = 0x0B;
DDRD = 0x0B;
}
//Watchdog initialisation
// prescale: 1024K cycles
void watchdog_init(void)
{ WDR();
WDTCR = 0x0E;
}
//TIMER1 initialisation - prescale:1024
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1Sec
// actual value: 1,000Sec (0,0%)
void timer1_init(void)
{ TCCR1B = 0x00;
TCNT1H = 0xE1;
TCNT1L = 0x7C;
OCR1AH = 0x1E;
OCR1AL = 0x84;
OCR1BH = 0x1E;
OCR1BL = 0x84;
ICR1H = 0x1E;
ICR1L = 0x84;
TCCR1A = 0xC0;
TCCR1B = 0x05; //start Timer
}
void init_devices(void)
{ CLI();
port_init();
watchdog_init();
timer1_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x10;
SEI();
}
//void main(void)
{ init_devices();
while (1)
WDR();
//if (TCNT1==OCR1A)
//secondi++;
//TCNT1H = 0xE1;
//TCNT1L = 0x7C;}
//if ((secondi%2)==0)
//PORTC=PORTC|0x80;//spegni disp
//else
//PORTC=PORTC&0x7f;//accendi disp
//}
}
#pragma interrupt_handler timer1_compa_isr:7
void timer1_compa_isr(void)
{
secondi++;
if (secondi%2)
PORTC=PORTC|0x80;//spegni disp
else
PORTC=PORTC&0x7f;//accendi disp
}
Come si vede, nel main ho commentato delle righe di codice, che sono quelle gestite dall'interrupt, infatti se lo disabilito e utilizzo quelle righe di codice, la frequenza sul pin7 della porta C è perfetto ad 1 secondo.
GRAZIE

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


