lcd yardım

Başlatan somaelektronikogr, 26 Ocak 2013, 19:12:02

somaelektronikogr

merhaba. micro c de adc uygulaması yaptım. yalnız    temp_res=ADC_READ(2); komutuyla okuduğum dijital  bilgiyi lcd ekranına Lcd_Out(1,1,text);  komutuyla gönderdiğimde ekranda değer gözükmüyor. yardımcı olabilirmisiniz. program şu şekilde

    unsigned long temp_res;


void main()
{
PORTc=0;
TRISc=0;

Lcd_Init(&PORTc);
lcd_cmd(lcd_cursor_off);
Lcd_cmd(Lcd_Clear);


ADCON1=0X80;
TRISA=0xFF;
TRISB=0X3F;
TRISD=0X00;
while(1)
{
  temp_res=ADC_READ(2);
  portd=temp_res;
  portb=temp_res>>2;

  Lcd_Out(1,1,text);
  }
  }

mur@t

text değişkeni string olarak tanımlanmalı ve siz ADC değerini buna atamalısınız.
yani temp_res değerini (word veya intiger tanımlıdır sanırım) text'e çevireceksiniz.

wordTostr ya da intTostr gibi bir komut olmalı, mikroC'nin lcd örneklerine bakabilirsiniz.

somaelektronikogr

#2
teşekkürler . inttostr komutu ile yaptım .programın son hali şu. fakat mv olarak gösterebiliyorum
    int temp_res;
    unsigned char *text[20];
    float volt;


void main()
{
PORTc=0;
TRISc=0;

Lcd_Init(&PORTc);
lcd_cmd(lcd_cursor_off);
Lcd_cmd(Lcd_Clear);


ADCON1=0X80;
TRISA=0xFF;
TRISB=0X3F;
TRISD=0X00;
while(1)
{
  temp_res=ADC_READ(2);  //analog değeri tepm_res değişkenine okuttum
  portd=temp_res;   // tempres degerinin ilk sekiz bitini portd de gösterdim.pord d ye led bağlayarak.
  portb=temp_res>>2;    // temp_res in 8 ve 9. bitlerini port b d nin 6 ve 7 inci pininde görmek için
 
  volt=4.88758553*temp_res;
  inttostr(volt,text); // tepmres 10 bitlikdijitaldegeri stringe çevirdim

  Lcd_Out(1,1,text); // lcd de okuduğum deger 0-1023 arası deger
  Lcd_Out(1,8,"mv");
 
  lcd_cmd(lcd_clear);
     
  Lcd_Out(1,1,text);
  Lcd_Out(1,8,"mv");
 
  }
  }

mur@t

Volt olarak mı görmek istiyorsun?

ADC'den okuduğun değeri:  5Volt / 1023 = 0,00488 ile çarparsan Volt olarak bulursun, sen çıkan değeri 1000 ile çarpıp milivolt'a çevirmişsin.
(veya bir yerden aldıysan bu şekilde yapılmış)

tabi burada referans/Vdd voltajının 5Volt olduğunu varsayıyoruz.

nette örnekler mevcut, mikroe'nin proje sayfası da faydalı olabilir.
ADC/Voltmetre: http://www.edaboard.com/thread196948.html


somaelektronikogr

5Volt / 1023 = 0,00488 işlemini yaptım ama virgüllü sonucu yazmıyor lcd de sadece 0,1,2,3,4 ve5 tamsayı kısımlarını gösteriyor.

mur@t

Alıntı yapılan: somaelektronikogr - 29 Ocak 2013, 12:54:24
5Volt / 1023 = 0,00488 işlemini yaptım ama virgüllü sonucu yazmıyor lcd de sadece 0,1,2,3,4 ve5 tamsayı kısımlarını gösteriyor.

Çarpma sonucu float, volt değişkeni de öyle tanımlı.
floatToStr(volt, text) ile çevirirsen olması lazım.


nocturnal

kullandığım kodu örnek olarak verirsem belki işini görür


#include "always.h"
#include <htc.h>
#include "delay.h"
#include "Lcd.h"

    __CONFIG( XT & WDTEN & LVPDIS & PWRTDIS & BORDIS );

unsigned int val=0, val1=0;

void port_init(){


	OPTION=0x80;
	TRISA=0b00000011;
	PORTA=0;
	TRISB=0;
	PORTB=0;
	TRISC=0;
	PORTC=0;
	TRISD=0;
	PORTD=0;
}


void AN0_olc(){
		GODONE=1;
		while(!ADIF)CLRWDT();
		ADIF=0;
		val=(ADRESH*256+ADRESL)/2;
		lcd_gotoxy(1,9);
		veri_yolla((val%1000)/100+48);
		lcd_gotoxy(1,10);
		veri_yolla(',');
		lcd_gotoxy(1,11);
		veri_yolla((val%100)/10+48);
		lcd_gotoxy(1,12);
		veri_yolla(val%10+48);
}

void AN1_olc(){
		GODONE=1;
		while(!ADIF)CLRWDT();
		ADIF=0;
		val=(ADRESH*256+ADRESL)/2;
		lcd_gotoxy(2,9);
		veri_yolla((val%1000)/100+48);
		lcd_gotoxy(2,10);
		veri_yolla(',');
		lcd_gotoxy(2,11);
		veri_yolla((val%100)/10+48);
		lcd_gotoxy(2,12);
		veri_yolla(val%10+48);
}

void main(){

	port_init();
	lcd_init();
	ADCON0=0x01;
	ADCON1=0b10000100;


		lcd_clear();
		lcd_gotoxy(1,1);
		lcd_yaz("SENSOR1=    VOLT");
		lcd_gotoxy(2,1);
		lcd_yaz("SENSOR2=    VOLT");

while(1){
		CLRWDT();

		AN0_olc();
		ADCON0=9;
		DelayMs(50);
		AN1_olc();
		ADCON0=1;
		DelayUs(50);


}
}