Пн янв 06, 2020 18:08:57
Я насчитал штук 6 прошивок, и два или три типа контроллера. Конкретней, какая?sergsurf писал(а):Часы прошиты прошивкой указанной в начале темы.
Ср янв 08, 2020 18:44:19
Я насчитал штук 6 прошивок, и два или три типа контроллера. Конкретней, какая?sergsurf писал(а):Часы прошиты прошивкой указанной в начале темы.
Чт янв 30, 2020 16:10:48
Чт янв 30, 2020 16:46:51
Чт янв 30, 2020 16:59:41
Чт янв 30, 2020 17:17:29
//************************************************************************
//========= EEPROM ===================
//************************************************************************
// Так как возможна случайная запись в EEPROM в случае сбоя питания, то:
// 1 - В микроконтроллере включить контроль снижения напряжения питания.
// 2 - Первый (0x00) байт никогда не используется.
// 3 - После ресета обнулить указатель адреса EEPROM.
// Решения для увеличения ресурса EEPROM:
// 4 - Перед записью считывается байт, предназначенный для записи,
// проверяется на равенство с записываемым, если байты равны, то переход
// к записи следующего байта.
// 5 - В конце работы с EEPROM обнулить указатель адреса.
// В программе, в нужном месте:
// .eseg
// .org 0x01
// bla-bla - пошли данные.
// BRIGHT_BUF: ; Значение яркости VFD.
// .byte 1
#if (EEPROM==YES)
.macro Read_EEPROM
ldix @0 // Указатель адреса EEPROM.
ldiy @1 // Указатель адреса SRAM.
ldi r17,@2
rcall _Read_EEPROM
.endmacro
_Read_EEPROM:
sbic EECR,EEWE
rjmp _Read_EEPROM
.ifdef EEARH
out EEARH,XH
.endif
out EEARL,XL
sbi EECR,EERE
sbi EECR,EERE
in EEDREG,EEDR
st Y+,EEDREG
adiw XL,1
dec r17
brne _Read_EEPROM
_Read_EEPROM_0:
sbic EECR,EEWE
rjmp _Read_EEPROM_0
.ifdef EEARH
out EEARH,RCLR
.endif
out EEARL,RCLR
ret
EERead:
sbic EECR,EEWE
rjmp EERead
.ifdef EEARH
out EEARH,XH
.endif
out EEARL,XL
sbi EECR,EERE
sbi EECR,EERE
in EEDREG,EEDR
EERead_1:
sbic EECR,EEWE
rjmp EERead_1
.ifdef EEARH
out EEARH,RCLR
.endif
out EEARL,RCLR
ret
EEWrite:
sbic EECR,EEWE
rjmp EEWrite
.ifdef EEARH
out EEARH,XH
.endif
out EEARL,XL
out EEDR,EEDREG
sbi EECR,EEMWE
sbi EECR,EEWE
EEWrite_1:
sbic EECR,EEWE
rjmp EEWrite_1
.ifdef EEARH
out EEARH,RCLR
.endif
out EEARL,RCLR
ret
.macro Write_EEPROM
ldiy @0 // Указатель адреса SRAM.
ldix @1 // Указатель адреса EEPROM.
ldi r17,@2
rcall _Write_EEPROM
.endmacro
_Write_EEPROM:
sbic EECR,EEWE
rjmp _Write_EEPROM
.ifdef EEARH
out EEARH,XH
.endif
out EEARL,XL
ld EEDREG,Y+
out EEDR,EEDREG
sbi EECR,EEMWE
sbi EECR,EEWE
adiw XL,1
dec r17
brne _Write_EEPROM
_Write_EEPROM_0:
sbic EECR,EEWE
rjmp _Write_EEPROM_0
.ifdef EEARH
out EEARH,RCLR
.endif
out EEARL,RCLR
ret
.macro Clear_EEPROM
ldx @0
ldy @1
rcall _Clear_EEPROM
.endmacro
_Clear_EEPROM:
sbic EECR,EEWE
rjmp _Clear_EEPROM
.ifdef EEARH
out EEARH,XH
.endif
out EEARL,XL
out EEDR,RCLR
sbi EECR,EEMWE
sbi EECR,EEWE
adiw XL,1
sbiw YL,1
brne _Clear_EEPROM
_Clear_EEPROM_0:
sbic EECR,EEWE
rjmp _Clear_EEPROM_0
.ifdef EEARH
out EEARH,RCLR
.endif
out EEARL,RCLR
ret
#endif
//************************************************************************
//==================
//#pragma location = 0x01
/*
__eeprom u08 ee_empty_val @ 0x0100 = 0;
__eeprom u16 ee_tim_heat_val @ 0x0101 = 10;
__eeprom u16 ee_tim_formovka_val @ 0x0103 = 10;
__eeprom u16 ee_tim_pnevmosyem_val @ 0x0105 = 10;
__eeprom u16 ee_timout_sens_1_val @ 0x0107 = 30;
__eeprom u16 ee_timout_sens_2_val @ 0x0109 = 30;
__eeprom u16 ee_timout_sens_3_val @ 0x010B = 30;
__eeprom u16 ee_timout_sens_4_val @ 0x010D = 30;
__eeprom u32 ee_sett_quant @ 0x010F = 1000;
__eeprom u32 ee_curr_quant @ 0x0113 = 0;
*/
__eeprom u08 ee_empty_val = 0;
__eeprom u16 ee_tim_heat_val = 12;
__eeprom u16 ee_tim_formovka_val = 12;
__eeprom u16 ee_tim_pnevmosyem_val = 6;
__eeprom u16 ee_timout_sens_1_val = 30;
__eeprom u16 ee_timout_sens_2_val = 30;
__eeprom u16 ee_timout_sens_3_val = 30;
__eeprom u16 ee_timout_sens_4_val = 30;
__eeprom u32 ee_sett_quant = 10000;
__eeprom u32 ee_curr_quant = 5304;
__eeprom u16 ee_quant_products = 777;
__eeprom u08 ee_state_tens = 0<<TEN_1 | 0<<TEN_2;
//==================
//==================
void read_proc_eds_param (void)
{
tim_heat_val = ee_tim_heat_val;
tim_formovka_val = ee_tim_formovka_val;
tim_pnevmosyem_val = ee_tim_pnevmosyem_val;
timout_sens_1_val = ee_timout_sens_1_val;
timout_sens_2_val = ee_timout_sens_2_val;
timout_sens_3_val = ee_timout_sens_3_val;
timout_sens_4_val = ee_timout_sens_4_val;
sett_quant = ee_sett_quant;
curr_quant = ee_curr_quant;
quant_products = ee_quant_products;
outputs_buf [1] = ee_state_tens;
volatile u08 a = ee_empty_val; // В конце каждого обращения указатель EEPROM в 0.
}
//==================
//==================
void save_parameters_eeprom (void)
{
if (ee_tim_heat_val != tim_heat_val) ee_tim_heat_val = tim_heat_val;
if (ee_tim_formovka_val != tim_formovka_val) ee_tim_formovka_val = tim_formovka_val;
if (ee_tim_pnevmosyem_val != tim_pnevmosyem_val) ee_tim_pnevmosyem_val = tim_pnevmosyem_val;
//----------
if (ee_timout_sens_1_val != timout_sens_1_val) ee_timout_sens_1_val = timout_sens_1_val;
if (ee_timout_sens_2_val != timout_sens_2_val) ee_timout_sens_2_val = timout_sens_2_val;
if (ee_timout_sens_3_val != timout_sens_3_val) ee_timout_sens_3_val = timout_sens_3_val;
if (ee_timout_sens_4_val != timout_sens_4_val) ee_timout_sens_4_val = timout_sens_4_val;
//----------
if (ee_sett_quant != sett_quant) ee_sett_quant = sett_quant;
//----------
if (ee_curr_quant != curr_quant) ee_curr_quant = curr_quant;
//----------
if (ee_quant_products != quant_products) ee_quant_products = quant_products;
//----------
if (ee_state_tens != outputs_buf [1]) ee_state_tens = outputs_buf [1];
//----------
volatile u08 a = ee_empty_val; // В конце каждого обращения указатель EEPROM в 0.
}
//==================
Чт янв 30, 2020 18:12:15
Чт янв 30, 2020 18:24:11
Чт янв 30, 2020 18:37:36
Чт янв 30, 2020 18:39:02
Чт янв 30, 2020 18:45:20
Чт янв 30, 2020 19:25:30
Пт янв 31, 2020 11:48:56
Пт янв 31, 2020 17:22:26
Сб фев 01, 2020 13:07:27
Сб фев 01, 2020 13:52:06
Сб фев 01, 2020 14:28:26
Сб фев 01, 2020 14:55:23
Сб фев 01, 2020 16:49:25
Сб фев 01, 2020 17:01:10