اطلاعیه

Collapse
No announcement yet.

برنامه lm35

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

    برنامه lm35

    سلام دوستان یه برنامه برای lm35 نوشتم که روی دو تا سون سگمنت دما رو نشون بده متاسفانه یکان درست نمایش داده میشه ولی دهگانش مشکل داره لطفا کمکم کنید.
    اینم برنامش

    #include <mega16a.h>

    #include <delay.h>


    #define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))

    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | ADC_VREF_TYPE;
    delay_us(10);
    ADCSRA|=(1<<ADSC);
    while ((ADCSRA & (1<<ADIF))==0);
    ADCSRA|=(1<<ADIF);
    return ADCW;
    }

    void seg1(int num)
    {
    if(num == 0) PORTC = 0b00111111;
    else if(num == 1) PORTC = 0b00000011;
    else if(num == 2) PORTC = 0b01101101;
    else if(num == 3) PORTC = 0b01100111;
    else if(num == 4) PORTC = 0b01010011;
    else if(num == 5) PORTC = 0b01110110;
    else if(num == 6) PORTC = 0b01111110;
    else if(num == 7) PORTC = 0b00100011;
    else if(num == 8) PORTC = 0b01111111;
    else if(num == 9) PORTC = 0b01110111;
    }

    void seg2(int num)
    {
    if(num == 0) PORTD = 0b00111111;
    else if(num == 1) PORTD = 0b00000011;
    else if(num == 2) PORTD = 0b01101101;
    else if(num == 3) PORTD = 0b01100111;
    else if(num == 4) PORTD = 0b01010011;
    else if(num == 5) PORTD = 0b01110110;
    else if(num == 6) PORTD = 0b01111110;
    else if(num == 7) PORTD = 0b00100011;
    else if(num == 8) PORTD = 0b01111111;
    else if(num == 9) PORTD = 0b01110111;
    }


    void main(void)
    {
    int temp=0;
    DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
    PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

    DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
    PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

    DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (1<<DDC4) | (1<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
    PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

    DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0);
    PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

    TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02) | (0<<CS01) | (0<<CS00);
    TCNT0=0x00;
    OCR0=0x00;

    TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
    TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    ASSR=0<<AS2;
    TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
    TCNT2=0x00;
    OCR2=0x00;

    TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);

    MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
    MCUCSR=(0<<ISC2);

    UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);

    ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);

    ADMUX=ADC_VREF_TYPE;
    ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
    SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);

    SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

    TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

    while (1)
    {
    temp = read_adc(0) / 3.043;
    seg1((temp / 10) % 10);
    seg2(temp % 10);
    delay_ms(500);
    }
    }

    #2
    پاسخ : برنامه lm35

    سلام .برنامه شما دیدم تابع سون سگمت کدهای باینری اشتباهاتی داشت که تصحیح کردم همین رفرنس ADC روی 2.56 فرض کردم مقدار تقسیم شد 4 .موفق باشید............................................. ..........
    دانلود کنید.

    دیدگاه

    لطفا صبر کنید...
    X