سلام به مهندسای عزیز
آقا یه سوال تخصصی دارم:
یه برنامه نوشتم که از سنسور بخونم و رو ال سی دی کاراکتری نشون بدم ولی حالا میخوام تو همین برنامه از یه 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); } }
دیدگاه