Korzystam z atmegi 32. Problem polega na tym że chcę zapisywać wartości do eeprom-u. Zapis robię co przerwanie timera2 od przepełnienia. I za każdym razem jak dochodzi do zapisywania do eeprom-u to mikrokontroler się resetuje.
Czytałem coś o fuse bitach coś zmieniłem, ale nie pomogło. Trzeba oddzielnie eeprom i flash programować?
Zestaw ewaluacyjny zl15avr i programator avtprog1:
środowisko AVR studio.
Czytałem coś o fuse bitach coś zmieniłem, ale nie pomogło. Trzeba oddzielnie eeprom i flash programować?
Zestaw ewaluacyjny zl15avr i programator avtprog1:
środowisko AVR studio.
#define TIMER2_INIT 0
#define SOFTWARE_OVERFLOW2 630
int overflow_tmp=0;
static EEMEM unsigned int tc77_temp_min=0;
static EEMEM unsigned int tc77_temp_max=0;
static EEMEM unsigned int mscp77_temp_min=0;
static EEMEM unsigned int mscp77_temp_max=0;
static EEMEM unsigned int two_temp_min_avg=0;
static EEMEM unsigned int two_temp_max_avg=0;
/* */
//konfiguracja timera2
TIMSK = 0b01000001;
TCCR2=0x05; //prescaler
TCNT2 = TIMER2_INIT;
/* */
SIGNAL (SIG_OVERFLOW2)
{
char disp;
unsigned int anal_temp,digital_temp,avg_temp;
// globalne blokowanie przerwań
cli();
overflow_tmp++;
if (overflow_tmp>SOFTWARE_OVERFLOW2)
{
overflow_tmp=0;
digital_temp=tc77digital_temp(disp);
anal_temp=get_temp_mcp9701();
avg_temp=(digital_temp+anal_temp)/2;
if(digital_temp<eeprom_read_byte(&tc77_temp_min))
{
eeprom_write_byte(&tc77_temp_min, digital_temp);
}
if(digital_temp>eeprom_read_byte(&tc77_temp_max))
{
eeprom_write_byte(&tc77_temp_max, digital_temp);
}
if(anal_temp<eeprom_read_byte(&mscp77_temp_min))
{
eeprom_write_byte(&mscp77_temp_min,anal_temp);
}
if(anal_temp>eeprom_read_byte(&mscp77_temp_max))
{
eeprom_write_byte(&mscp77_temp_max,anal_temp);
}
if(avg_temp<eeprom_read_byte(&two_temp_min_avg))
{
eeprom_write_byte(&two_temp_min_avg,avg_temp);
}
if(avg_temp>eeprom_read_byte(&two_temp_max_avg))
{
eeprom_write_byte(&two_temp_max_avg,avg_temp);
}
}
TCNT2 = TIMER2_INIT;
sei();
}