arm-mohsen-avr
03-01-2012, 00:24
با سلام
وقتی که از ADC مقادیر رو می خونم اون رو در یک متغیر float قرار می دم و بعد با استفاده از تابع sprintf مقادی رو روی lcd نماش می دهم ولی اعشاری را نشون نمیده...به صورت 212.00000
اگه میشه راهنمایی کنید. در ضمن با تغییر متغییر به double بازهم تغییری در خروجی ایجاد نشد.میکرو هم xmega32a4
این هم برنامه :
#include <avr/io.h>
#include "lcd.h"
#include <avr/delay.h>
#include <stdio.h>
#include "avr_compiler.h"
#include "adc_driver.h"
#define ADC_INPUT ADC_CH_MUXPOS_PIN1_gc
int main(void)
{
float ADC_result;
char lcd_buff[20];
lcd_init(LCD_DISP_ON);
ADC_CalibrationValues_Load(&ADCA);
ADC_ConvMode_and_Resolution_Config(&ADCA, ADC_ConvMode_Unsigned, ADC_RESOLUTION_12BIT_gc);
ADC_Reference_Config(&ADCA, ADC_REFSEL_VCC_gc);
ADC_Prescaler_Config(&ADCA, ADC_PRESCALER_DIV8_gc);
ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH1,ADC_CH_INPUTMODE_SINGLEENDED_gc,ADC_CH_GA IN_1X_gc);
ADC_Ch_InputMux_Config(&ADCA.CH1, ADC_INPUT, 0);
ADC_Enable(&ADCA);
ADC_Wait_32MHz(&ADCA);
lcd_home();
lcd_puts("ADC0.1 LCD XMEGA");
_delay_ms(3000);
lcd_clrscr();
while(1)
{
ADC_Ch_Conversion_Start(&ADCA.CH1);
while(!ADC_Ch_Conversion_Complete(&ADCA.CH1));
ADC_result = ADC_ResultCh_GetWord(&ADCA.CH1);
sprintf(lcd_buff,"ADC=%4.4f",ADC_result);
lcd_gotoxy(0,1);
lcd_puts(lcd_buff);
_delay_ms(500);
lcd_clrscr();
}
}
وقتی که از ADC مقادیر رو می خونم اون رو در یک متغیر float قرار می دم و بعد با استفاده از تابع sprintf مقادی رو روی lcd نماش می دهم ولی اعشاری را نشون نمیده...به صورت 212.00000
اگه میشه راهنمایی کنید. در ضمن با تغییر متغییر به double بازهم تغییری در خروجی ایجاد نشد.میکرو هم xmega32a4
این هم برنامه :
#include <avr/io.h>
#include "lcd.h"
#include <avr/delay.h>
#include <stdio.h>
#include "avr_compiler.h"
#include "adc_driver.h"
#define ADC_INPUT ADC_CH_MUXPOS_PIN1_gc
int main(void)
{
float ADC_result;
char lcd_buff[20];
lcd_init(LCD_DISP_ON);
ADC_CalibrationValues_Load(&ADCA);
ADC_ConvMode_and_Resolution_Config(&ADCA, ADC_ConvMode_Unsigned, ADC_RESOLUTION_12BIT_gc);
ADC_Reference_Config(&ADCA, ADC_REFSEL_VCC_gc);
ADC_Prescaler_Config(&ADCA, ADC_PRESCALER_DIV8_gc);
ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH1,ADC_CH_INPUTMODE_SINGLEENDED_gc,ADC_CH_GA IN_1X_gc);
ADC_Ch_InputMux_Config(&ADCA.CH1, ADC_INPUT, 0);
ADC_Enable(&ADCA);
ADC_Wait_32MHz(&ADCA);
lcd_home();
lcd_puts("ADC0.1 LCD XMEGA");
_delay_ms(3000);
lcd_clrscr();
while(1)
{
ADC_Ch_Conversion_Start(&ADCA.CH1);
while(!ADC_Ch_Conversion_Complete(&ADCA.CH1));
ADC_result = ADC_ResultCh_GetWord(&ADCA.CH1);
sprintf(lcd_buff,"ADC=%4.4f",ADC_result);
lcd_gotoxy(0,1);
lcd_puts(lcd_buff);
_delay_ms(500);
lcd_clrscr();
}
}