PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : دوستان كودويژني كمك



shinobi_63
08-09-2008, 00:35
سلام
من چون در حال نوشتن برنامه دماسنج با آي سي atmega8 هستم تاحالا تابع اصلي برنامه
رو نوشتم و مقدار دما رو در متغير temp كه از جنس float هست ذخيره كردم.
حالا ميخوام برنامه رو تو proteus شبيهسازي كنم ودما رو روي يك LCD نمايش بدم
با چه دستوري ميتونم متغير temp كه از جنس float هست روي LCD نمايش بدم.
(لطفا من راهنمايي كنين) :?or:(

alitaroosheh
08-09-2008, 12:11
توي لايبري stdlib.h يه تابع هست به نام ftoa كه اعشاري ميگيره رشته ميده توضيحش توي help كدويژن هست بعد از اين كار با lcd_puts نمايش بده رو lcd :wink:

saeed_niknami
08-09-2008, 17:33
با سلام

با تابع sprintf هم میشه

amir_abit
11-09-2008, 10:49
با سلام به همه دوستان
اين كار رو متوني با متغيرهايي غير از float هم براحتي انجام بدي. اول ببين سنسور دما در خروجي به ازاي هر يك درجه چقدر ولتاژ توليد ميكنه(البته براي سنسورهاي آنالوگ)
حال اگر فرض كنيم شما از سنسور lm35 استفاده كرديد (به ازاي هر 1 درجه 10 ميلي ولت در خروجي) پس در قسمت code wizard avr در تب adc حالت 10 بيتي و ولتاژ رفرنس رو روي avcc قرار دهيد . بدين ترتيب استپهاي ولتاژ در سنسور و adc با هم برابر مي شوند.همجنين فركانس تبديلadc در پايينترين حالت قرار دهيد تا جلوي تغييرات متوالي را بگيريد.
بعد در برنامه سه متغير از نوع unsigned char تعريف كنيد (مثلا aوcوd )
با استفاده از دستور ; (a=read_adc(0 مفدار adc را ميخوانيم.
حالا خيلي راحت مي تونيم با 2 تا تقسيم قسمت صحيح و اعشاري دما رو حساب كنيم.
با دستور ; c=a/2 قسمت صحيح و ; d=a%10 قسمت اعشاري از هم جدا مي شوند . وبعد همانطوري كه دوستمون گفت مي تونيم با دستور sprintf به صورت زير مقادير رو روي lcd نمايش بديم. ; ( sprintf(buf," temp= %u /%u",a,d
اگر باز سوالي داشتي به اين آدرس ايمل بزن تا فايل اين برنامه رو كه من قبلا ساختم رو برات بفرستم : amir_abitsystem@yahoo.com

shinobi_63
14-09-2008, 19:59
سلام
دوستان از راهنماييهاي شما در ژستهاي قبلي ممنونم
من حالا برنامه دماسنج نوشتم و ماژول FT232
رو دارم حالا ميخوام دماسنج با ارتباط com مجازي از طريق پورت
USB به كامژيوتر متصل كنم ويك نمونه برنامه هم نوشتم كهجواب نداد:
لطفا منو در مورد ارتباط USART راهنمايي‌ كنين :k01:
/************************************************** ***
This program was produced by the
CodeWizardAVR V1.25.8 Standard
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
You can see links before reply

Project :
Version :
Date : 9/9/2008
Author : F4CG
Company : F4CG
Comments:


Chip type : ATmega8
Program type : Application
Clock frequency : 6.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
************************************************** ***/

#include <mega8>

// Standard Input/Output functions
#include <stdio>

#include <delay>

#define ADC_VREF_TYPE 0x40

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

// Declare your global variables here

float temp,T1;
unsigned char data[10];

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 4800
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 750.000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;

while (1)
{

//******************A2D

T1=read_adc(5);
temp=(T1*500/1023);

//******************Data Transfer

sprintf(data,"%f",temp);
printf("%s",data);
delay_ms(300);

};
}