Initialize alarm signal when ADC value is greater than 0xF0

This commit is contained in:
Miducc
2023-06-23 09:37:29 +07:00
parent 7ef22b7923
commit fe3d8b4956
2 changed files with 201 additions and 0 deletions

175
src/afe_cofiguration.c Normal file
View File

@@ -0,0 +1,175 @@
#include "BA45F5250.h"
#include "stdint.h"
#include "build-in.h"
#include "afe_configuration.h"
#include "ad_converter.h"
#include "macro_define.h"
#include "system_function.h"
void opa0_calib()
{
uint8_t R_TMP0, R_TMP1;
R_TMP0 = 0x00;
R_TMP1 = 0x00;
_sda0vos = 0b11111111;
GCC_DELAY(2000);
while(_sda0o)
{
_sda0vos--;
GCC_DELAY(2000);
}
R_TMP0 = _sda0vos & 0b00111111;
_sda0vos = 0b11000000;
GCC_DELAY(2000);
while(!_sda0o)
{
_sda0vos++;
GCC_DELAY(2000);
}
R_TMP1 = _sda0vos & 0b00111111;
_sda0vos = (R_TMP0 + R_TMP1) / 2;
}
void opa1_calib()
{
uint8_t R_TMP0, R_TMP1;
R_TMP0 = 0x00;
R_TMP1 = 0x00;
_sda1vos = 0b11111111;
GCC_DELAY(2000);
while(_sda1o)
{
_sda1vos--;
GCC_DELAY(2000);
}
R_TMP0 = _sda1vos & 0b00111111;
_sda1vos = 0b11000000;
GCC_DELAY(2000);
while(!_sda1o)
{
_sda1vos++;
GCC_DELAY(2000);
}
R_TMP1 = _sda1vos & 0b00111111;
_sda1vos = (R_TMP0 + R_TMP1) / 2;
}
void opa_config()
{
_isgdata0 = ISINK0_CURRENT;
_isgdata1 = ISINK1_CURRENT;
_sdpgac0 = AFE_R1;
_sdpgac1 = (AFE_R3 << 6) + AFE_R2;
_sda0c = 0b01000011;
_sda1c = 0b01000011;
_sdsw = 0b00100110;
opa0_calib();
opa1_calib();
}
void isink0_on()
{
_isgen = 1;
_isgs0 = 1;
isink0_delay();
}
void isink1_on()
{
_isgen = 1;
_isgs1 = 1;
isink1_delay();
}
void isink0_off()
{
_isgen = 0;
_isgs0 = 0;
}
void isink1_off()
{
_isgen = 0;
_isgs1 = 0;
}
void opa_on()
{
_sds0 = 1;
_sda0en = 1;
opa_delay(2);
_sda1en = 1;
opa_delay(2);
}
void opa_off()
{
_sda0en = 0;
_sda1en = 0;
_sds0 = 0;
}
void isink0_delay()
{
uint8_t i;
for(i = 0; i < ISINK0_DELAY; i++)
{
#if _HIRCC_8M
GCC_DELAY(93);
#elif _HIRCC_4M
GCC_DELAY(43);
#else
GCC_DELAY(18);
#endif
}
}
void isink1_delay()
{
uint8_t i;
for(i = 0; i < ISINK1_DELAY; i++)
{
#if _HIRCC_8M
GCC_DELAY(93);
#elif _HIRCC_4M
GCC_DELAY(43);
#else
GCC_DELAY(18);
#endif
}
}
void opa_delay(uint8_t delay)
{
uint8_t i;
for(i = 0; i < delay; i++)
{
#if _HIRCC_8M
GCC_DELAY(193);
#elif _HIRCC_4M
GCC_DELAY(93);
#else
GCC_DELAY(43);
#endif
}
}
void afe_init()
{
opa_on();
isink0_on();
isink1_on();
while(read_adc() >= 0xf0)
{
GCC_CLRWDT();
_pb2 = 1;
_pton = 1;
delay(200);
_pb2 = 0;
_pton = 0;
delay(200);
}
isink0_off();
isink1_off();
opa_off();
}