analog girişli pic ?

Başlatan emrah, 23 Ocak 2011, 12:05:57

emrah

slm, analog bilgi işleyecegim ve lcd sürecegim 16f877 den başka 18 pinli hangi pic serisini var? piyasada bulabilcegim!  ve picbasıc te programı yazacagım, 16f877 de kullandıgım kodların aynısı olurmu? başka kodalar da varmı.   varsa eger  basit bir lcd ye analog bilgi göstren programınıda paylasırsanız sevnrm. teşekkürler....

X-Fi

sanırım 12F675'de sizin işinizi görecektir.

http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

ete

18 Pin sorduğuna göre cevap 16F88 olacaktır.
Piyasada bulunuyor. ADC girişleri var. Comparatör girişleri var. Üstelik hafıza da 4096 word .
Dahili Osilatörü mevcut . Üstelik 1-2-4 ve 8 Mhz hızlarda ayarlanabiliyor.
Ancak 877 nin komutları ile çalışmayacaktır. Zira ADC aktivasyonu farklıdır.
877 de ADCON1 registeri ADC yi aktif eder ve bu registerin son 4 biti ADC olarak kullanacağın kanalları belirler.
F88 de 7 adet ADC girişinin seçilmesi ANSEL isimli registerin ilk 7 bitinin hanigisi set edilir ise o kanal ADC olarak seçilmiş olacaktır.
Tabiiki daha önce Comparatör girişlerinin CMCON=7 komutu ile iptal edilmesi gerekir.


Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

emrah

x-fi arkadasım resimdeki devrenin kaynak dosyaları yokmuydu ?

ete hocam, sadece register ayarımı faklı olacaktı? yani f88 de analog giriş ayarını ansel=255 yaparsak o picin analog pinleri aktif olacakmı? başlangıç ayar kısmını picbasıc olarak yazabilirmisinz tam ne yapacagımı anlayamadım

X-Fi

