سلام. من طبق چیزهایی که در اینترنت دیدم، یه ولتمتر درست کردم که البته زمان سنج (ثانیه شمار) هم در درونش داره. حالا مشکلم اینجاست که وقتی دستور زیر رو پروگرام میکنم، کاملا درست عمل میکنه، یعنی اول ولتاژ و بعد صفحه پاک میشه و ثانیه رو نشون میده ولی من لازم دارم که هردو رو همزمان در دو خط LCD داشته باشم. از 1602 استفاده میکنم. از دستور lcd_gotoxy در درون while که استفاده میکنم جواب نمیده و کلا برنامه از کار میفته. لطفا راهنماییم کنید. ممنونم. (این توضیح رو هم بدم که کار این قطعه در واقع جمع ولتاژ عبوری در طول زمانه، اگه یه موقع دستورات جمع رو دیدید مشکلی در این بابت نیست
[code=c]
#include <mega8.h>
#include <delay.h>
#include <stdlib.h>
#include <alcd.h>
#include <stdio.h>
#asm
.equ __lcd_port=0x18 //portb
#endasm
#define ADC_VREF_TYPE 0x00 //Volt.Ref
float read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10); // Delay needed for the stabilization of the ADC input voltage
ADCSRA|=0x40; // Start the AD conversion
while ((ADCSRA & 0x10)==0); // Wait for the AD conversion to complete
ADCSRA|=0x10;
return ADCW;
}
void main(void)
{
char buffer[];
int t=0;
char T[];
float V,g=0,d=0;
DDRD=0X00;
lcd_init(16);
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: Int., cap. on AREF
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x85;
while (1)
{
if(PIND.0)
{
V=read_adc(0);
V=(V*5)/1023;
g=V;
d=g+d;
t=t+1;
ftoa(d,6,buffer);
lcd_putsf("Q="
;
lcd_puts(buffer);
delay_ms(750);
lcd_clear();
itoa(t,T);
lcd_putsf("T="
;
lcd_puts(T);
delay_ms(250);
lcd_clear();
}
};
}
[/code]
[code=c]
#include <mega8.h>
#include <delay.h>
#include <stdlib.h>
#include <alcd.h>
#include <stdio.h>
#asm
.equ __lcd_port=0x18 //portb
#endasm
#define ADC_VREF_TYPE 0x00 //Volt.Ref
float read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10); // Delay needed for the stabilization of the ADC input voltage
ADCSRA|=0x40; // Start the AD conversion
while ((ADCSRA & 0x10)==0); // Wait for the AD conversion to complete
ADCSRA|=0x10;
return ADCW;
}
void main(void)
{
char buffer[];
int t=0;
char T[];
float V,g=0,d=0;
DDRD=0X00;
lcd_init(16);
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: Int., cap. on AREF
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x85;
while (1)
{
if(PIND.0)
{
V=read_adc(0);
V=(V*5)/1023;
g=V;
d=g+d;
t=t+1;
ftoa(d,6,buffer);
lcd_putsf("Q="

lcd_puts(buffer);
delay_ms(750);
lcd_clear();
itoa(t,T);
lcd_putsf("T="

lcd_puts(T);
delay_ms(250);
lcd_clear();
}
};
}
[/code]
دیدگاه