/*Responsibilities: *Measure Pressure of tube *Electrode Activation/Reading *Transfer data via serial port to PC *End testing when pressure gets to 110 psi (?) - signal end to PC *Needs: *Testing: take pressure and voltage readings thru electrode1. * When there is a non-infinte resistance between electode1, * keep measureing between elctrode1, and start measuring between electrode2 */ #include #include #include #include #include // for sine #include #include "uart.h" FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW); //don't normally use these, but they are in some of our lab 1-5 code #define begin { #define end } #define countMS 125 //ticks/mSec #define t1 100 #define t2 100 #define t3 100 #define t4 100 #define t5 100 #define t6 100 // Function declarations void initialize(void); //all the usual mcu stuff void task1(void); //measure between pair1 void task2(void); //measure between pair2 void task3(void); //measure between pair3 void task4(void); //measure between pair4 void task5(void); //measure between pair5 void task6(void); //measure between pair6 // The DDS variables volatile unsigned long accumulator1; volatile unsigned char highbyte1; volatile unsigned long increment1; volatile signed char temp; signed char sineTable[256] ; volatile char count; //for establishing time base volatile unsigned char sineFlag; //message to output a wave- aka in impedance test mode //Pressure Variables char Ain; //Raw input from ADC int press; //pressure (in kPa) rounded to integer //Impedance Variables char volatile flag1, flag2, flag3, flag4, flag5; //electrode 1, 2, etc has seen tissue long summer; //for averaging char vol100, vol500, vol1k; //voltage (digital) @ 100, 500, 1kHz char phase100, phase500, phase1k; //phase (digital) @ 100, 500, 1kHz //timeout counter for tasks volatile unsigned char time1, time2, time3, time4, time5, time6; //ISR for timing //************************************ //timer0 overflow ISR ISR (TIMER0_COMPA_vect) begin //generate sine wave if (sineFlag==1){ accumulator1 = accumulator1 + increment1; } highbyte1 = (char)(accumulator1 >> 24) ; PORTB = 128+ sineTable[highbyte1]; //generate time base //125 counts is about 1 mSec count--; if (0 == count) begin count=countMS; if (time1>0) time1--;//in mSec if (time2>0) time2--; if (time3>0) time3--; if (time4>0) time4--; if (time5>0) time5--; if (time6>0) time6--; end end //main function: scheduling loop int main(void){ int i; //initialize sine table for (i=0; i<256; i++) begin sineTable[i] = (char)(127.0 * sin(6.283*((float)i)/256.0)) ; end //usual MCU/uart setup. initialize(); //sheduling loop while(1){ if (time1==0){ time1=t1; task1();} if (time2==0){ time2=t2; task2();} if (time3==0){ time3=t3; task3();} if (time4==0){ time4=t4; task4();} if (time5==0){ time5=t5; task5();} if (time6==0){ time6=t6; task6();} } } //Task1: Check between first electrode pair void task1(void) { fprintf(stdout, "1\r"); //check pressure. //sensor is sensitive for 38.26 mV/kPa // each increment in ADC (5V/256) = 0.01953125V // |->increment of 0x02 ~= 1kPa // |->for every 20 kPa, need to add 1 // |->0kPa = min ~=.2V = 0x0a (actually d10.24) =4.64V --> // |->Max = min + 4.4V = min + 0xE1 115 // |-> 0kPa = 4.64V (TODO: on stk) --> 239 // |-> Max = 4.64-4.4 = .24 //PORTA.0 has pressure sensor ADMUX = (1<