no functional change
[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 <avr/pgmspace.h>
16 #include <inttypes.h>
17 #define F_CPU 8000000UL  // 8 MHz
18 #include <util/delay.h>
19 #include "dac.h"
20 #include "lcd.h"
21 #include "kbd.h"
22 #include <stdlib.h>
23 #include <string.h> 
24
25 //debug LED:
26 // set output to VCC, red LED off
27 #define LEDOFF PORTD|=(1<<PORTD0)
28 // set output to GND, red LED on
29 #define LEDON PORTD&=~(1<<PORTD0)
30 // to test the state of the LED
31 #define LEDISOFF PORTD&(1<<PORTD0)
32
33 void delay_ms(uint16_t ms)
34 /* delay for a minimum of <ms> */
35 {
36         // we use a calibrated macro. This is more
37         // accurate and not so much compiler dependent
38         // as self made code.
39         while(ms){
40                 _delay_ms(0.96);
41                 ms--;
42         }
43 }
44
45
46 int main(void)
47 {
48         int16_t dac_val=511;
49         int16_t cnt;
50         int8_t dac_dir=0;
51         char out_buf[21];
52         DDRD|= (1<<DDD0); // LED, enable PD0, LED as output
53         LEDOFF;
54         init_dac();
55         lcd_init();
56         lcd_clrscr();
57         lcd_puts("use U+/U-");
58         lcd_gotoxy(0,1);
59         lcd_puts("and store");
60         init_kbd();
61         delay_ms(500);
62         delay_ms(500);
63         lcd_clrscr();
64         lcd_puts_p(PSTR("pause"));
65         while (1) {
66                 if (dac_dir==1){
67                         dac_val++;
68                 }
69                 if (dac_dir==-1){
70                         dac_val--;
71                 }
72                 if (dac_val>0xFFF){
73                         dac_val=0xFFF; //max, 13bit
74                 }
75                 if (dac_val<0){
76                         dac_val=0;
77                 }
78                 lcd_gotoxy(0,1);
79                 itoa(dac_val,out_buf,10);
80                 lcd_puts(out_buf);
81                 lcd_puts("    ");
82                 dac(dac_val);
83                 cnt=1;
84                 check_u_button(&cnt);
85                 if (cnt>1){
86                         lcd_clrscr();
87                         // u+ pressed
88                         lcd_puts_p(PSTR("up"));
89                         dac_dir=1;
90                         LEDOFF;
91                 }
92                 if (cnt<1){
93                         lcd_clrscr();
94                         // u- pressed
95                         lcd_puts_p(PSTR("down"));
96                         dac_dir=-1;
97                         LEDON;
98                 }
99                 if (check_store_button()){
100                         lcd_clrscr();
101                         lcd_puts_p(PSTR("pause"));
102                         dac_dir=0;
103                 }
104                 delay_ms(100);
105                 cnt=1;
106                 check_u_button(&cnt);
107                 if (cnt>1){
108                         lcd_clrscr();
109                         // u+ pressed
110                         lcd_puts_p(PSTR("up"));
111                         dac_dir=1;
112                         LEDOFF;
113                 }
114                 if (cnt<1){
115                         lcd_clrscr();
116                         // u- pressed
117                         lcd_puts_p(PSTR("down"));
118                         dac_dir=-1;
119                         LEDON;
120                 }
121                 if (check_store_button()){
122                         lcd_clrscr();
123                         lcd_puts_p(PSTR("pause"));
124                         dac_dir=0;
125                 }
126                 delay_ms(100);
127         }
128         return(0);
129 }