اطلاعیه

Collapse
No announcement yet.

وصل کردن کیپد به atmega16

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

    وصل کردن کیپد به atmega16

    دوستان من کیپد رو به پورت A میکرو وصل کردم و برنامشو نوشتم میخواستم ببینم مثل وثتی که lcd وصل میکنیم تو codewizard یه تنظیمات باید بکنیم واسه اینم لازمه یا نه خیلی اورژانسیه لطفا کمک کنین :cry:

    #2
    پاسخ : وصل کردن کیپد به atmega16

    نه باید ارایه براش تعریف کنی یا این که تابع بنویسی در کد ویژن نداره

    دیدگاه


      #3
      پاسخ : وصل کردن کیپد به atmega16

      خب من برنامه ای که نوشتم اینه نمیدونم مشکلش کجاس که تو proteus فقط keypad کار نمیکنه
      کد:
      /*****************************************************
      This program was produced by the
      CodeWizardAVR V2.05.0 Advanced
      Automatic Program Generator
      © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
      http://www.hpinfotech.com
      
      Project : 
      Version : 
      Date  : 2014/07/24
      Author : www.Eca.ir *** www.Webkade.ir
      Company : 
      Comments: 
      
      
      Chip type        : ATmega16L
      Program type      : Application
      AVR Core Clock frequency: 1.000000 MHz
      Memory model      : Small
      External RAM size    : 0
      Data Stack size     : 256
      *****************************************************/
      
      #include <mega16.h>
      #include <delay.h>
      
      // Alphanumeric LCD Module functions
      #asm
      .equ __lcd_port=0x15 ;PORTB
      #endasm
      #include <alcd.h>
      
      // Standard Input/Output functions
      #include <stdio.h>
      
      // Declare your global variables here
      #define c1 PINB.4 
      #define c2 PINB.5 
      #define c3 PINB.6 
      #define c4 PINB.7 
       unsigned char scan[4]={0XFE,0XFD,0XFB,0XF7};
       unsigned char arrkey[16]={
       7,8,9,15,
       4,5,6,14,
       1,2,3,13,
       10,0,11,12};
       char key;
       
        unsigned char keypad(){
         unsigned char r,b;
         while(1){
          for (r=0; r<4; r++){
           b=4;
           PORTB=scan[r];
           if(c1==0) b=0;
           if(c2==0) b=1;
           if(c3==0) b=2;
           if(c4==0) b=3;
           
           if (!(b==4)){
            key=arrkey[(r*4)+b];
            while(c1==0);
            while(c2==0);
            while(c3==0);
            while(c4==0);
            delay_ms(50);
            return key;
           }
          }
         }
        }
      
      void main(void)
      {
      // Declare your local variables here
      unsigned char str[16]; 
      int x,y,z,e,sum,temp;
      char n1,n2,n3,n4,n5,tx;
      float u,r;
      // 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=0xFF
      // OC0 output: Disconnected
      TCCR0=0x00;
      TCNT0=0x00;
      OCR0=0x00;
      
      // Timer/Counter 1 initialization
      // Clock source: System Clock
      // Clock value: Timer1 Stopped
      // Mode: Normal top=0xFFFF
      // OC1A output: Discon.
      // OC1B output: Discon.
      // 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=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: Timer2 Stopped
      // Mode: Normal top=0xFF
      // OC2 output: Disconnected
      ASSR=0x00;
      TCCR2=0x00;
      TCNT2=0x00;
      OCR2=0x00;
      
      // External Interrupt(s) initialization
      // INT0: Off
      // INT1: Off
      // INT2: Off
      MCUCR=0x00;
      MCUCSR=0x00;
      
      // Timer(s)/Counter(s) Interrupt(s) initialization
      TIMSK=0x00;
      
      // USART initialization
      // Communication Parameters: 8 Data, 1 Stop, No Parity
      // USART Receiver: On
      // USART Transmitter: On
      // USART Mode: Asynchronous
      // USART Baud Rate: 9600
      UCSRA=0x00;
      UCSRB=0x18;
      UCSRC=0x86;
      UBRRH=0x00;
      UBRRL=0x06;
      
      // Analog Comparator initialization
      // Analog Comparator: Off
      // Analog Comparator Input Capture by Timer/Counter 1: Off
      ACSR=0x80;
      SFIOR=0x00;
      
      // ADC initialization
      // ADC disabled
      ADCSRA=0x00;
      
      // SPI initialization
      // SPI disabled
      SPCR=0x00;
      
      // TWI initialization
      // TWI disabled
      TWCR=0x00;
      
      // Alphanumeric LCD initialization
      // Connections 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();
      tx=1;
      putchar(tx);
      tx=0;
      r=getchar();
            e=getchar();
            lcd_clear();
            r=r*100;
            r=r+e;
            r=r/100;
      u=r*100;
          x=u;
          x=x/100;
          y=x*100;
          y=u-y;
         
         sprintf(str,"temp=%d.%d",x,y);
                            
         
         lcd_puts(str);
         delay_ms(100);
      while (1)
         {
         
         keypad(); 
      
         if(key==15)
         { 
          
         n1=0 ;
         n2=0; 
         n3=0;
         n4=0;
         n5=0;
         if(n1==0)
         { 
         lcd_clear();
         lcd_putsf("control=***.**");
            delay_ms(1000);
            } 
            keypad(); 
            n1=key;
            if(n1<=9&&n2==0)
            { 
             lcd_clear();
             sprintf(str,"control=%d**.**",n1);  
             lcd_puts(str);
         delay_ms(100); 
         }       
         keypad(); 
         n2=key;
            if(n2<=9&&n3==0)
            { 
             lcd_clear();
             sprintf(str,"control=%d%d*.**",n1,n2);  
             lcd_puts(str);
         delay_ms(100); 
         } 
          keypad(); 
         n3=key;
            if(n3<=9&&n4==0)
            { 
             lcd_clear();
             sprintf(str,"control=%d%d%d.**",n1,n2,n3);  
             lcd_puts(str);
         delay_ms(100); 
         }       
          keypad(); 
         n4=key;
            if(n4<=9&&n5==0)
            { 
             lcd_clear();
             sprintf(str,"control=%d%d%d.%d*",n1,n2,n3,n4);  
             lcd_puts(str);
         delay_ms(100); 
         } 
         keypad(); 
         n5=key;
            if(n5<=9)
            { 
             lcd_clear();
             sprintf(str,"control=%d%d%d.%d%d",n1,n2,n3,n4,n5);  
             lcd_puts(str);
         delay_ms(100); 
         } 
         lcd_gotoxy(0,1);
         lcd_putsf("press enter");
         delay_ms(500);
         keypad();
         if(key==14)
         {       
         lcd_clear();
         lcd_gotoxy(0,0);
         u=r*100;
          x=u;
          x=x/100;
          y=x*100;
          y=u-y;
         
         sprintf(str,"temp=%d.%d",x,y);
                            
          
         lcd_puts(str);
         lcd_gotoxy(0,1);
         sprintf(str,"control=%d%d%d.%d%d",n1,n2,n3,n4,n5);  
             lcd_puts(str);
         
         delay_ms(100); 
         temp=0;
         sum=n1*100;
         temp=temp+sum;
         sum=n2*10;
         temp=temp+sum;
         sum=n3;
         temp=temp+sum;
         tx=20;
         putchar(tx);
         tx=temp;
         putchar(tx);
         tx=0;
         
         }
         
                       
            }
            if(key==10)
            { 
            tx=1;
      putchar(tx);
      tx=0;
            r=getchar();
            e=getchar();
            lcd_clear();
            r=r*100;
            r=r+e;
            r=r/100;
      u=r*100;
          x=u;
          x=x/100;
          y=x*100;
          y=u-y;
          lcd_gotoxy(0,0);
         sprintf(str,"temp=%d.%d",x,y);
                            
         
         lcd_puts(str);
         
         lcd_gotoxy(0,1);
         sprintf(str,"control=%d%d%d.%d%d",n1,n2,n3,n4,n5);  
         lcd_puts(str);
         delay_ms(100);
         }
             
      
         };
         }

      دیدگاه


        #4
        پاسخ : وصل کردن کیپد به atmega16

        نباید pin های پورت A رو خروجی تعریف کنم؟

        دیدگاه


          #5
          پاسخ : وصل کردن کیپد به atmega16

          اون طوری که از کدات معلومه بتو برنامت از ارتباط usart استفاده کردی
          کد های تابع key رو تو پروژه زیر نگاه کن
          http://dmf313.ir/%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%B9%D8%AF%D8%AF-%D8%AF%D8%B1-lcd-%D8%A8%D8%A7-%D8%B5%D9%81%D8%AD%D9%87-%DA%A9%D9%84%DB%8C%D8%AF/

          فکر کنم همون کد های کیپد برنامت مشکل داره که ....

          موفق باشید.
          اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

          اگه دوس دارید سریع به جواب برسید :
          1) قبل از پرسیدن سوال، بسرچید.
          2) سوالاتون رو با جزئیات کامل مطرح کنید.

          دیدگاه


            #6
            پاسخ : وصل کردن کیپد به atmega16

            متشکرم :wow:

            دیدگاه


              #7
              پاسخ : وصل کردن کیپد به atmega16

              یه سوال اون طوری که از کدات معلومه بتو برنامت از ارتباط usart استفاده کردی
              میتونی برنامت رو برام بفرستی؟؟؟؟
              اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

              اگه دوس دارید سریع به جواب برسید :
              1) قبل از پرسیدن سوال، بسرچید.
              2) سوالاتون رو با جزئیات کامل مطرح کنید.

              دیدگاه


                #8
                پاسخ : وصل کردن کیپد به atmega16

                ببخشید منم یه برنامه با کی پد نوشتم اما در شبیه سازی کار نمیکنه برنامه عدد رو از کیپد میگیره و روی سون سگمنت نشون میده
                کد:
                [left]#include <mega32.h>
                #include <delay.h>
                
                
                flash unsigned char seg_code[16]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
                flash unsigned char key_code[16]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
                volatile unsigned char keycode=0;
                void main()
                {
                  unsigned char temp_keycode=keycode;
                  DDRC=0xff;
                  PORTC=0x40;
                  TCCR0=0x03;
                  TIMSK=0x01;
                  #asm ("sei");
                  while(1)
                  {
                    if(temp_keycode!=keycode && keycode!=0xff)
                    {
                      temp_keycode=keycode;
                      PORTC=seg_code[temp_keycode];
                    }
                  }
                }
                interrupt[TIM0_OVF] void timer0_overflow(void)
                {
                  unsigned char i,t=0x00;
                  DDRD=0xf0;
                  PORTD=0x0f;
                  delay_us(5);
                  t=(PIND & 0x0f);
                  DDRD=0x0f;
                  PORTD=0xf0;
                  delay_us(5);
                  t|=(PIND & 0xf0);
                  for(i=0;i<16;i++)
                  {
                  if(t==key_code[i])
                    keycode=i;
                  }
                
                }[/left]

                دیدگاه


                  #9
                  پاسخ : وصل کردن کیپد به atmega16

                  کدات رو درست بنویس>>>کد هات رو بین بزار


                  .
                  .
                  .
                  .


                  کد:
                  #include <mega32.h>
                  #include <delay.h>
                  
                  
                  flash unsigned char seg_code[16]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
                  flash unsigned char key_code[16]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
                  volatile unsigned char keycode=0;
                  void main()
                  {
                    unsigned char temp_keycode=keycode;
                    DDRC=0xff;
                    PORTC=0x40;
                    TCCR0=0x03;
                    TIMSK=0x01;
                    #asm ("sei");
                    while(1)
                    {
                      if(temp_keycode!=keycode && keycode!=0xff)
                      {
                        temp_keycode=keycode;
                        PORTC=seg_code[temp_keycode];
                      }
                    }
                  }
                  interrupt[TIM0_OVF] void timer0_overflow(void)
                  {
                    unsigned char i,t=0x00;
                    DDRD=0xf0;
                    PORTD=0x0f;
                    delay_us(5);
                    t=(PIND & 0x0f);
                    DDRD=0x0f;
                    PORTD=0xf0;
                    delay_us(5);
                    t|=(PIND & 0xf0);
                    for(i=0;i<16;i++)
                    {
                    if(t==key_code)
                      keycode=i;
                    }
                  
                  }
                  اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

                  اگه دوس دارید سریع به جواب برسید :
                  1) قبل از پرسیدن سوال، بسرچید.
                  2) سوالاتون رو با جزئیات کامل مطرح کنید.

                  دیدگاه


                    #10
                    پاسخ : وصل کردن کیپد به atmega16

                    خوب مشکلش چیه؟
                    رفته رو اعصابم :angry:
                    کی پد رو که میشه به هر پورت دلخواهی وصل کرد؟

                    دیدگاه


                      #11
                      پاسخ : وصل کردن کیپد به atmega16

                      نوشته اصلی توسط mahdi222
                      خوب مشکلش چیه؟
                      رفته رو اعصابم :angry:
                      کی پد رو که میشه به هر پورت دلخواهی وصل کرد؟
                      تو پروتئوس آره ولی تو واقعیت اگه به پورت سی وصل کنی باید فیوز بین jtag رو غیر فعال کنی......
                      اگه مشکلش حل نشد شب در خدمتیم.....الان دارم رو یه چیز دیگه(رسم نمودار تو glcd کار میکنم/>>>شرمنده)
                      اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

                      اگه دوس دارید سریع به جواب برسید :
                      1) قبل از پرسیدن سوال، بسرچید.
                      2) سوالاتون رو با جزئیات کامل مطرح کنید.

                      دیدگاه

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