Rev 1145 Rev 1146
1 //***************************************************************************** 1 //*****************************************************************************
2 // File Name : a2dtest.c 2 // File Name : a2dtest.c
3 // 3 //
4 // Title : example usage of some avr library functions 4 // Title : example usage of some avr library functions
5 // Revision : 1.0 5 // Revision : 1.0
6 // Notes : 6 // Notes :
7 // Target MCU : Atmel AVR series 7 // Target MCU : Atmel AVR series
8 // Editor Tabs : 4 8 // Editor Tabs : 4
9 // 9 //
10 // Revision History: 10 // Revision History:
11 // When Who Description of change 11 // When Who Description of change
12 // ----------- ----------- ----------------------- 12 // ----------- ----------- -----------------------
13 // 20-Oct-2002 pstang Created the program 13 // 20-Oct-2002 pstang Created the program
14 //***************************************************************************** 14 //*****************************************************************************
15 15
16 //----- Include Files --------------------------------------------------------- 16 //----- Include Files ---------------------------------------------------------
17 #include <avr/io.h> // include I/O definitions (port names, pin names, etc) 17 #include <avr/io.h> // include I/O definitions (port names, pin names, etc)
18 #include <avr/interrupt.h> // include interrupt support 18 #include <avr/interrupt.h> // include interrupt support
-   19 #include <string.h>
19   20  
20 #include "global.h" // include our global settings 21 #include "global.h" // include our global settings
21 #include "uart.h" // include uart function library 22 #include "uart.h" // include uart function library
22 #include "rprintf.h" // include printf function library 23 #include "rprintf.h" // include printf function library
23 #include "timer.h" // include timer function library (timing, PWM, etc) 24 #include "timer.h" // include timer function library (timing, PWM, etc)
24 #include "a2d.h" // include A/D converter function library 25 #include "a2d.h" // include A/D converter function library
25 #include "vt100.h" // include VT100 terminal support 26 #include "vt100.h" // include VT100 terminal support
26   27  
27 //----- Begin Code ------------------------------------------------------------ 28 //----- Begin Code ------------------------------------------------------------
28 int main(void) 29 int main(void)
29 { 30 {
30 u16 a=0; 31 u16 a=0;
31 u08 i=0; 32 u08 i=0;
32   33  
33 // initialize our libraries 34 // initialize our libraries
34 // initialize the UART (serial port) 35 // initialize the UART (serial port)
35 uartInit(); 36 uartInit();
36 // make all rprintf statements use uart for output 37 // make all rprintf statements use uart for output
37 rprintfInit(uartSendByte); 38 rprintfInit(uartSendByte);
38 // initialize the timer system 39 // initialize the timer system
39 timerInit(); 40 timerInit();
40 // turn on and initialize A/D converter 41 // turn on and initialize A/D converter
41 a2dInit(); 42 a2dInit();
42   43  
43 // print a little intro message so we know things are working 44 // print a little intro message so we know things are working
44 /* vt100ClearScreen(); 45 /* vt100ClearScreen();
45 vt100SetCursorPos(1,1); 46 vt100SetCursorPos(1,1);
46 rprintf("Welcome to the a2d test!\r\n");*/ 47 rprintf("Welcome to the a2d test!\r\n");*/
47 48
48 // configure a2d port (PORTA) as input 49 // configure a2d port (PORTA) as input
49 // so we can receive analog signals 50 // so we can receive analog signals
50 DDRC = 0x00; 51 DDRC = 0x00;
51 // make sure pull-up resistors are turned off 52 // make sure pull-up resistors are turned off
52 PORTC = 0x00; 53 PORTC = 0x00;
53   54  
54 // set the a2d prescaler (clock division ratio) 55 // set the a2d prescaler (clock division ratio)
55 // - a lower prescale setting will make the a2d converter go faster 56 // - a lower prescale setting will make the a2d converter go faster
56 // - a higher setting will make it go slower but the measurements 57 // - a higher setting will make it go slower but the measurements
57 // will be more accurate 58 // will be more accurate
58 // - other allowed prescale values can be found in a2d.h 59 // - other allowed prescale values can be found in a2d.h
59 a2dSetPrescaler(ADC_PRESCALE_DIV32); 60 a2dSetPrescaler(ADC_PRESCALE_DIV32);
60   61  
61 // set the a2d reference 62 // set the a2d reference
62 // - the reference is the voltage against which a2d measurements are made 63 // - the reference is the voltage against which a2d measurements are made
63 // - other allowed reference values can be found in a2d.h 64 // - other allowed reference values can be found in a2d.h
64 a2dSetReference(ADC_REFERENCE_AVCC); 65 a2dSetReference(ADC_REFERENCE_AVCC);
65   66  
66 // use a2dConvert8bit(channel#) to get an 8bit a2d reading 67 // use a2dConvert8bit(channel#) to get an 8bit a2d reading
67 // use a2dConvert10bit(channel#) to get a 10bit a2d reading 68 // use a2dConvert10bit(channel#) to get a 10bit a2d reading
68   69  
69 while(1) 70 while(1)
70 { 71 {
71 u08 c=0; 72 u08 c=0;
72 u08 n; 73 u08 n,i;
-   74 char radiace[10];
-   75
73 char radka[100]; 76 char radka[201];
74   77  
75 for(n=0;n<100;n++) radka[n]=0; 78 for(n=0;n<=100;n++) radka[n]=0; // vynuluj bufferovaci pole
-   79 for(n=0;n<10;n++) radiace[n]=0; // vynuluj bufferovaci pole
76   80  
77 n=0; 81 n=0;
78 while(uartReceiveByte(&c)) 82 while(1) // pockej na $ kterym zacina NMEA radka
79 { 83 {
80 radka[n]=c; 84 uartReceiveByte(&c);
81 n++; 85 if(c == '$') break;
82 } 86 }
83   87  
-   88 for(i=0;i<100;i++) // nacti maximalne 100 znaku do bufferu
84 n=0; 89 {
85 while (0!=radka[n]) 90 radka[n]=c;
86 { -  
-   91 if(c == '\n') break; // kdyz narazis na konec radku zastav nacitani
87 uartSendByte(radka[n]); 92 uartReceiveByte(&c);
88 n++; 93 n++;
89 timerPause(31); -  
90 } 94 }
91   95  
92 /* // sample all a2d channels and print them to the terminal 96 radka[n]=0; // naztav na konec retezce pro zpracovani pomoci strcat
-   97  
-   98  
93 vt100SetCursorPos(2,1); 99 itoa(a2dConvert10bit(2),&radiace,10); //a2dConvert8bit(1)
94 for(i=0; i<6; i++) 100 if(n != 0)
95 { 101 {
96 rprintf("Channel %d: %d \r\n", i, a2dConvert8bit(i)); 102 strcat(radka, radiace);
97 timerPause(1000); 103 strcat(radka,"\r");
98 } 104 }
-   105 n=0;
99 // print the sample number so far 106 uartFlushReceiveBuffer();
-   107  
-   108 while (0!=radka[n])
-   109 {
100 rprintf("Sample # : %d \r\n", a++);*/ 110 uartSendByte(radka[n]);
-   111 n++;
-   112 timerPause(35);
-   113 }
-   114  
101 } 115 }
102 116
103 return 0; 117 return 0;
104 } 118 }