0.6.0 this is the first version for the new hardware
[digitaldcpower] / test_dac.c
1 /*********************************************
2 * vim: set sw=8 ts=8 si :
3 * Author: Guido Socher, Copyright: GPL 
4 * This is a test program which will write "LCD works"
5 * on the LCD display. 
6 * This program is also used to test the keypad. It
7 * displays the button last pressed.
8
9 * See http://www.tuxgraphics.org/electronics/
10
11 * Chip type           : ATMEGA8
12 * Clock frequency     : Internal clock 8 Mhz 
13 *********************************************/
14 #include <avr/io.h>
15 #include <inttypes.h>
16 #define F_CPU 8000000UL  // 8 MHz
17 #include <util/delay.h>
18 #include "dac.h"
19 #include "lcd.h"
20 #include "kbd.h"
21 #include <stdlib.h>
22 #include <string.h> 
23
24 //debug LED:
25 // set output to VCC, red LED off
26 #define LEDOFF PORTD|=(1<<PORTD0)
27 // set output to GND, red LED on
28 #define LEDON PORTD&=~(1<<PORTD0)
29 // to test the state of the LED
30 #define LEDISOFF PORTD&(1<<PORTD0)
31
32 void delay_ms(uint16_t ms)
33 /* delay for a minimum of <ms> */
34 {
35         // we use a calibrated macro. This is more
36         // accurate and not so much compiler dependent
37         // as self made code.
38         while(ms){
39                 _delay_ms(0.96);
40                 ms--;
41         }
42 }
43
44
45 int main(void)
46 {
47         int16_t dac_val=511;
48         int16_t cnt;
49         int8_t dac_dir=0;
50         char out_buf[21];
51         DDRD|= (1<<DDD0); // LED, enable PD0, LED as output
52         LEDOFF;
53         init_dac();
54         lcd_init();
55         lcd_clrscr();
56         lcd_puts("use U+/U-");
57         lcd_gotoxy(0,1);
58         lcd_puts("and store");
59         init_kbd();
60         delay_ms(500);
61         delay_ms(500);
62         lcd_clrscr();
63         lcd_puts_P("pause");
64         while (1) {
65                 if (dac_dir==1){
66                         dac_val++;
67                 }
68                 if (dac_dir==-1){
69                         dac_val--;
70                 }
71                 if (dac_val>0xFFF){
72                         dac_val=0xFFF; //max, 13bit
73                 }
74                 if (dac_val<0){
75                         dac_val=0;
76                 }
77                 lcd_gotoxy(0,1);
78                 itoa(dac_val,out_buf,10);
79                 lcd_puts(out_buf);
80                 lcd_puts("    ");
81                 dac(dac_val);
82                 cnt=1;
83                 check_u_button(&cnt);
84                 if (cnt>1){
85                         lcd_clrscr();
86                         // u+ pressed
87                         lcd_puts_P("up");
88                         dac_dir=1;
89                         LEDOFF;
90                 }
91                 if (cnt<1){
92                         lcd_clrscr();
93                         // u- pressed
94                         lcd_puts_P("down");
95                         dac_dir=-1;
96                         LEDON;
97                 }
98                 if (check_store_button()){
99                         lcd_clrscr();
100                         lcd_puts_P("pause");
101                         dac_dir=0;
102                 }
103                 delay_ms(100);
104                 cnt=1;
105                 check_u_button(&cnt);
106                 if (cnt>1){
107                         lcd_clrscr();
108                         // u+ pressed
109                         lcd_puts_P("up");
110                         dac_dir=1;
111                         LEDOFF;
112                 }
113                 if (cnt<1){
114                         lcd_clrscr();
115                         // u- pressed
116                         lcd_puts_P("down");
117                         dac_dir=-1;
118                         LEDON;
119                 }
120                 if (check_store_button()){
121                         lcd_clrscr();
122                         lcd_puts_P("pause");
123                         dac_dir=0;
124                 }
125                 delay_ms(100);
126         }
127         return(0);
128 }