Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed MODSERIAL FastPWM ADS8568_ADC
main.cpp
- Committer:
- justinbuckland
- Date:
- 2019-09-13
- Revision:
- 16:2c563709cf09
- Parent:
- 15:a08527d78ffa
- Child:
- 17:25831977b98e
File content as of revision 16:2c563709cf09:
#include "mbed.h"
#include "ADS8568_ADC.h"
#include "FastPWM.h"
#include "MODSERIAL.h"
#define MEAS_DELAY 60 // measurement delay after turning on FET (us)
#define LOG_INTERVAL 5000 // log file interval (ms)
#define START_DELAY 1000 // pause for startup (ms)
#define N_STEPS 1000
#define BUFFER_SIZE 4096
MODSERIAL pc(PA_9, PA_10, BUFFER_SIZE); //mcu TX, RX, BUFFER_SIZE byte TX and RX buffers
ADS8568_ADC adc(PB_15, PB_14, PB_13, PB_12, PC_15, PC_0, PC_1, PC_2, PC_3);
I2C i2c(PB_7, PB_8); //SDA, SCL
Timer timer;
DigitalIn adc_busy(PA_8); //Busy interrupt sig#
//Heater Control
FastPWM drive_1(PC_9);
FastPWM drive_2(PC_8);
FastPWM guard_1(PC_7);
FastPWM guard_2(PC_6);
//Indicator LEDs
DigitalOut hb_led(PC_13); //Green
DigitalOut led_0(PC_4); //Red
DigitalOut led_1(PC_5); //Green
//User buttons
DigitalIn user_0(PB_0);
DigitalIn user_1(PB_1);
BusOut converts(PC_0, PC_1, PC_2, PC_3);
int main() {
int eTime;
int v[2], curr[2];
double r[2];
int i_port[2] = {0,2};
int v_port[2] = {1,3};
pc.baud(115200);
adc.init();
// Initialsation - all heaters off
drive_1.prescaler(1);
drive_1.period_ticks(1000);
drive_1.pulsewidth_ticks(0);
guard_1.prescaler(1);
guard_1.period_ticks(1000);
guard_1.pulsewidth_ticks(0);
drive_2.prescaler(1);
drive_2.period_ticks(1000);
drive_2.pulsewidth_ticks(0);
guard_2.prescaler(1);
guard_2.period_ticks(1000);
guard_2.pulsewidth_ticks(0);
pc.printf("iStep, eTime, I1, V1, R1, I2, V2, R2\n");
wait_ms(START_DELAY);
timer.start();
for (int iStep=0; iStep<N_STEPS; iStep++) {
eTime = timer.read_ms();
pc.printf("%5d, %10d,", iStep, eTime);
for (int iHeater=0; iHeater <2; iHeater++) {
// measure heater
if (iHeater==0)
drive_1.pulsewidth_ticks(1000);
else
drive_2.pulsewidth_ticks(1000);
wait_us(MEAS_DELAY);
//Start ADC conversion
adc.start_conversion(15);
//Wait until ADC is free
while(adc_busy == 1) {
wait_us(1);
}
//Turn off heater
if (iHeater==0)
drive_1.pulsewidth_ticks(0);
else
drive_2.pulsewidth_ticks(0);
wait_us(MEAS_DELAY);
//Get ADC values
adc.read_channels();
curr[iHeater] = adc.read_channel_result(i_port[iHeater]);
v[iHeater] = adc.read_channel_result(v_port[iHeater]);
r[iHeater] = (float)v[iHeater]/(float)curr[iHeater];
//Write output for iHeater
pc.printf("%10d, %10d, %10.6f", curr[iHeater], v[iHeater], r[iHeater]);
}
pc.printf("\n");
wait_ms(LOG_INTERVAL);
}
}