Merge branch 'DiSlord_test_branch'

pull/4/head
erikkaashoek 6 years ago
commit 075817c494

@ -829,6 +829,8 @@ void enter_dfu(void);
/*
* adc.c
*/
#define ADC_TOUCH_X ADC_CHSELR_CHSEL6
#define ADC_TOUCH_Y ADC_CHSELR_CHSEL7
void adc_init(void);
uint16_t adc_single_read(uint32_t chsel);

@ -270,7 +270,7 @@ VNA_SHELL_FUNCTION(cmd_v)
shell_printf("%d\r\n", SI4432_Sel);
return;
}
VFO = my_atoi(argv[0]);
VFO = my_atoi(argv[0]) > 0 ? 1 : 0;
shell_printf("VFO %d\r\n", VFO);
}

@ -857,8 +857,8 @@ uint32_t peakFreq;
int peakIndex;
float temppeakLevel;
int temppeakIndex;
static unsigned long old_freq[4] = { 0, 0, 0, 0 };
static unsigned long real_old_freq[4] = { 0, 0, 0, 0 };
static unsigned long old_freq[4] = { 0, 0, 0, 0};
static unsigned long real_old_freq[4] = { 0, 0, 0, 0};
// volatile int t;
//static uint32_t extra_vbw_step_time = 0;
@ -1785,7 +1785,7 @@ sweep_again: // stay in sweep loop when output mo
if (setting.trigger == T_SINGLE)
pause_sweep(); // Stop scanning after completing this sweep if above trigger
}
scandirty = true; // To show trigger happened
// scandirty = true; // To show trigger happened
}
// ---------------------- process measured actual sweep time -----------------
@ -1847,8 +1847,7 @@ sweep_again: // stay in sweep loop when output mo
if (!in_selftest && setting.mode == M_LOW && setting.auto_attenuation && max_index[0] > 0) { // calculate and apply auto attenuate
setting.atten_step = false; // No step attenuate in low mode auto attenuate
float old_attenuate = get_attenuation();
float actual_max_level = actual_t[max_index[0]] - old_attenuate;
float actual_max_level = actual_t[max_index[0]] - get_attenuation();
if (actual_max_level < - 31 && setting.attenuate >= 10) {
setting.attenuate -= 10.0;
} else if (actual_max_level < - 26 && setting.attenuate >= 5) {
@ -1856,9 +1855,9 @@ sweep_again: // stay in sweep loop when output mo
} else if (actual_max_level > - 19 && setting.attenuate <= 20) {
setting.attenuate += 10.0;
}
if (old_attenuate != get_attenuation()) {
// Try update settings
if (PE4302_Write_Byte((int) get_attenuation() * 2)) {
redraw_request |= REDRAW_CAL_STATUS;
PE4302_Write_Byte((int)(setting.attenuate * 2));
SI4432_Sel = 0;
if (setting.atten_step) {
set_switch_transmit(); // This should never happen

@ -124,7 +124,8 @@ static void shiftOutBuf(uint8_t *buf, uint16_t size) {
}while(--size);
}
#endif
const int SI_nSEL[3] = { GPIO_RX_SEL, GPIO_LO_SEL, 0}; // #3 is dummy!!!!!!
const uint16_t SI_nSEL[MAX_SI4432] = { GPIO_RX_SEL, GPIO_LO_SEL, 0}; // #3 is dummy!!!!!!
volatile int SI4432_Sel = 0; // currently selected SI4432
// volatile int SI4432_guard = 0;
@ -398,7 +399,7 @@ int SI4432_is_fast_mode(void)
void SI4432_Fill(int s, int start)
{
SI4432_Sel = s;
int sel = SI_nSEL[SI4432_Sel];
uint16_t sel = SI_nSEL[SI4432_Sel];
#if 0
uint32_t t = calc_min_sweep_time_us(); // Time to delay in uS for all sweep
if (t < setting.sweep_time_us){
@ -657,8 +658,12 @@ void PE4302_shiftOut(uint8_t val)
}
}
#endif
void PE4302_Write_Byte(unsigned char DATA )
static unsigned char old_attenuation = 0;
bool PE4302_Write_Byte(unsigned char DATA )
{
if (old_attenuation == DATA)
return false;
// chThdSleepMicroseconds(PE4302_DELAY);
SPI2_CLK_LOW;
// chThdSleepMicroseconds(PE4302_DELAY);
@ -670,7 +675,7 @@ void PE4302_Write_Byte(unsigned char DATA )
// chThdSleepMicroseconds(PE4302_DELAY);
CS_PE_LOW;
// chThdSleepMicroseconds(PE4302_DELAY);
return true;
}
#endif

@ -21,6 +21,12 @@
#ifndef __SI4432_H__
#define __SI4432_H__
//
#define MAX_SI4432 3
#define SI4432_RX 0
#define SI4432_LO_OUT 1
#define SI4432_DUMMY 2
#define SI4432_DEV_TYPE 0x00
#define SI4432_DEV_VERSION 0x01
@ -112,7 +118,7 @@ void SI4432_Set_Frequency ( uint32_t Freq );
void SI4432_Transmit(int d);
void SI4432_Receive(void);
uint16_t SI4432_SET_RBW(uint16_t WISH);
void PE4302_Write_Byte(unsigned char DATA );
bool PE4302_Write_Byte(unsigned char DATA );
void PE4302_init(void);
#ifdef __ULTRA_SA__

75
ui.c

@ -195,71 +195,74 @@ static int btn_wait_release(void)
}
}
// ADC read count for measure X and Y (better be 2^n)
#define TOUCH_MEASURE_COUNT 8
static int
touch_measure_y(void)
{
int v;
int v = 0, i = TOUCH_MEASURE_COUNT;
// open Y line
palSetPadMode(GPIOB, 1, PAL_MODE_INPUT_PULLDOWN );
palSetPadMode(GPIOA, 7, PAL_MODE_INPUT_PULLDOWN );
palSetPadMode(GPIOB, GPIOB_YN, PAL_MODE_INPUT_PULLDOWN);
palSetPadMode(GPIOA, GPIOA_YP, PAL_MODE_INPUT_PULLDOWN);
// drive low to high on X line
palSetPadMode(GPIOB, 0, PAL_MODE_OUTPUT_PUSHPULL );
palClearPad(GPIOB, 0);
palSetPadMode(GPIOA, 6, PAL_MODE_OUTPUT_PUSHPULL );
palSetPad(GPIOA, 6);
palSetPadMode(GPIOB, GPIOB_XN, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOA, GPIOA_XP, PAL_MODE_OUTPUT_PUSHPULL);
// drive low to high on X line (coordinates from left to right)
palClearPad(GPIOB, GPIOB_XN);
palSetPad(GPIOA, GPIOA_XP);
chThdSleepMilliseconds(2);
v = adc_single_read(ADC_CHSELR_CHSEL7);
//chThdSleepMilliseconds(2);
//v += adc_single_read(ADC1, ADC_CHSELR_CHSEL7);
return v;
do{
v+= adc_single_read(ADC_TOUCH_Y);
}while(--i);
return v/TOUCH_MEASURE_COUNT;
}
static int
touch_measure_x(void)
{
int v;
// open X line
palSetPadMode(GPIOB, 0, PAL_MODE_INPUT_PULLDOWN );
palSetPadMode(GPIOA, 6, PAL_MODE_INPUT_PULLDOWN );
// drive low to high on Y line
palSetPadMode(GPIOB, 1, PAL_MODE_OUTPUT_PUSHPULL );
palSetPad(GPIOB, 1);
palSetPadMode(GPIOA, 7, PAL_MODE_OUTPUT_PUSHPULL );
palClearPad(GPIOA, 7);
int v = 0, i = TOUCH_MEASURE_COUNT;
// Set X line as input
palSetPadMode(GPIOB, GPIOB_XN, PAL_MODE_INPUT_PULLDOWN);
palSetPadMode(GPIOA, GPIOA_XP, PAL_MODE_INPUT_PULLDOWN);
// Set Y line as output
palSetPadMode(GPIOB, GPIOB_YN, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOA, GPIOA_YP, PAL_MODE_OUTPUT_PUSHPULL);
// drive high to low on Y line (coordinates from bottom to top)
palSetPad(GPIOB, GPIOB_YN);
palClearPad(GPIOA, GPIOA_YP);
chThdSleepMilliseconds(2);
v = adc_single_read(ADC_CHSELR_CHSEL6);
//chThdSleepMilliseconds(2);
//v += adc_single_read(ADC1, ADC_CHSELR_CHSEL6);
return v;
do{
v+= adc_single_read(ADC_TOUCH_X);
}while(--i);
return v/TOUCH_MEASURE_COUNT;
}
void
touch_prepare_sense(void)
{
// open Y line
palSetPadMode(GPIOB, 1, PAL_MODE_INPUT_PULLDOWN );
palSetPadMode(GPIOA, 7, PAL_MODE_INPUT_PULLDOWN );
// Set Y line as input
palSetPadMode(GPIOB, GPIOB_YN, PAL_MODE_INPUT_PULLDOWN);
palSetPadMode(GPIOA, GPIOA_YP, PAL_MODE_INPUT_PULLDOWN);
// force high X line
palSetPadMode(GPIOB, 0, PAL_MODE_OUTPUT_PUSHPULL );
palSetPad(GPIOB, 0);
palSetPadMode(GPIOA, 6, PAL_MODE_OUTPUT_PUSHPULL );
palSetPad(GPIOA, 6);
palSetPadMode(GPIOB, GPIOB_XN, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOA, GPIOA_XP, PAL_MODE_OUTPUT_PUSHPULL);
// drive high on X line (for touch sense on Y)
palSetPad(GPIOB, GPIOB_XN);
palSetPad(GPIOA, GPIOA_XP);
}
void
touch_start_watchdog(void)
{
touch_prepare_sense();
adc_start_analog_watchdogd(ADC_CHSELR_CHSEL7);
adc_start_analog_watchdogd(ADC_TOUCH_Y);
}
static int
touch_status(void)
{
touch_prepare_sense();
return adc_single_read(ADC_CHSELR_CHSEL7) > TOUCH_THRESHOLD;
return adc_single_read(ADC_TOUCH_Y) > TOUCH_THRESHOLD;
}
static int
@ -267,7 +270,7 @@ touch_check(void)
{
int stat = touch_status();
if (stat) {
chThdSleepMilliseconds(10);
// chThdSleepMilliseconds(10);
int x = touch_measure_x();
int y = touch_measure_y();
if (touch_status()) {

Loading…
Cancel
Save

Powered by TurnKey Linux.