اطلاعیه

Collapse
No announcement yet.

تایمر + دماسنج با میکرو کنترل ATmega8 و نمایش گر LCD و سنسور LM35

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

    تایمر + دماسنج با میکرو کنترل ATmega8 و نمایش گر LCD و سنسور LM35

    بسم الله الرحمن الرحیم

    سلام بچه ها امیدوارم حالتون خوب باشه

    یه پروژه اب دار و حسابی با AVR درست کردم گفتم بزارم تا شما هم استفاده کنید.

    این از مدارش:


    اینم از کدش:
    [HIDE-THANKS]
    کد HTML:
    #include <mega8.h>
    #include <stdio.h>
    #include <delay.h>
    
    // Alphanumeric LCD functions
    #include <alcd.h>
    
    #define ADC_VREF_TYPE 0x00
    
    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCW;
    }
    
    // Declare your global variables here
    float _temperature;
    char buff[20];
    void main(void)
    {
    int s=0,m=0,h=0,x=0,temperature=0;
    char b[16];
    char c[16];
    DDRD.0=1;
    // ADC initialization
    // ADC Clock frequency: 500.000 kHz
    // ADC Voltage Reference: AREF pin
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x81;
    
    // Alphanumeric LCD initialization
    // Connections are specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS - PORTB Bit 0
    // RD - PORTB Bit 1
    // EN - PORTB Bit 2
    // D4 - PORTB Bit 4
    // D5 - PORTB Bit 5
    // D6 - PORTB Bit 6
    // D7 - PORTB Bit 7
    // Characters/line: 16
    lcd_init(16);
    lcd_clear();
    lcd_putsf("The Name Of GOD");
    delay_ms(1000);
    lcd_clear();
    while (1)
          { 
              s++;
              delay_ms(977);
              if(s>59){m++;s=0;}
              if(m>59){h++;m=0;}
              if(h>23){h=0;m=0;s=0;x=x+1;}
              sprintf(b,"%d:%d:%d   ",h,m,s);
              lcd_gotoxy(0,0);
              lcd_puts(b);
              sprintf(c,"Day: %d    ",x);
              lcd_gotoxy(0,1);
              lcd_puts(c);
               
              _temperature=read_adc(0)*0.48875855327468;
             temperature=_temperature;
              lcd_gotoxy(9,1);
              sprintf(buff,"Temp:%d    ",temperature);
              lcd_puts(buff);
              
              if(temperature>=40){PORTD.0=1;}
              
              if(temperature<40){PORTD.0=0;}
              
              if(PIND.0==1){
              lcd_gotoxy(9,0);
              lcd_putsf("Fan ON ");
              }
              
              if(PIND.0==0){
              lcd_gotoxy(9,0);
              lcd_putsf("Fan OFF");
              }
              
                    }
    }
    [/HIDE-THANKS]
    خوب این چجوری کار می کنه؟؟اینجوری: از وقتی که تغذیه مدار وصل میشه اول یه به نام خدا به انگلیسی می نویسه و تایمر شروع به شمردن می کنه.
    در کنار تایمر دمارو توسط سنسور LM35 نشون میده.اگه دما به 40 درجه رسید یه فن رو روشن میکنه و می نویسه Fan ON و وقتی دما کمتر از 40 شد فن خاموش میشه ومی نویسه Fan OFF
    حالا کار بردش کجاست؟مثلا روی کامپیوتر های سرور می تونید نصبش کنید سنسور LM35 رو بین یکی از پره های هیت سینک CPU قرارش بدید.
    حالا سیستم رو روشن کنید.دمای هیت سینک سی پی یو رو نشون میده تایمر هم می شماره اینجوری مقدار زمان روشن بودن سیستم رو می تونید ببینید.
    تایمر شامل ثانیه + دقیقه + ساعت +روز شمار هستش (کامله...)

    فرکانس میکرو هم 1مگاهرتز فیوز بیت هارو هم پیشفرض بزارید باشن

    اول بدون اپتو کوپلر تست کنید مشکلی بود اپتوکوپلر بزارین

    یادتون باشه چون تایمر با delay هست دقیق دقیق نیست

    خازن های تغذیه فراموش نشه یه 1000میکرو و یه 100نانو در خروجی7805 و یه 470میکرو و یه 100نانو در ورودی رگولاتور7805 یه دیود محافظ واسه ولتاژ معکوس هم بزارید بد نیست

    خواهشا کپی با ذکر منبع www.ECA.ir

    امیدوارم به دردتون بخوره

    "موفق باشید در پناه حق"
    جدیدترین ویرایش توسط real_ahmadi; ۱۵:۵۲ ۱۳۹۵/۰۸/۰۳.
    Proudly @real_ahmadi
    #real_ahmadi

    واسه اسمت بجنگ

    #2
    پاسخ : تایمر + دماسنج با میکرو کنترل ATmega8 و نمایش گر LCD و سنسور LM35

    کارت عالیه
    مخصوصا با سی کار کردی
    اگه بخوای پی سی بی بزنی حتما از رگولاتور سوییچینگ کار کن
    هم حرفه ای تره هم احتمال خطایی که تو 7805 هست تو اینا نیست

    خسته نباشی
    Telegram:
    @reza_br_2489


    Instagram:
    _amp_c

    دیدگاه


      #3
      پاسخ : تایمر + دماسنج با میکرو کنترل ATmega8 و نمایش گر LCD و سنسور LM35

      نوشته اصلی توسط noorworkshop نمایش پست ها
      کارت عالیه
      مخصوصا با سی کار کردی
      اگه بخوای پی سی بی بزنی حتما از رگولاتور سوییچینگ کار کن
      هم حرفه ای تره هم احتمال خطایی که تو 7805 هست تو اینا نیست

      خسته نباشی
      سلام
      رگولاتور های سوئیچینگ نویز می ندازن وadc هم حساس قاطی می کنه...من که اصلا توصیه نمی کنم فقط با 7805 ببندید خازن های قبل و بعد از رگولاتور رو بزارید هیچ مشکلی نیست کار می کنه

      مرسی ممنون زنده باشی
      جدیدترین ویرایش توسط real_ahmadi; ۱۳:۴۹ ۱۳۹۵/۰۷/۲۷.
      Proudly @real_ahmadi
      #real_ahmadi

      واسه اسمت بجنگ

      دیدگاه


        #4
        پاسخ : تایمر + دماسنج با میکرو کنترل ATmega8 و نمایش گر LCD و سنسور LM35

        تشکر میکنم از سایت خیلی خوبتون

        دیدگاه


          #5
          پاسخ : تایمر + دماسنج با میکرو کنترل ATmega8 و نمایش گر LCD و سنسور LM35

          به نام خدا
          با سلام دوباره به بچه های ECA امیدوارم حالتون مثل همیشه خوب باشه
          همونطور که گفته بودم پروژه تایمرش با delay بود ودقیق نبودواسه همین امشب با تایمر0 AVR درستش کردم الان دیگه هیچی کم نداره می زارمش کد رو شما هم استفاده کنید:

          کد برای کامپایلر کدویژن:

          کد:
          /*******************************************************
          This program was created by the
          CodeWizardAVR V3.12 Advanced
          Automatic Program Generator
          © Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
          http://www.hpinfotech.com
          
          Project : 
          Version : 
          Date    : 24/10/2016
          Author  : 
          Company : www.eca.ir (By Engineer Ahmadi)
          Comments: Copy Right By ECA Site
          
          
          Chip type               : ATmega8A
          Program type            : Application
          AVR Core Clock frequency: 8/000000 MHz
          Memory model            : Small
          External RAM size       : 0
          Data Stack size         : 256
          *******************************************************/
          
          #include <mega8.h>
          
          #include <delay.h>
          
          // Alphanumeric LCD functions
          #include <alcd.h>
          
          #include <stdio.h>
          // Declare your global variables here
          int c=0,s=0,m=0,h=0,x=0,g=0;
          char b[16];
          char a[16];
          char d[16];
          // Timer 0 overflow interrupt service routine
          interrupt [TIM0_OVF] void timer0_ovf_isr(void)
          {
          
          c++;
          
            if(c==3906){
            s++;
            c=0;
            }
           
          }
          
          // Voltage Reference: AREF pin
          #define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR))
          
          // Read the AD conversion result
          unsigned int read_adc(unsigned char adc_input)
          {
          ADMUX=adc_input | ADC_VREF_TYPE;
          // Delay needed for the stabilization of the ADC input voltage
          delay_us(10);
          // Start the AD conversion
          ADCSRA|=(1<<ADSC);
          // Wait for the AD conversion to complete
          while ((ADCSRA & (1<<ADIF))==0);
          ADCSRA|=(1<<ADIF);
          return ADCW;
          }
          float _x;
          void main(void)
          {
          // Declare your local variables here
          
          // Input/Output Ports initialization
          // Port B initialization
          // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=Out 
          DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (1<<DDB0);
          // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
          PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
          
          // Port C initialization
          // Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
          DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
          // State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
          PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
          
          // Port D initialization
          // Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
          DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
          // State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=0 
          PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
          
          // Timer/Counter 0 initialization
          // Clock source: System Clock
          // Clock value: 1000/000 kHz
          TCCR0=(0<<CS02) | (1<<CS01) | (0<<CS00);
          TCNT0=0x00;
          
          // Timer/Counter 1 initialization
          // Clock source: System Clock
          // Clock value: Timer1 Stopped
          // Mode: Normal top=0xFFFF
          // OC1A output: Disconnected
          // OC1B output: Disconnected
          // Noise Canceler: Off
          // Input Capture on Falling Edge
          // Timer1 Overflow Interrupt: Off
          // Input Capture Interrupt: Off
          // Compare A Match Interrupt: Off
          // Compare B Match Interrupt: Off
          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;
          
          // Timer/Counter 2 initialization
          // Clock source: System Clock
          // Clock value: Timer2 Stopped
          // Mode: Normal top=0xFF
          // OC2 output: Disconnected
          ASSR=0<<AS2;
          TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);
          TCNT2=0x00;
          OCR2=0x00;
          
          // Timer(s)/Counter(s) Interrupt(s) initialization
          TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (1<<TOIE0);
          
          // External Interrupt(s) initialization
          // INT0: Off
          // INT1: Off
          MCUCR=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
          
          // USART initialization
          // USART disabled
          UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
          
          // Analog Comparator initialization
          // Analog Comparator: Off
          // The Analog Comparator's positive input is
          // connected to the AIN0 pin
          // The Analog Comparator's negative input is
          // connected to the AIN1 pin
          ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
          
          // ADC initialization
          // ADC Clock frequency: 1000/000 kHz
          // ADC Voltage Reference: AREF pin
          ADMUX=ADC_VREF_TYPE;
          ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
          SFIOR=(0<<ACME);
          
          // SPI initialization
          // SPI disabled
          SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);
          
          // TWI initialization
          // TWI disabled
          TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
          
          // Alphanumeric LCD initialization
          // Connections are specified in the
          // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
          // RS - PORTB Bit 0
          // RD - PORTB Bit 1
          // EN - PORTB Bit 2
          // D4 - PORTB Bit 4
          // D5 - PORTB Bit 5
          // D6 - PORTB Bit 6
          // D7 - PORTB Bit 7
          // Characters/line: 16
          lcd_init(16);
          
          // Global enable interrupts
          #asm("sei")
          
          //show on start
          
          lcd_clear();
          lcd_gotoxy(0,0);
          lcd_putsf("The Name Of GOD");
          delay_ms(1000);
          lcd_clear();
          
          lcd_gotoxy(1,0);
          lcd_putsf("By Ali Ahmadi");
          delay_ms(1000);
          lcd_clear();
          
          lcd_gotoxy(3,0);
          lcd_putsf("WWW.ECA.IR");
          delay_ms(1000);
          lcd_clear();
          
          while (1)
                {
                 
                 //oclock configoration
                 if(s>59){m++;s=0;}
                 if(m>59){h++;m=0;}
                 if(h>23){h=0;m=0;s=0;g++;}
                 sprintf(b,"%d:%d:%d ",h,m,s);
                 lcd_gotoxy(0,0);
                 lcd_puts(b);
                 
                 //read adc
                 
                 _x=read_adc(0)*0.48875855327468;
                 x=_x;
                 
                 //day counter
                 
                 sprintf(a,"Day:%d    ",g);
                 lcd_gotoxy(0,1);
                 lcd_puts(a);
                 
                 //show adc on lcd
                 
                 sprintf(d,"Temp:%d    ",x);
                 lcd_gotoxy(9,1);
                 lcd_puts(d);
                 delay_ms(100);
                 //write fan state
                 
                 if(x>=40){
                 lcd_gotoxy(9,0);
                 lcd_putsf("Fan ON ");
                 }
                 
                 if(x<40){
                 lcd_gotoxy(9,0);
                 lcd_putsf("Fan OFF");
                 }
                 
                 //fan controller
                 
                 if(x>=40){
                 PORTB.0=1;
                 }
                 
                 if(x<40){
                 PORTB.0=0;
                 } 
                }
          }
          اینم مدارش که با خاطر این که کلاک میکرو پایدار نیست مجبور شدم کلا تغییرش بدم کریستال خارجی هم 8مگاهرتز هستش




          فقط یه خواهش دارم اگه میخواین کپی کنید خواهشا به ذکر منبع کپی کنید WWW.ECA.IR چون دیدم که یه هفته بیشتر از ایجاد این تایپیک نگذشته هموطنان ایرانی کپی کردن اما بدون ذکر منبع خیلی ناراحت شدم.

          سوالی بود در خدمتم

          "موفق باشید"
          جدیدترین ویرایش توسط real_ahmadi; ۱۲:۵۸ ۱۳۹۵/۰۸/۰۴.
          Proudly @real_ahmadi
          #real_ahmadi

          واسه اسمت بجنگ

          دیدگاه


            #6
            پاسخ : تایمر + دماسنج با میکرو کنترل ATmega8 و نمایش گر LCD و سنسور LM35

            باسلام
            مهندس من دنبال یه ساعت avr می گردم حال برای تبدیل تایمر این پروژه به ساعت avr باید چه کاری انجام بدم؟؟؟
            ببخشید اگه سوالم مبتدیه چون من هنوز از avr چیز زیادی سر در نمیارم!!!!
            ممنون از شما

            دیدگاه


              #7
              پاسخ : تایمر + دماسنج با میکرو کنترل ATmega8 و نمایش گر LCD و سنسور LM35

              نوشته اصلی توسط r8za نمایش پست ها
              باسلام
              مهندس من دنبال یه ساعت avr می گردم حال برای تبدیل تایمر این پروژه به ساعت avr باید چه کاری انجام بدم؟؟؟
              ببخشید اگه سوالم مبتدیه چون من هنوز از avr چیز زیادی سر در نمیارم!!!!
              ممنون از شما
              سلام
              اگه فقط ساعت میخوای باید دوتا کلید واسش بزاری تا بشه زمان رو تنظیم کرداگه بقیه چیزاشو کاریش نداری می تونی پاک کنی خط هاشو
              این قسمت هایی که میزارم مربوط به ساعتشه:
              interrupt [TIM0_OVF] void timer0_ovf_isr(void)
              {

              c++;

              if(c==3906){
              s++;
              c=0;
              }

              }
              این قسمت مربوط به تایمره که میکرو میشماره وسر عددی که واسش مشخص کردیم یه وقفه ایجاد می کنه هر وقفه میشه یه ثانیه


              if(s>59){m++;s=0;}
              if(m>59){h++;m=0;}
              if(h>23){h=0;m=0;s=0;g++;}
              sprintf(b,"%d:%d:%d ",h,m,s);
              lcd_gotoxy(0,0);
              lcd_puts(b);

              اینجام که دیگه قشنگ معلومه خط اول میگه اگر متغییر s (ثانیه شمار)بیشتر از 59 شد متغییر m (دقیقه شمار) یک عدد بهش اضافه بشه

              و متغییر s بزابر با صفر بشه



              خط بعدی هم میگه اگه دقیقه بیشتر ا ز59شد تغییر h (ساعت شمار) یک عدد بهش اضافه بشه ودقیقه شمار برابر با صفر
              خط بعدیش اگر متغییرh (ساعت شمار) بیشتر از 23شد همه متغییر ما (ثانیه دقیقه وساعت) صفر بشن. همین
              خط بعدی هم متغییر رشته ایه واسه نشون دادن متغییر های ساعت و دقیقه وثانیه
              خط بعدیش محل نشون دادنشو توی ال سی دی مشخص می کنه (ستون 0 از ردیف 0)
              خط بعدی هم میگه متغییر رشته از b رو نشون بده
              امیدوارم خوب توضیح داده باشم
              موفق باشید
              Proudly @real_ahmadi
              #real_ahmadi

              واسه اسمت بجنگ

              دیدگاه


                #8
                پاسخ : تایمر + دماسنج با میکرو کنترل ATmega8 و نمایش گر LCD و سنسور LM35

                ممنون مهندس ولی چند تا سوال دارم
                1-نباید براش ال سی دی رو تعریف کرد؟
                2-کریستال نیاز نداره؟
                3-کلید ها رو با چه دستوری باید براش تعریف کنم؟
                بازم ممنون

                دیدگاه


                  #9
                  پاسخ : تایمر + دماسنج با میکرو کنترل ATmega8 و نمایش گر LCD و سنسور LM35

                  نوشته اصلی توسط r8za نمایش پست ها
                  ممنون مهندس ولی چند تا سوال دارم
                  1-نباید براش ال سی دی رو تعریف کرد؟
                  2-کریستال نیاز نداره؟
                  3-کلید ها رو با چه دستوری باید براش تعریف کنم؟
                  بازم ممنون
                  می بخشی که دیر شد
                  1 چرا دیگه در خطهای اول برنامه نویسی (اون بالا کد رو گزاشتم)نگاه کنی با این دستور ال سی دی رو تعریف می کنیم:
                  #include alcd.h>
                  2 چرا از کریستال داخلی میکرو میشه استفاده کرد از خارجی هم میشه که من در مدار دوم خارجی گزاشتم و گفتم چون کریستال داخلی میکرو پایدار نیست از کریستال خارجی در کار های دقیق و حساس باید استفاده بشه
                  3 مثلا واسه تنظیم دقیقه:

                  if(PINB.2==0){m++;delay_ms(250);

                  ,واسه تنظیم ساعت هم :

                  if(PINB.3==0){h++;delay_ms(500);

                  خط ها میگن که اگر پین B پایه ی 2 برابر با 0منطقی شد یک عدد به دقیقه اضافه کن.واسه ساعت هم همینطور ولی میگه اگه پین بی پایه ی 3برابر با 0 منطقی شد یک عدد به h اضافه کن h متغییر ساعت هستش.
                  موفق باشید
                  Proudly @real_ahmadi
                  #real_ahmadi

                  واسه اسمت بجنگ

                  دیدگاه


                    #10
                    پاسخ : [پروژه]تایمر + دماسنج با میکرو کنترلر ATmega8 و نمایش گر LCD و سنسور LM35و خروجی فن اتوماتیک

                    نوشته اصلی توسط مهندس احمدی نمایش پست ها
                    محتوا برای شما نمایان شد ، لذت ببرید!
                    مهندس احمدی شیوه جدیدی واسه گرفتن زورکی تشکر جسته.اخه رکوردتشکرانجمن دست شماست.
                    eshop-hodhod.ir

                    دیدگاه


                      #11
                      پاسخ : تایمر + دماسنج با میکرو کنترل ATmega8 و نمایش گر LCD و سنسور LM35

                      مهندس احمدی جون اگه 100 تا دیگه تشکر بگیری اونوقت آور فلو میشه ها
                      اون وقت دوباره باید از 0 شروع کنی . . .

                      اگه خواستم برم جزیره ( یگان ) تو رو هم با خودم میبرم

                      والا . . .
                      آرزوی سرافرازی برای ایران عزیز . . .


                      دیدگاه


                        #12
                        پاسخ : تایمر + دماسنج با میکرو کنترل ATmega8 و نمایش گر LCD و سنسور LM35

                        نوشته اصلی توسط Namvar14 نمایش پست ها
                        مهندس احمدی شیوه جدیدی واسه گرفتن زورکی تشکر جسته.اخه رکوردتشکرانجمن دست شماست.
                        دست شما درد نکنه امار مارو میگیرین حالا دیگه؟؟


                        نوشته اصلی توسط rezamajdi نمایش پست ها
                        مهندس احمدی جون اگه 100 تا دیگه تشکر بگیری اونوقت آور فلو میشه ها
                        اون وقت دوباره باید از 0 شروع کنی . . .

                        اگه خواستم برم جزیره ( یگان ) تو رو هم با خودم میبرم

                        والا . . .
                        حرفی ندارم واسه گفتن اصلا....

                        حالا که اینجوره دیگه واستون پروژه نمی زارم والا خیلیم دلتون بخواد اصلا چرا اسپم میدین شما؟؟؟
                        Proudly @real_ahmadi
                        #real_ahmadi

                        واسه اسمت بجنگ

                        دیدگاه


                          #13
                          پاسخ : [پروژه]تایمر + دماسنج با میکرو کنترلر ATmega8 و نمایش گر LCD و سنسور LM35و خروجی فن اتوماتیک

                          سلام، کسی میتونه کمک کنه!؟؟
                          من میخوام دمارو روی سون سگمنت 4 تایی نمایش بدم. برای تفکیک ارقام دما این کدو نوشتم:

                          while(1) {
                          m=read_adc(0);
                          h=m*(5/1023);
                          h1=h%10;
                          h=h/10;
                          h2=h%10;
                          h=h/10;
                          h3=h%10;
                          h4=h/10;




                          PORTC=0xff; PORTC=0xfe; PORTB=x[h4]; delay_ms(10);
                          PORTC=0xff; PORTC=0xfd; PORTB=x[h3]; delay_ms(10);
                          PORTC=0xff; PORTC=0xfc; PORTB=x[h2]; delay_ms(10);
                          PORTC=0xff; PORTC=0xfb; PORTB=x[h1]; delay_ms(10);

                          البته اول برنامه، کد هگز برای ارقام 0 تا 9 روی سگمنت کاتدمشترک هم نوشتم.
                          اما توو پروتئوس اجرا نمیشه برنامم. نمیدونم ایرادش کجاست؟؟؟؟؟؟؟؟؟

                          دیدگاه


                            #14
                            پاسخ : تایمر + دماسنج با میکرو کنترل ATmega8 و نمایش گر LCD و سنسور LM35

                            سلام مهندس.خسته نباشی
                            من اگه بخوام مشابه همین پروژه رو ببندم با این تفاوت که روز شمارم حتی موقعی که برق قطع هس عددش رو ذخیره کنه و مجدد از اون عدد بشماره، باید چیکار کنم؟ینی اگه روز 12 ام برق قطع شد مدار من وقتی مجدد برق اومد نره از صفر شروع به شمارش کنه، همون از روز 12ام ادامه بده

                            دلیل: ادغام دو پست برای جلوگیری از اسپم

                            سلام مهندس.خسته نباشی
                            من اگه بخوام مشابه همین پروژه رو ببندم با این تفاوت که روز شمارم حتی موقعی که برق قطع هس عددش رو ذخیره کنه و مجدد از اون عدد بشماره، باید چیکار کنم؟ینی اگه روز 12 ام برق قطع شد مدار من وقتی مجدد برق اومد نره از صفر شروع به شمارش کنه، همون از روز 12ام ادامه بده

                            دیدگاه


                              #15
                              پاسخ : تایمر + دماسنج با میکرو کنترل ATmega8 و نمایش گر LCD و سنسور LM35

                              نوشته اصلی توسط 23hossein نمایش پست ها
                              سلام مهندس.خسته نباشی
                              من اگه بخوام مشابه همین پروژه رو ببندم با این تفاوت که روز شمارم حتی موقعی که برق قطع هس عددش رو ذخیره کنه و مجدد از اون عدد بشماره، باید چیکار کنم؟ینی اگه روز 12 ام برق قطع شد مدار من وقتی مجدد برق اومد نره از صفر شروع به شمارش کنه، همون از روز 12ام ادامه بده

                              دلیل: ادغام دو پست برای جلوگیری از اسپم

                              سلام مهندس.خسته نباشی
                              من اگه بخوام مشابه همین پروژه رو ببندم با این تفاوت که روز شمارم حتی موقعی که برق قطع هس عددش رو ذخیره کنه و مجدد از اون عدد بشماره، باید چیکار کنم؟ینی اگه روز 12 ام برق قطع شد مدار من وقتی مجدد برق اومد نره از صفر شروع به شمارش کنه، همون از روز 12ام ادامه بده
                              شما دو عدد دیود از نوع فست که ولتاژ استانه 0.2 ولت دارند رو
                              بردار.. یکی رو به پایه مثبت و یکی دیگه پایه منفی میکرو وصل کن
                              یعنی جریان از طریق این 2تا دیود وارد پایه های مثبت و منفی میکرو بشه..
                              حالا یک خازن 2200 میکرو به پایه های تغذیه میکرو اضافه کن..
                              اینجوری میکرو چند ثانیه بعد از قطع برق هم روشن میمونه..
                              حالا یکی از پایه های وقفه میکرو رو بزار حالت ورودی.. وصل کن به مثبت تغذیه.
                              .الان توی نرم افزار وقفه رو فعال میکنی با سطح صفر ..
                              وقتی برق بره این وقفه زده میشه .. چون تغذیه صفر شده.. ولی میکرو
                              هنوز روشنه.. حالا تو برنامه تو زیربرنامه وقفه آخرین عدد رو در حافظه
                              eeprom میکرو ذخیره کن ..
                              در ابتدای برنامه هم اینجور تغییر میدی که از حافظه eeprom عدد رو
                              بخونه و ادامه بده ..
                              اینکار را روی چندتا پروژه انجام دادم و عملی هست ..

                              دیدگاه

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