اطلاعیه

Collapse
No announcement yet.

لطفا کمک کنید

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

    لطفا کمک کنید

    با سلام

    من میخوام یک کلید شستی به پایه اینتراپت صفر میکرو ATMEGA 16وصل کنم وبه این کلید ولتاژ 5 ولت بدم زمانی که کلید فشار بدم عدد یک روی ال سی دی نمایش بده و زمانی که دستم از روی شستی بردارم روی ال سی دی عدد دو نمایش بده .در ضمن برنامه با اینتراپت و بسکام باشه لطفا برنامه برایم بنویسید ممنون
    :angry:

    #2
    پاسخ : لطفا کمک کنید

    درود بر شما

    خوب می تونی از وقفه تغییر حالت استفاده کنی یا اون بیت رو اونقدر چک کنی وقتی فشار داده شد عدد 1 روی ال سی دی نمایش داده بشه و بعد بره توی حلقه اونقدر توش بچرخه تا این بیت دوباره صفر بشه و قتی صفر شد از حلقه بیاد بیرون و ال سی دی عدد 2 رو نمایش بده و کار دیگه رو انجام بده یا برگرده دوباره این بیت رو چک کنه تا 1 شه و وقتی 1 شد....
    متاسفانه من با AVR کار نکردم! :redface:

    دیدگاه


      #3
      پاسخ : لطفا کمک کنید

      ممنون از پاسخ شما ولی من برنامه اونو میخوام :cry2:

      دیدگاه


        #4
        پاسخ : لطفا کمک کنید

        من بسکام کار نکردم، اگه سی(کدویژن) بدردت میخوره بنویسم بذارم برات؟

        دیدگاه


          #5
          پاسخ : لطفا کمک کنید

          lممنون از لطف شما حالا با زبان سی بنویسید چون من خودمم با سی کار کردم شاید تونستم به بیسیک تبدیلش کنم

          دیدگاه


            #6
            پاسخ : لطفا کمک کنید

            سلام دادا.
            شاید این بدردت بخوره. lcd رو دادم به پورت A

            کد:
            #include <mega16.h>
            
            // Alphanumeric LCD Module functions
            #asm
              .equ __lcd_port=0x1B ;PORTA
            #endasm
            #include <lcd.h>
            #include <delay.h> 
            
            // External Interrupt 0 service routine
            interrupt [EXT_INT0] void ext_int0_isr(void)
            {
            
            lcd_clear();
            lcd_putsf("1");
            
            }
            
            // Declare your global variables here
            
            void main(void)
            {
            // Declare your local variables here
            
            // Input/Output Ports initialization
            // Port A initialization
            // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
            // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
            PORTA=0x00;
            DDRA=0x00;
            
            // Port B initialization
            // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
            // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
            PORTB=0x00;
            DDRB=0x00;
            
            // Port C initialization
            // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
            // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
            PORTC=0x00;
            DDRC=0x00;
            
            // Port D initialization
            // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
            // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
            PORTD=0x00;
            DDRD=0x00;
            
            // Timer/Counter 0 initialization
            // Clock source: System Clock
            // Clock value: Timer 0 Stopped
            // Mode: Normal top=FFh
            // OC0 output: Disconnected
            TCCR0=0x00;
            TCNT0=0x00;
            OCR0=0x00;
            
            // Timer/Counter 1 initialization
            // Clock source: System Clock
            // Clock value: Timer 1 Stopped
            // Mode: Normal top=FFFFh
            // OC1A output: Discon.
            // OC1B output: Discon.
            // Noise Canceler: Off
            // Input Capture on Falling Edge
            // Timer 1 Overflow Interrupt: Off
            // Input Capture Interrupt: Off
            // Compare A Match Interrupt: Off
            // Compare B Match Interrupt: Off
            TCCR1A=0x00;
            TCCR1B=0x00;
            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: Timer 2 Stopped
            // Mode: Normal top=FFh
            // OC2 output: Disconnected
            ASSR=0x00;
            TCCR2=0x00;
            TCNT2=0x00;
            OCR2=0x00;
            
            // External Interrupt(s) initialization
            // INT0: On
            // INT0 Mode: Rising Edge
            // INT1: Off
            // INT2: Off
            GICR|=0x40;
            MCUCR=0x03;
            MCUCSR=0x00;
            GIFR=0x40;
            
            // Timer(s)/Counter(s) Interrupt(s) initialization
            TIMSK=0x00;
            
            // Analog Comparator initialization
            // Analog Comparator: Off
            // Analog Comparator Input Capture by Timer/Counter 1: Off
            ACSR=0x80;
            SFIOR=0x00;
            
            // LCD module initialization
            lcd_init(16);
            
            // Global enable interrupts
            #asm("sei")
            
            while (1)
               {
               lcd_clear();
               lcd_putsf("2");
               delay_ms(200);
            
               };
            }
            تشکر لازم نیست!

            دیدگاه


              #7
              پاسخ : لطفا کمک کنید

              به کلید 5 ولت نده!بلکه صفر ولت بدهف تا هر وقت که کلیدو نگه میداری و پایه به زمین وصل میشه بتونی از وقفه در مد low level استفاده کنی، یعنی تا وقتی که پایه به صفر وصله هی وقفه اتفاق میوفته و روی ال سی دی عدد 1 نشون داده میشه، هر وقتم که دستتو از روش برداری که پایه دیگه صفر ولت دریافت نکنه میره تو برنامه اصلی و عدد 2 رو نشون میده. ال سی دی به پورت A وصله.
              برنامه ای که این پایین تو کدویژن نوشتم همینجوریه و با سطح صفر وقفه فعال میشه
              کد:
              #include <mega16.h>
              #include <delay.h>
              // Alphanumeric LCD Module functions
              #asm
                .equ __lcd_port=0x1B
              #endasm
              #include <lcd.h>
              
              // External Interrupt 0 service routine
              interrupt [EXT_INT0] void ext_int0_isr(void)
              {
              lcd_clear();
              lcd_putsf("1");
              delay_ms(50);
              
              }
              
              // Declare your global variables here
              
              void main(void)
              {
              // Declare your local variables here
              
              // Input/Output Ports initialization
              // Port A initialization
              // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
              // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
              PORTA=0x00;
              DDRA=0x00;
              
              // Port B initialization
              // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
              // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
              PORTB=0x00;
              DDRB=0x00;
              
              // Port C initialization
              // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
              // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
              PORTC=0x00;
              DDRC=0x00;
              
              // Port D initialization
              // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In 
              // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T 
              PORTD=0x00;
              DDRD=0x00;
              
              // Timer/Counter 0 initialization
              // Clock source: System Clock
              // Clock value: Timer 0 Stopped
              // Mode: Normal top=FFh
              // OC0 output: Disconnected
              TCCR0=0x00;
              TCNT0=0x00;
              OCR0=0x00;
              
              // Timer/Counter 1 initialization
              // Clock source: System Clock
              // Clock value: Timer 1 Stopped
              // Mode: Normal top=FFFFh
              // OC1A output: Discon.
              // OC1B output: Discon.
              // Noise Canceler: Off
              // Input Capture on Falling Edge
              TCCR1A=0x00;
              TCCR1B=0x00;
              TCNT1H=0x00;
              TCNT1L=0x00;
              OCR1AH=0x00;
              OCR1AL=0x00;
              OCR1BH=0x00;
              OCR1BL=0x00;
              
              // Timer/Counter 2 initialization
              // Clock source: System Clock
              // Clock value: Timer 2 Stopped
              // Mode: Normal top=FFh
              // OC2 output: Disconnected
              ASSR=0x00;
              TCCR2=0x00;
              TCNT2=0x00;
              OCR2=0x00;
              
              // External Interrupt(s) initialization
              // INT0: On
              // INT0 Mode: Low level
              // INT1: Off
              // INT2: Off
              GICR|=0x40;
              MCUCR=0x00;
              MCUCSR=0x00;
              GIFR=0x40;
              
              // Timer(s)/Counter(s) Interrupt(s) initialization
              TIMSK=0x00;
              
              // Analog Comparator initialization
              // Analog Comparator: Off
              // Analog Comparator Input Capture by Timer/Counter 1: Off
              // Analog Comparator Output: Off
              ACSR=0x80;
              SFIOR=0x00;
              
              // LCD module initialization
              lcd_init(16);
              
              // Global enable interrupts
              #asm("sei")
              
              while (1)
                 {
                 lcd_clear();
                 lcd_putsf("2");
                 delay_ms(500);
              
                 };
              }

              دیدگاه


                #8
                پاسخ : لطفا کمک کنید

                سلام
                دوست عزیز شما به قول دوستمون بهتره کلید رو به زمین وصل کنی تا بتونی از Pull Up داخلی میکرو استفاده کنی و تو وقفه گیر نکنی !!
                اگه با این حالت مشکلی نداری من برنامه شو تو بیسیک همین الآن می نویسم و بهت می دم !!
                البته کمی باید صبر کنی !! چون همون طور که می دونی امتحانات شروع شده :cry2: و ما هم چون تو طول ترم نخوندیم وقت خیلی کمی داریم !
                اگه هم واقعاً اصرار به استفاده از 5 ولت داری باید از Pull Down خارجی استفاده کنی !!!
                در هر صورت خبرم کن !!!
                موفق باشی :job:
                Aristar Group - Always And Forever

                دیدگاه

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