اطلاعیه

Collapse
No announcement yet.

کد آماده برای ساخت ولت متر دیجیتال به کمک at91sam7x256 و lcd کاراکتری

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کد آماده برای ساخت ولت متر دیجیتال به کمک at91sam7x256 و lcd کاراکتری

    سلام خدمت دوستانم ،
    چند وقتی هست درگیر راه اندازی ولت متر دیجیتال با میکرو 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]
    /code]
لطفا صبر کنید...
X