سلام به مهندسای عزیز
آقا یه سوال تخصصی دارم:
یه برنامه نوشتم که از سنسور بخونم و رو ال سی دی کاراکتری نشون بدم ولی حالا میخوام تو همین برنامه از یه ADC دیگه هم بخونم ینی یه سنسور دیگه هم وصل کنم و یه بار ازین بخونم و یه بار از اولیه. ولی نمیدونم چجوری یه ADC دیگه رو باید تنظیماتشو انجام بدم و ازش بخونم.
ممنون میشم راهنمایی کنید.
اگه فایل برنامه نیازه پلود میکنم.
کد برناممم اینه:
آقا یه سوال تخصصی دارم:
یه برنامه نوشتم که از سنسور بخونم و رو ال سی دی کاراکتری نشون بدم ولی حالا میخوام تو همین برنامه از یه ADC دیگه هم بخونم ینی یه سنسور دیگه هم وصل کنم و یه بار ازین بخونم و یه بار از اولیه. ولی نمیدونم چجوری یه ADC دیگه رو باید تنظیماتشو انجام بدم و ازش بخونم.
ممنون میشم راهنمایی کنید.
اگه فایل برنامه نیازه پلود میکنم.
کد برناممم اینه:
کد:
#include "LPC17xx.h"
#include <stdio.h>
//DB4=PORT0.4 DB5=PORT0.5 DB6=PORT0.6 DB7=PORT0.7
#define RS (1<<9) //PORT0.9
#define E (1<<8) //PORT0.8
#define RW (1<<10) //PORT0.10
#define d1 300
#define d2 50000
void delay(int delay){
long int i;
for(i=0;i<=delay;i++) ;
}
void Delay (uint32_t Time)
{
uint32_t i;
i = 0;
while (Time--) {
for (i = 0; i < 5000; i++);
}
}
//-----------------------------
void lcd_init_4bit(void){
LPC_GPIO0->FIOCLR = RS; // for command
LPC_GPIO0->FIOCLR = RW;
//////////////////////////
LPC_GPIO0->FIOSET = (0x03)<< 4; //0x03
LPC_GPIO0->FIOSET = E;
delay(d1);
LPC_GPIO1->FIOCLR = E;
delay(d2);
LPC_GPIO0->FIOCLR = ((1<<0)|(1<<1)|(0<<2)|(0<<3))<< 4; //0x03
LPC_GPIO0->FIOSET = ((1<<0)|(1<<1)|(0<<2)|(0<<3))<< 4; //0x03
LPC_GPIO0->FIOSET = E;
delay(d1);
LPC_GPIO0->FIOCLR = E;
delay(d2);
LPC_GPIO0->FIOCLR = ((1<<0)|(1<<1)|(0<<2)|(0<<3))<< 4; //0x03
LPC_GPIO0->FIOSET = ((0<<0)|(1<<1)|(0<<2)|(0<<3))<< 4; //0x02
LPC_GPIO0->FIOSET = E;
delay(d1);
LPC_GPIO0->FIOCLR = E;
delay(d2);
LPC_GPIO0->FIOCLR = ((0<<0)|(1<<1)|(0<<2)|(0<<3))<< 4; //0x02
/////////////////////////////
LPC_GPIO1->FIOSET = ((1<<0)|(1<<1)|(0<<2)|(0<<3))<< 4; //0x03
LPC_GPIO1->FIOSET = E;
delay(d1);
LPC_GPIO0->FIOCLR = E;
delay(d2);
LPC_GPIO0->FIOCLR = ((1<<0)|(1<<1)|(0<<2)|(0<<3))<< 4; //0x03
LPC_GPIO0->FIOSET = ((1<<0)|(1<<1)|(0<<2)|(0<<3))<< 4; //0x03
LPC_GPIO0->FIOSET = E;
delay(d1);
LPC_GPIO1->FIOCLR = E;
delay(d2);
LPC_GPIO0->FIOCLR = ((1<<0)|(1<<1)|(0<<2)|(0<<3))<< 4; //0x03
LPC_GPIO0->FIOSET = ((0<<0)|(1<<1)|(0<<2)|(0<<3))<< 4; //0x02
LPC_GPIO0->FIOSET = E;
delay(d1);
LPC_GPIO0->FIOCLR = E;
delay(d2);
LPC_GPIO0->FIOCLR = ((1<<0)|(1<<1)|(1<<2)|(1<<3))<< 4; //0x02
}
//-----------------------------
void lcd_putchar( char CHAR){
LPC_GPIO0->FIOSET=RS; // for character
LPC_GPIO0->FIOCLR=RW;
LPC_GPIO0->FIOSET= ((CHAR&0XF0)>>4)<< 4 ;
LPC_GPIO0->FIOSET=E;
delay(d1);
LPC_GPIO0->FIOCLR=E;
delay(d2);
LPC_GPIO0->FIOCLR = ((CHAR&0XF0)>>4)<< 4 ;
LPC_GPIO0->FIOSET = (CHAR&0X0F)<< 4 ;
LPC_GPIO0->FIOSET=E;
delay(d1);
LPC_GPIO0->FIOCLR=E;
delay(d2);
LPC_GPIO0->FIOCLR= (CHAR&0X0F)<< 4 ;
}
//-----------------------------
void command(unsigned char CHAR){
LPC_GPIO0->FIOCLR=RS; // for command
LPC_GPIO0->FIOCLR=RW;
LPC_GPIO0->FIOSET= ((CHAR&0XF0)>>4)<< 4 ;
LPC_GPIO0->FIOSET=E;
delay(d1);
LPC_GPIO0->FIOCLR=E;
delay(d2);
LPC_GPIO0->FIOCLR= ((CHAR&0XF0)>>4)<< 4 ;
LPC_GPIO0->FIOSET= (CHAR&0X0F)<< 4 ;
LPC_GPIO0->FIOSET=E;
delay(d1);
LPC_GPIO0->FIOCLR=E;
delay(d2);
LPC_GPIO0->FIOCLR= (CHAR&0X0F)<< 4 ;
}
//-----------------------------
void lcd_putsf( char *data){
long int i;
for(i=0;data[i];i++) lcd_putchar(data[i]);
}
unsigned short ADC_Read(void)
{
unsigned int i;
//-----------------------------
LPC_PINCON->PINSEL1 = 0x00010000; // p0.24 select as ADC0.0
//LPC_PINCON->PINSEL1 = 1<< 16; // p0.24 select as ADC0.0
LPC_SC->PCONP |= (1 << 12); // Enable power to AD block
LPC_ADC->ADCR |= 0x02; //select AD0.1
LPC_ADC->ADCR |= 0x0100; // ADCLK is 12.5 MHz
//LPC_ADC->ADCR |= 0x10000; // BURST bit 1 << 16
LPC_ADC->ADCR |= 0x200000; //Power up, 1 << 21
//LPC_ADC->ADCR |= 0x08000000; //Start conversion on a falling edge on the selected CAP/MAT signal.
// 1 << 27
//-----------------------------
LPC_ADC->ADCR |= 0x01000000; // Start A/D Conversion , When the BURST bit is 0
do {
i = LPC_ADC->ADDR1; // Read A/D Data Register
}while ((LPC_ADC->ADGDR & 0x80000000) == 0); // Wait for end of A/D Conversion
return (i >> 4) & 0x0FFF; // bit 4:15 is 10 bit AD value
}
int main (void) {
unsigned short current_value;
unsigned int s = 0;
unsigned char p[100];
unsigned int n;
LPC_GPIO0->FIODIR = ((1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)|(1<<10));
LPC_GPIO0->FIOMASK = 0;
LPC_GPIO0->FIOCLR = ((1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)|(1<<10));
//LCD_4 BIT MODE
lcd_init_4bit();
SystemInit();
lcd_putsf(" Nava Behdash 2 ");
Delay(10000);
while(1){
for(n=0;n<=10;n++)
{
Delay(1000);
current_value = ADC_Read();
current_value = (4000-current_value)/2;
s=s+current_value;
}
s=s/10;
sprintf(p," %i",s);
command(0x0C);
command(0x01); //LCD CLEAR
lcd_putsf(" ADC Valu=");
lcd_putsf(p);
delay(1000000);
}
}




اول یه تشکر ویژه از شما مهندس زرکوب عزیز آقا عاشق عکس پروفایلتم(نوستالوژی شده تقریبا برام
)
دیدگاه