/***************************************************************************
******************************* Coskun ERĞAN *******************************
******************** 12f675 SMD Havye Isı Kontrol programı *****************
**************************** 23 / Aralık / 2010 ****************************
****************************** hi-tech 9.60 PL4  ***************************
/**************************************************************************/
#include <pic.h> 
#include "delay.h"
#include "always.h"
/**************************************************************************/
__CONFIG( 0x3E4C );
/**************************************************************************/ 	
#define DTA   GPIO1   // data
#define SH_CP GPIO2   // clock
#define ST_CP GPIO5   // seçme
/**************************************************************************/
const unsigned char karakter_[8][8]=
{
{ 16,16,16,16,16,16,16,0}, //|    = 0
{ 24,24,24,24,24,24,24,0}, //||   = 1
{ 28,28,28,28,28,28,28,0}, //|||  = 2
{ 30,30,30,30,30,30,30,0}, //|||| = 3
{ 31,31,31,31,31,31,31,0}, //|||| = 4
{ 0,0,12,4,4,4,14,0},      //ı    = 5
{ 0,14,16,16,17,14,4,0},   //ç    = 6
{ 0,16,8,4,2,1,0,0},       // \   = 7
};
// 	intro'yu yazdıktan sonra bir boşluk bırakınız...
const unsigned char intro[]={"www.DelcomRF.com "}; 
unsigned char  sayi[10]={'0','1','2','3','4','5','6','7','8','9'};
unsigned char yuzler,onlar,birler,kont,i,temp,zaman=0,isik=1,led=0;
unsigned int pot,ptc,poth;
/**************************************************************************/
void port_init()
{
	CMCON = 0x07;
    TRISIO = 0b00011001;
    OPTION = 0x8F;
	ANSEL  = 0x255;	
	ADCON0 = 0x81;
	GPIO = 0;
}	
/**************************************************************************/
/**************************************************************************/
/*******************************  LCD KONSOLU  ****************************/
/**************************************************************************/
/**************************************************************************/
void Gonder_595(unsigned char veri)
{		

if(isik)veri|=0x10;  // ışık açık
		veri<<=1;
if(led)veri|=0x01;   // out açık			
			
		for(i=0; i<8; i++)
			{	 					 			
			if(veri&0x80)DTA=1; else DTA=0;
			SH_CP=1;  							 
			veri<<=1;				  	 
			SH_CP=0; 	   				
			}
	ST_CP=1;    
	NOP();
	ST_CP=0;
	 
}
/**************************************************************************/
/**************************************************************************/
void komut_yolla(unsigned char byte)
{
	temp=0x20;  // en=1
	Gonder_595(temp);
	
	Gonder_595(temp|=(byte>>4));  // büyük 4 bit gider + en
	Gonder_595(temp&=0x0F);// en=0

	DelayUs(200);

	temp=0x20;  // en=1
	Gonder_595(temp);

	Gonder_595(temp|=(byte&0x0F));  // küçük 4 bit + en
 	Gonder_595(temp&=0x0F);// en=0;
	DelayUs(200);
}
/**************************************************************************/
void veri_yolla(unsigned char byte)
{
switch (byte) 
{
case 'Ç' : byte=0x06; break; // oluşturulan
case 'ç' : byte=0x06; break; // oluşturulan
case 'ı' : byte=0x05; break; // oluturulan
case 'Ö' : byte=0xEF; break;
case 'ö' : byte=0xEF; break;
case 'Ü' : byte=0xF5; break;
case 'ü' : byte=0xF5; break;
default : break;
}
	temp=0x60;  // en=1 rs=1
	Gonder_595(temp);
	
	Gonder_595(temp|=(byte>>4));  // büyük 4 bit gider + en
	Gonder_595(temp&=0xDF);// en=0;
	
	DelayUs(200);
	temp=0x60;  // en=1 rs=1
	Gonder_595(temp);

	Gonder_595(temp|=(byte&0x0F));  // küçük 4 bit + en
 	Gonder_595(temp&=0xDF);// en=0;
	DelayUs(200);
}
/**************************************************************************/
void lcd_gotoxy(unsigned char x,unsigned char y)
{
	if(x==1)
		komut_yolla(0x80+((y-1)%16));
	else
		komut_yolla(0xC0+((y-1)%16));
}
/**************************************************************************/
void lcd_yaz(const unsigned char * s)
{
	while(* s){
//		if(*s=='|'){lcd_gotoxy(2,1);*s++;}
		veri_yolla(* s++);}
}
/**************************************************************************/
void lcd_clear(void)
{
	komut_yolla(0x01);
	DelayMs(1);
}
/**************************************************************************/
void lcd_init()
{
unsigned char j,s,adres=64;

	Gonder_595(0x20);  // en=1;
	Gonder_595(0x22);  // 0x20;
	Gonder_595(0x02);  // en=0;
	DelayUs(200);				
	komut_yolla(0x28);
	komut_yolla(0x06);
	komut_yolla(0x0C);
	komut_yolla(0x01);
	DelayMs(1);
	komut_yolla(0x80);

for(j=0;j<=7;j++){  // tr karakter tanıtılıyor
	komut_yolla(adres);
	for(s=0;s<=7;s++){
		veri_yolla(karakter_[j][s]);
					 }				  
		adres=adres+8;	 
				 }
}
/**************************************************************************/
/**************************************************************************/
/****************************** ADC KONSOLU *******************************/
/**************************************************************************/
/**************************************************************************/ 
void Pot_Oku()
{
	unsigned int x=0;
	unsigned char e;
	
   	CHS1=1;
   	CHS0=1;
   	VCFG=0;
   	DelayUs(20);
	
	GODONE=1;
	
	while(GODONE)CLRWDT();
 
	x=ADRESH;
	x<<=8;
	x|=ADRESL;
	
	x=1023-x;
	
	pot=x;
	
	kont=x/12;
	if(kont>80)kont=80;

	lcd_clear();
	
e=0;
while(kont--){	

	if(e==5){e=0;veri_yolla(4);}
	e++;
}	
if(e)veri_yolla(--e);	

	x=(x*10)/25;
	
	if(x>400)x=400;
	x+=100;
	
	lcd_gotoxy(2,1);
	lcd_yaz("Sıcaklık=");
	
	veri_yolla(sayi[x/100]);
	veri_yolla(sayi[(x%100)/10]);
	veri_yolla(sayi[x%10]);	
	veri_yolla('C');
	veri_yolla(0xDF);	

}
/**************************************************************************/
void PTC_Oku()
{
   	TRISIO = 0b00011011;  // out select 	
   	CHS1=0;
   	CHS0=0;
   	VCFG=1;
   	DelayMs(1);
	
	GODONE=1;
	while(GODONE)CLRWDT();
   	
  	TRISIO = 0b00011001;  // out select 
   	
	ptc=ADRESH;
	ptc<<=8;
	ptc|=ADRESL;

	if(ptc<80)ptc=80; // kalibre
	ptc=ptc-80;
	ptc=ptc*10;
}
/**************************************************************************/
/**************************************************************************/
/*********************************** MAIN *********************************/
/**************************************************************************/
/**************************************************************************/
void main()
{	
	unsigned char t,k,konum,hazir=0;
	
	port_init(); 
	DTA=1;
	DelayMs(30);
	lcd_init();	

//iiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
for(t=16; t>1; t--){
	lcd_gotoxy(1,t);
	CLRWDT();
	DelayMs(100);
	k=0;
	while(intro[k]!='\0'){
	veri_yolla(intro[k++]);}
	}
for(t=0; t<sizeof intro; t++){
	lcd_gotoxy(1,1);
	CLRWDT();
	DelayMs(100);
	k=t;
    while(intro[k]!='\0'){
	veri_yolla(intro[k++]);}
	}
//iiiiiiiiiiiiiiiiiiiiiiiiiiiiiii	

while(1){
	CLRWDT();
//----------------------------	
	Pot_Oku();
	PTC_Oku();
	
if(pot>ptc)led=1;
else       led=0;
//----------------------------	

if(pot!=poth){hazir=0;poth=pot;if(pot>ptc)konum=1;else konum=0;}

if(!hazir){

if(konum){if(pot<ptc){isik=0;hazir=1;}}
else     {if(pot>ptc){isik=0;hazir=1;}}

if(led)veri_yolla('+');
else   veri_yolla('-');

switch(t++) {
	case 0:	veri_yolla(7);break;
	case 1:	veri_yolla('|');break;
	case 2:	veri_yolla('/');break;
	case 3:{veri_yolla('-');t=0;break;}
			}
				
		}
		DelayMs(100);	
		isik=1;
	}
}
/************************************************************************************************/ 
/************************************************************************************************/ 
/************************************************************************************************/ 	
/************************************************************************************************/
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)