/*
* mnu.c
*
* Created: 15/03/2013 8:27:18
* Author: Emilio
*/
#include "mnu.h"
void run_mnu()
{
display_refress++;
On_startUp();
set_defaults();
Seleccionar_idioma();
Funciones_diagnostico();
mnuPrincipal();
Editar_programa();
mnu_diagnostico();
if(ready_to_start)
mnu_trabajo();
if(!factory_setup & !param_save)
Error_msg();
}
/******************************************************************************
*Representa en pantalla el mensaje de error correspondiente
******************************************************************************/
void Error_msg()
{
averia_last = averia;
averia = proceso.error;
if((proceso.error==0) && (averia_last > averia))
ready_to_start = true; //solo en el flanco de error
if(proceso.error==0)
return;
ready_to_start = false;
if(proceso.error & 16)
{
strcpy(lcd_buffer_H," HOT WATER ");
strcpy(lcd_buffer_L," WAIT ");
}
if(proceso.error & 8)
{
strcpy(lcd_buffer_H," MOSFETS HOT ");
strcpy(lcd_buffer_L," WAIT ");
}
if(proceso.error & 4)
{
strcpy(lcd_buffer_H," OVERVOLTAGE ");
strcpy(lcd_buffer_L," RESET ");
if(PULSADOR_OK)
{
while(PULSADOR_OK)asm("wdr");
proceso.error &= ~4;
TRANSISTORS_OFF(); // IGBT OFF
scr_cntrl.scr1_pulse = false;
scr_cntrl.scr2_pulse = false;
flags.heating = false;
ready_to_start = true;
strcpy(cadena_low,"INC START EDIT ");
return_to_main();
}
}
if(proceso.error & 2)
{
strcpy(lcd_buffer_H," OVERCURRENT ");
strcpy(lcd_buffer_L," RESET ");
if(PULSADOR_OK)
{
while(PULSADOR_OK)asm("wdr");
proceso.error &= ~2;
TRANSISTORS_OFF(); // IGBT OFF
scr_cntrl.scr1_pulse = false;
scr_cntrl.scr2_pulse = false;
flags.heating = false;
ready_to_start = true;
strcpy(cadena_low,"INC START EDIT ");
return_to_main();
}
}
send_to_lcd_rs485(2);
}
/*******************************************************************************
* Solo se puede ejecutar al arrancar el equipo.
* en los dos primeros segundos.
*******************************************************************************/
void On_startUp()
{
if(start_up)
{
while(counter_lengua < 26000)
{
asm("wdr");
counter_lengua++;
if(PULSADOR_1)
{
lenguaje_set=true;
start_up=false;
}
if(PULSADOR_3)
{
factory_setup=true;
start_up=false;
}
if(PULSADOR_OK)
{
diagnostic=true;
start_up=0;
}
}
if(start_up)
{
start_up = false;
return_to_main();
}
}
}
/*******************************************************************************
* Solo se puede ejecutar al arrancar el equipo. Si se oprime el botón central
* en los dos primeros segundos.
*******************************************************************************/
void Funciones_diagnostico()
{
if(diagnostic) // Si se pulsó el boton central
{
program_select=0;
strcpy(lcd_buffer_H," DIAGNOSTICO ");
strcpy(lcd_buffer_L," OK ");
diagnostic = false;
send_to_lcd_rs485(2);
diagnostic1 = true;
}
/********************************************************************/
// Menu de diagnostico
if(diagnostic1)
{
if(PULSADOR_OK)
{
diagnostic1 = false;
while(PULSADOR_OK )
asm("wdr");
ready_to_start=0;
diagn_mnu = true;
}
}
/********************************************************************/
}
void mnu_diagnostico()
{
if(!diagn_mnu)
return;
diagn_screen();
}
void diagn_screen()
{
if(PULSADOR_1)
{
while(PULSADOR_1)asm("wdr");
ACA.CTRLB++;
eeprom_write_byte(¶metros_eep.V_max,ACA.CTRLB);
}
if(PULSADOR_3)
{
while(PULSADOR_3)asm("wdr");
ACA.CTRLB--;
eeprom_write_byte(¶metros_eep.V_max,ACA.CTRLB);
}
if(!(PULSADOR_OK))
{
while(PULSADOR_OK)asm("wdr");
//diagn_mnu = false;
//return_to_main();
}
Display_update();
}
void Display_update()
{
strcpy((char *)lcd_buffer_H," V COMPARATOR ");
lcd_buffer_L[0] = ' ';
lcd_buffer_L[1] = ' ';
char_to_bcd(ACA.CTRLB);
lcd_buffer_L[2] = digitos.centenas;
lcd_buffer_L[3] = digitos.decenas;
lcd_buffer_L[4] = digitos.unidades;
lcd_buffer_L[5] = ' ';
lcd_buffer_L[6] = ' ';
lcd_buffer_L[7] = 0x20;
lcd_buffer_L[8] = ' ';
lcd_buffer_L[9] = ' ';
lcd_buffer_L[10] = ' ';
lcd_buffer_L[11] = ' ';
lcd_buffer_L[12] = ' ';
lcd_buffer_L[13] = '.';
lcd_buffer_L[14] = ' ';
lcd_buffer_L[15] = ' ';
send_to_lcd_rs485(2);
}
/*******************************************************************************
* Solo se puede ejecutar al arrancar el equipo. Si se oprime el botón Izquierdo
* en los dos primeros segundos.
*******************************************************************************/
void Seleccionar_idioma()
{
if(lenguaje_set) // Si se pulsó el boton izquierdo al arrancar
{
program_select=0;
if(lengua==castellano)
{
strcpy(lcd_buffer_L,"CAS SALV ING");
strcpy(lcd_buffer_H," CASTELLANO ");
}
else
{
strcpy(lcd_buffer_L,"CAS SAVE ENG");
strcpy(lcd_buffer_H," ENGLISH ");
}
lenguaje_set=0;
send_to_lcd_rs485(2);
lenguaje_select=1; // Activa menu de selección de lenguaje
}
/********************************************************************/
//Menu de selección de idioma
if(lenguaje_select)
{
if(PULSADOR_1)
{
while(PULSADOR_1)asm("wdr");
lengua=castellano;
strcpy(lcd_buffer_H," CASTELLANO ");
strcpy(lcd_buffer_L,"CAS SALV ING");
send_to_lcd_rs485(2);
}
if(PULSADOR_3)
{
lengua=ingles;
strcpy(lcd_buffer_H," ENGLISH ");
strcpy(lcd_buffer_L,"CAS SAVE ENG");
send_to_lcd_rs485(2);
}
if(PULSADOR_OK)
{
while(PULSADOR_OK)asm("wdr");
lenguaje_select = false;
return_to_main();
}
}
}
/*******************************************************************************
* Solo se puede ejecutar al arrancar el equipo. Si se oprime el botón derecho
* en los dos primeros segundos.
*******************************************************************************/
void set_defaults()
{
if(factory_setup) // Si se pulsó boton derecho al arrancar
{
strcpy(lcd_buffer_H," LOAD DEFAULTS? ");
strcpy(lcd_buffer_L," YES FREQ NO ");
factory_setup=false;
send_to_lcd_rs485(2);
param_save=true; // Activa menu "Factory Defaults"
}
/********************************************************************/
/********************************************************************/
// Menu de Factory Default Parameters
if(param_save)
{
if(PULSADOR_1)
{
Write_eeprom_defaults();
}
if(PULSADOR_OK)
{
param_save = false;
set_freq = true;
while(PULSADOR_OK)asm("wdr");
char_to_bcd(parametros.Line_frequency);
lcd_buffer_H[0] = 0x20;
lcd_buffer_H[1] = 0x20;
lcd_buffer_H[2] = digitos.centenas;
lcd_buffer_H[3] = digitos.decenas;
lcd_buffer_H[4] = digitos.unidades;
lcd_buffer_H[5] = 0x20;
lcd_buffer_H[6] = 0x20;
lcd_buffer_H[7] = 'H';
lcd_buffer_H[8] = 'z';
lcd_buffer_H[9] = '.';
lcd_buffer_H[10] = 0x20;
lcd_buffer_H[11] = 0x20;
lcd_buffer_H[12] = 0x20;
lcd_buffe