projects:daughterboard_code
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
projects:daughterboard_code [2008/02/27 00:25] – laurenceb | projects:daughterboard_code [2008/07/19 23:33] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 3: | Line 3: | ||
#include " | #include " | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
int get_char0(FILE* stream) | int get_char0(FILE* stream) | ||
+ | |||
+ | |||
{ | { | ||
+ | |||
+ | |||
int c=-1; | int c=-1; | ||
+ | |||
+ | |||
| | ||
+ | |||
+ | |||
| | ||
+ | |||
+ | |||
| | ||
+ | |||
+ | |||
} | } | ||
Line 25: | Line 45: | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
int put_char0(char c, FILE *stream) | int put_char0(char c, FILE *stream) | ||
+ | |||
+ | |||
{ | { | ||
+ | |||
+ | |||
| | ||
+ | |||
+ | |||
UDR0 = c; | UDR0 = c; | ||
+ | |||
+ | |||
| | ||
+ | |||
+ | |||
/* | /* | ||
+ | |||
+ | |||
| | ||
+ | |||
+ | |||
| | ||
+ | |||
+ | |||
return 0; | return 0; | ||
+ | |||
+ | |||
} | } | ||
+ | |||
+ | |||
else | else | ||
+ | |||
+ | |||
{ | { | ||
+ | |||
+ | |||
// | // | ||
+ | |||
+ | |||
if(uartAddToTxBuffer(c)) | if(uartAddToTxBuffer(c)) | ||
+ | |||
+ | |||
{return 0;} | {return 0;} | ||
+ | |||
+ | |||
else | else | ||
+ | |||
+ | |||
{return -1;} | {return -1;} | ||
+ | |||
+ | |||
}*/ | }*/ | ||
+ | |||
+ | |||
} | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | int pseudoscanf() | ||
+ | |||
+ | { | ||
+ | |||
+ | |||
+ | |||
+ | char s[20]; | ||
+ | |||
+ | |||
+ | |||
+ | int d; | ||
+ | |||
+ | |||
+ | |||
+ | fgets(s, | ||
+ | |||
+ | | ||
+ | |||
+ | sscanf(s," | ||
+ | |||
+ | |||
+ | |||
+ | return d; | ||
+ | |||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | |||
float getHVvalue(int n) | float getHVvalue(int n) | ||
+ | |||
+ | |||
{ | { | ||
+ | |||
| | ||
+ | |||
{ | { | ||
- | if (n==1) n=0; //corrects mistake on the board | ||
- | | + | if (n==1) n=0; //corrects mistake on the board |
+ | |||
+ | |||
+ | |||
+ | return hvfactor*((float)a2dConvert10bit(n)-520.0); | ||
+ | |||
+ | |||
} | } | ||
+ | |||
else | else | ||
+ | |||
{ | { | ||
- | | + | |
+ | | ||
} | } | ||
+ | |||
} | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
void overflow(void) | void overflow(void) | ||
+ | |||
+ | |||
{ | { | ||
+ | |||
+ | |||
float delta=i_term*(p_setpoint-pressuredifference()); | float delta=i_term*(p_setpoint-pressuredifference()); | ||
+ | |||
+ | |||
if(position> | if(position> | ||
- | | + | |
+ | |||
+ | | ||
+ | |||
+ | |||
if (position> | if (position> | ||
- | timer1PWMASet((u16)position); | + | |
+ | |||
+ | timer1PWMASet((u16)position); | ||
+ | |||
+ | |||
} | } | ||
+ | |||
+ | void temperatureprint() | ||
+ | { | ||
+ | int temp=a2dConvert10bit(temppin); | ||
+ | |||
+ | printf(" | ||
+ | |||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | |||
float pressuredifference() | float pressuredifference() | ||
+ | |||
+ | |||
{ | { | ||
- | return (float)pressurefactor*((float)a2dConvert10bit(pressurepin)-pressurenull); | + | |
+ | |||
+ | return (float)pressurefactor*((float)a2dConvert10bit(pressurepin)-pressurenull); | ||
+ | |||
+ | |||
} | } | ||
+ | |||
- | void HVenable(void) | + | |
+ | void set_control_loop(d) | ||
{ | { | ||
- | int n; | + | if(d!=0) |
+ | |||
+ | { | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | } | ||
+ | |||
+ | else | ||
+ | |||
+ | { | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | void HVenable(int n) | ||
+ | |||
+ | |||
+ | |||
+ | { | ||
+ | |||
+ | |||
- | scanf(" | ||
if (n<4 && n>-1) | if (n<4 && n>-1) | ||
+ | |||
+ | |||
{ | { | ||
- | PORTD|=0b00011100; | + | |
- | if (n) PORTD&=~(1<< | + | |
- | printf(" | + | |
+ | |||
+ | if (n) PORTD& | ||
+ | |||
+ | |||
+ | |||
+ | printf(" | ||
+ | |||
+ | |||
} | } | ||
+ | |||
+ | |||
else printf(" | else printf(" | ||
+ | |||
+ | |||
} | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
void nullset(void) | void nullset(void) | ||
+ | |||
+ | |||
{ | { | ||
+ | |||
+ | |||
u08 n; | u08 n; | ||
+ | |||
+ | |||
u32 s=0; | u32 s=0; | ||
+ | |||
+ | |||
for(n=0; | for(n=0; | ||
+ | |||
+ | |||
{ | { | ||
- | s+=a2dConvert10bit(pressurepin); | + | |
- | _delay_ms(20); | + | |
+ | |||
+ | |||
+ | |||
+ | _delay_ms(7); | ||
+ | |||
+ | |||
} | } | ||
+ | |||
+ | |||
pressurenull=(float)s; | pressurenull=(float)s; | ||
+ | |||
+ | |||
pressurenull/ | pressurenull/ | ||
+ | |||
+ | |||
printf(" | printf(" | ||
+ | |||
+ | |||
} | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
int main(void) | int main(void) | ||
+ | |||
+ | |||
{ | { | ||
- | int nodata=0; | + | |
+ | |||
+ | //int nodata=0; | ||
+ | |||
+ | |||
int d; | int d; | ||
+ | |||
+ | |||
signed char c; | signed char c; | ||
- | char pump; | + | |
+ | |||
DDRD=0b00011100; | DDRD=0b00011100; | ||
+ | |||
+ | |||
PORTD=0b00011100; | PORTD=0b00011100; | ||
+ | |||
+ | |||
DDRB=0b00000010; | DDRB=0b00000010; | ||
+ | |||
+ | |||
PORTB=0x00; | PORTB=0x00; | ||
+ | |||
+ | |||
uartInit(); | uartInit(); | ||
+ | |||
+ | |||
uartSetBaudRate(19200); | uartSetBaudRate(19200); | ||
+ | |||
+ | |||
FILE mystdio0 = FDEV_SETUP_STREAM(put_char0, | FILE mystdio0 = FDEV_SETUP_STREAM(put_char0, | ||
+ | |||
+ | |||
stdout = & | stdout = & | ||
+ | |||
+ | |||
stdin = & | stdin = & | ||
+ | |||
+ | |||
sei(); | sei(); | ||
+ | |||
+ | |||
//while(1) | //while(1) | ||
+ | |||
+ | |||
//{ | //{ | ||
+ | |||
+ | |||
// | // | ||
+ | |||
+ | |||
// | // | ||
+ | |||
+ | |||
//} | //} | ||
+ | |||
+ | |||
timerInit(); | timerInit(); | ||
+ | |||
+ | |||
timer1SetPrescaler(TIMER_CLK_DIV1); | timer1SetPrescaler(TIMER_CLK_DIV1); | ||
+ | |||
+ | |||
timer1PWMInitICR(4095); | timer1PWMInitICR(4095); | ||
- | timer1PWMAOn(); | + | |
+ | |||
+ | //timer1PWMAOn(); | ||
+ | |||
+ | |||
timer1PWMASet(0); | timer1PWMASet(0); | ||
- | timerAttach(1, | + | |
a2dInit(); | a2dInit(); | ||
+ | |||
+ | |||
puts(" | puts(" | ||
+ | |||
+ | |||
nullset(); | nullset(); | ||
+ | |||
+ | |||
while(1) | while(1) | ||
+ | |||
+ | |||
{ | { | ||
+ | |||
+ | |||
| | ||
+ | |||
// | // | ||
+ | |||
+ | |||
// | // | ||
+ | |||
+ | |||
//{ | //{ | ||
+ | |||
+ | |||
// | // | ||
+ | |||
+ | |||
switch(c) | switch(c) | ||
+ | |||
+ | |||
{ | { | ||
+ | |||
+ | |||
case ' | case ' | ||
- | scanf(" | + | |
- | printf(" | + | printf(" |
+ | |||
+ | |||
break; | break; | ||
+ | |||
+ | |||
case ' | case ' | ||
- | | + | |
+ | |||
+ | | ||
+ | |||
+ | |||
break; | break; | ||
+ | |||
+ | |||
case ' | case ' | ||
- | HVenable(); | ||
- | break; | ||
- | | + | |
- | scanf(" | ||
- | if(d!=0) | ||
- | { | ||
- | | ||
- | | ||
- | | ||
- | } | ||
- | else | ||
- | { | ||
- | | ||
- | | ||
- | } | ||
- | break; | ||
- | case ' | ||
- | | + | |
- | i_term=(float)d/ | + | |
- | | + | |
- | case ' | + | |
- | + | ||
- | printf(" | + | |
break; | break; | ||
- | case ' | + | |
- | | + | |
- | break; | + | |
- | | + | |
- | if (c!=-1) printf(" | + | |
- | nodata=0; | + | |
- | } | + | //set a differential target - note in units of % of full range |
- | //} | + | set_control_loop(d); |
- | / | ||
- | { | ||
- | | + | |
- | for(d=0; | + | |
- | | + | |
- | // | + | |
- | }*/ | + | d=pseudoscanf(); |
- | } | + | |
- | return | + | i_term=(float)d/ |
- | } | + | |
+ | break; | ||
- | </ | ||
- | ==== Main.h ==== | + | case ' |
- | <code c> | + | |
- | #include < | + | |
- | #include <stdio.h> | + | d=(int)(p_setpoint*1000.0); |
- | #include <avr/io.h> | + | set_control_loop(0); |
- | # | + | for(c=0;c<100;c++) _delay_ms(10); |
- | #include < | + | nullset(); |
- | #include < | + | set_control_loop(d); |
+ | break; | ||
- | #include " | ||
- | #include " | + | case ' |
- | #include " | + | temperatureprint(); |
- | #include " | + | break; |
- | #include " | + | |
- | #include " | + | case ' |
- | #include " | + | |
+ | printf(" | ||
+ | |||
+ | break; | ||
+ | |||
- | #define pressurepin 5 | + | //default: |
- | #define ionpin | + | //if (c!=-1) printf(" |
- | #define batpin 4 | + | //nodata=0; |
+ | |||
+ | } | ||
- | #define hvfactor 12.27 //v | + | |
- | #define pressurefactor -0.0002 | + | //} |
- | #define batteryfactor 15.0/ | + | |
- | #define ionfactor 5.0/1024.0 | + | /*else |
- | #define defaultiterm 50 | + | |
- | #define setpointdefault 0 | + | { |
+ | |||
+ | nodata++; | ||
- | FILE* stream; | + | |
- | int get_char0(FILE* stream); | + | for(d=0;d< |
- | int put_char0(char c,FILE* stream); | + | |
- | void nullset(void); | + | { _delay_ms(10);} |
- | void HVenable(void); | + | |
- | float getHVvalue(int n); | + | //printf(" |
- | float pressuredifference(); | + | |
+ | }*/ | ||
+ | |||
- | volatile float pressurenull; | + | } |
- | volatile float p_setpoint=setpointdefault; | + | |
- | volatile float position; | + | return 0; |
- | volatile float i_term=defaultiterm/ | + | |
+ | } | ||
+ | |||
</ | </ | ||
projects/daughterboard_code.1204071917.txt.gz · Last modified: 2008/07/19 23:31 (external edit)