Update main.c adding buffer code from pico v0.33

beta-adc
Alan Johnston 2 years ago committed by GitHub
parent 101c3b33cb
commit 9ad955313f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -3,7 +3,7 @@
* Or transmits SSTV stored images or Pi camera iamges.
*
* Copyright Alan B. Johnston
*
*
* Portions Copyright (C) 2018 Jonathan Brandenburg
*
* This program is free software: you can redistribute it and/or modify
@ -44,12 +44,13 @@ int main(int argc, char * argv[]) {
printf("Pi Zero 2 detected\n");
}
read_adc();
signal(SIGALRM, read_adc_process);
ualarm(125, 125);
// read_adc();
init_adc();
signal(SIGALRM, read_adc_process);
ualarm(125, 125);
fprintf(stderr,"\nStarting ADC ISR\n\n");
printf("\n\nCubeSatSim v1.3.2 starting...\n\n");
fprintf(stderr,"\n\nCubeSatSim v1.3.2 starting...\n\n");
wiringPiSetup();
@ -2182,7 +2183,7 @@ void read_adc()
char *bus = "/dev/i2c-1";
if ((file = open(bus, O_RDWR)) < 0)
{
printf("Failed to open the bus. \n");
fprintf(stderr,"Failed to open the bus. \n");
exit(1);
}
// Get I2C device, ADS7830 I2C address is 0x48(72)
@ -2204,7 +2205,7 @@ void read_adc()
char data[1]={0};
if(read(file, data, 1) != 1)
{
printf("Erorr : Input/output Erorr \n");
fprintf(stderr,"Erorr : Input/output Erorr \n");
}
else
{
@ -2216,16 +2217,85 @@ void read_adc()
}
}
time_stop = (long int) micros();
printf("Digital value of analog input: %d in %d us\n", raw_adc, (time_stop - time_start)/10); // millis() - time_start);
fprintf(stderr,"Digital value of analog input: %d in %d us\n", raw_adc, (time_stop - time_start)/10); // millis() - time_start);
}
void init_adc()
{
// Create I2C bus
// int file;
char *bus = "/dev/i2c-1";
if ((adc_file = open(bus, O_RDWR)) < 0)
{
fprintf(stderr,"Failed to open the bus. \n");
exit(1);
}
// Get I2C device, ADS7830 I2C address is 0x48(72)
ioctl(adc_file, I2C_SLAVE, 0x48);
// Differential inputs, Channel-0, Channel-1 selected
char config[1] = {0x04};
write(adc_file, config, 1);
sleep(1);
long int time_start, time_stop;
int i = 0;
time_start = (long int) micros(); //millis();
int raw_adc;
while (i++ < 10) {
// Read 1 byte of data
char data[1]={0};
if(read(adc_file, data, 1) != 1)
{
fprintf(stderr,"Erorr: ADC Input/output Erorr \n");
}
else
{
// Convert the data
raw_adc = data[0];
// Output data to screen
// printf("Digital value of analog input: %d in %d us\n", raw_adc, micros() - time_start); // millis() - time_start);
}
}
time_stop = (long int) micros();
fprintf(stderr,"Digital value of analog input: %d in %d us\n", raw_adc, (time_stop - time_start)/10); // millis() - time_start);
wav_position = 0;
}
void read_adc_process(int sig_num)
{
if(sig_num == SIGALRM)
{
// read ADC
printf("read_adc_process\n");
// printf("read_adc_process\n");
if (wav_position > (BUFFER_SIZE - 1)) {
// set pwm level
// allow the pwm value to repeat for 8 cycles this is >>3
buffer[wav_position] = 0;
if(read(adc_file, data, 1) != 1)
{
fprintf(stderr,"Erorr: ADC Input/output Erorr \n");
}
else
{
// Convert the data
buffer[wav_position] = data[0];
// Output data to screen
// printf("Digital value of analog input: %d in %d us\n", data[0], micros() - time_start); // millis() - time_start);
}
wav_position++;
} else {
// reset to start
wav_position = 0;
}
}
}

Loading…
Cancel
Save

Powered by TurnKey Linux.