سلام خدمت دوستانم ،
چند وقتی هست درگیر راه اندازی ولت متر دیجیتال با میکرو at91sam7x256 هستم تا ولتاژ رو روی lcd کاراکتری 16*2 ببینم، بالاخره با استفاده از مطالب مفید این انجمن کد جواب گرفت ، تصمیم گرفتم بزارم اینجا تا شاید گره از کار کسی باز بشه.
موفق باشید.
/code]
چند وقتی هست درگیر راه اندازی ولت متر دیجیتال با میکرو at91sam7x256 هستم تا ولتاژ رو روی lcd کاراکتری 16*2 ببینم، بالاخره با استفاده از مطالب مفید این انجمن کد جواب گرفت ، تصمیم گرفتم بزارم اینجا تا شاید گره از کار کسی باز بشه.
موفق باشید.
کد:
[ #include <At91SAM7X256.h>[left] #include <stdio.h> #define LCD_PORT_A #define LCD_RS 2 #define LCD_RW 3 #define LCD_E 4 #define LCD_DB4 23 #define LCD_DB5 24 #define LCD_DB6 25 #define LCD_DB7 26 #include "lcd.h" void delay(void) { unsigned int i; for(i=0;i<1000000;i++) {} } int main(){ unsigned int x; float final =0; float voltage =0; char buffer[]={0,0,0,0,0}; lcd_init(); *AT91C_PIOB_PER=(1<<7); //bit e 7om port e B ra be onvane IO tarif mi****m. *AT91C_PIOB_OER=(1<<7); // bit e 7om PORT e B ra be onvane khoruji tarif mi****m. *AT91C_ADC_CR = AT91C_ADC_SWRST ; // ADC Control Register bit0>start bit1>swrst, baghiye bit ha X(Don't care) mibashand. *AT91C_ADC_CHER = AT91C_ADC_CH3 ; //ADC channel enable register. /* ba neveshtan dar khane haye 0 ta 7 har yek az 8 channel faal mishavand */ *AT91C_ADC_MR = AT91C_ADC_SHTIM|AT91C_ADC_STARTUP|AT91C_ADC_PRESCAL |AT91C_ADC_SLEEP_NORMAL_MODE |AT91C_ADC_LOWRES_10_BIT|AT91C_ADC_TRGEN_DIS; /* AT91C_ADC_MR adc mode register SHTIM : faseleye zamini beyen 2 nemone bardari startup : zamane shoroe avaliye (zamani ke adc niaz darad ta amade shavard az formula mohase be mishavad) prescal : clock voroudi ra ba in adad taghsim mikonad. sleep : agar yek bashad sleep ast agar sefr bashad dar halate adi ast. tregen : agar 0 bashad rahandaze khereji ghyere faal ast */ *AT91C_PIOB_SODR=(1<<7); // in teki code ra neveshtim ta motmaen shavim hengame program // kardan aya barname be in khat miresad ya na. delay(); *AT91C_PIOB_CODR=(1<<7); delay(); *AT91C_PIOB_SODR=(1<<7); delay(); *AT91C_PIOB_CODR=(1<<7); delay(); lcd_gotoxy(1,1); lcd_clear(); while(1){ *AT91C_ADC_CR = AT91C_ADC_START; while((*AT91C_ADC_SR&AT91C_ADC_EOC3)==0); // entezar ta amade shodan dataye ADC x=*AT91C_ADC_CDR3 & AT91C_ADC_DATA; // ADC_CDRx : Channel data register /* meghdare motenazare ba ADC dar motaghayere X rikhte mishavad. */ //inja mikhahin agar voltage vorudi be ADC bishtar az VREF/2 bud LED roshan shavad va dar gheire // in sorat LED khamush shavad. final = ((float)x/1024); voltage = 5* final; sprintf(buffer,"%f",voltage); lcd_gotoxy(1,1); lcd_putsf("voltage = "); lcd_putsf(buffer); if( x>=512) { *AT91C_PIOB_SODR=(1<<7); } else { *AT91C_PIOB_CODR=(1<<7); } } } [/left][code=c]