//****************************************************************************************** // AVR Sample Program (ATmega1284) // Project : // Program Name : // Programer : // Create date : Version 1.0 H23.02.01 // History : // Laungage : WinAVR GCC //****************************************************************************************** // (1)Description // //****************************************************************************************** #include #include void init_adc(void); void get_adc(unsigned int *); void inituart(void); void getuart(char *); void putuart(char ); void putuarts(char *); void wat(void); int main(void){ unsigned int adc; unsigned long int adc_l; unsigned int lp; char tmp_c; char out_str[10]; // 1.初期設定 DDRA = 0b00000000; DDRB = 0b00000000; DDRC = 0b00000000; DDRD = 0b00000000; // 2.UARTの初期化 inituart(); putuarts("ATMAGA1284P Connected OK>"); // 3.メインプログラム while(1){ // (1)電圧を得る get_adc(&adc); // (2)数値を変換する adc_l = adc; adc_l = adc_l * (unsigned long int)500 / (unsigned long int)1023; adc = adc_l; // (3)文字列に変換する for(lp=0;lp<5;lp++) out_str[lp]=0x00; sprintf(out_str,"%d",adc*10); // (4)タイトルを出力する putuarts(" Volt[mV]= "); // (5)データを出力する for(lp=0;lp<5;lp++){ if(out_str[lp]<'0'|| out_str[lp]>'9'){ tmp_c = ' '; putuart(tmp_c); }else{ putuart(out_str[lp]); } } // (6)少し待つ wat(); } } //****************************************************************************************** // Function Name : init_adc // Title : A/D-Converterの初期化 // Input : // Output : //****************************************************************************************** void init_adc(void) { ADMUX = (0< UBRR=Fck/(16*BAUD) - 1 // 8MHz,9600BAUDの時, UBRR=8M/(16*9600)-1=>51.1(Dec) ubrr = 51; UBRR0H = (unsigned char)(ubrr>>8); // 上位8bit UBRR0L = (unsigned char)ubrr; // 下位8bit } //****************************************************************************************** // Function Name : getuart // Title : UARTからデータを得る // Input : // Output : // Description : //****************************************************************************************** void getuart(char *io_char) { // (1)シリアルデータの入力を待つ loop_until_bit_is_set(UCSR0A, RXC0); // (2)シリアルデータを設定 *io_char = UDR0; } //**************************************************************************** // Function Name : putuarts // Title : Put Strings // Input : // Output : // Description : //**************************************************************************** void putuarts(char in_str[0] ) { unsigned int lp=0; while(in_str[lp]!=0x00){ putuart(in_str[lp]); lp++; } } //****************************************************************************************** // Function Name : putuart // Title : UARTにデータを送信 // Input : // Output : // Description : //****************************************************************************************** void putuart(char io_char) { // (1)送信バッファ空き待機 while(!(UCSR0A & (1<