summaryrefslogtreecommitdiff
path: root/ferment.c
diff options
context:
space:
mode:
Diffstat (limited to 'ferment.c')
-rw-r--r--ferment.c74
1 files changed, 66 insertions, 8 deletions
diff --git a/ferment.c b/ferment.c
index aba1916..b0d9a65 100644
--- a/ferment.c
+++ b/ferment.c
@@ -1,4 +1,4 @@
-#define F_CPU 1000000UL
+//#define F_CPU 7372800UL
#include <stdint.h>
#include <string.h>
#include <avr/io.h>
@@ -8,6 +8,10 @@
#include <avr/eeprom.h>
#include <util/delay.h>
+#include "serial.h"
+#include "stdio.h"
+#include "pid.h"
+
/* port D
*
* 4 1- (NMOS, inverted)
@@ -22,6 +26,12 @@
#define D_2_MINUS (1 << 6)
#define D_2_PLUS (1 << 7)
+const int target_temp = 30;
+volatile uint16_t adc_res;
+volatile uint8_t adc_new;
+
+struct PID_DATA pid_data;
+
/* Turns the H-bridge off, putting the output
* into high impedance mode. */
static void bridge_off(void)
@@ -55,15 +65,63 @@ static void bridge_init(void)
DDRD |= D_1_PLUS | D_1_MINUS | D_2_PLUS | D_2_MINUS;
}
-int main()
+/* initializes ADC */
+static void adc_init(void)
+{
+ adc_new = 0;
+ ADMUX = (1 << REFS1) | (1 << REFS0);
+ /* select channel x (0 for now) */
+ ADMUX |= 0x0;
+ ADCSRA = (1 << ADEN) | (1 << ADIE) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
+}
+
+/* reads ADC */
+static void start_temp_conv(void)
+{
+ ADCSRA |= (1<<ADSC);
+}
+
+/* ADC completion interrupt */
+ISR(ADC_vect)
+{
+ adc_res = ADCW;
+ adc_new = 1;
+}
+
+/* ADC results to temperature conversion routine */
+int adc_to_centigrade(uint16_t adc_val) {
+ return 0;
+}
+
+/* Initializes TIMER1 */
+static void timer_init(void)
+{
+ TCCR1B = (1 << WGM12) | (1 << CS11);
+ OCR1A = 1000;
+ TIMSK|=(1<<OCIE1A);
+}
+
+ISR(TIMER1_COMPA_vect)
+{
+ serial_send("*\n", 2, 1);
+ start_temp_conv();
+}
+
+int main(void)
{
+ char params[12];
+
+ serial_init();
+ adc_init();
+ timer_init();
bridge_init();
- /* simple demo, just flips polarity every now and then */
+
+ sei();
+
while (1) {
- bridge_on_a();
- _delay_ms(200);
- bridge_on_b();
- _delay_ms(200);
+ sprintf(params, "%u\n", adc_res);
+ serial_send(params, strlen(params), 1);
+ //bridge_on_a();
+ _delay_ms(1000);
}
}
-