اطلاعیه

Collapse
No announcement yet.

تابلو روان با دیکدر

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

    تابلو روان با دیکدر

    سلام دوستان
    من میخوام یه تابلو روان8*16 بسازم که توی سخت افزارش به جای لچ از ic دیکدر استفاده بشه.
    در حال حاضر یه مدار دارم که توش از آی سی 74hc573 استفاده شده.ولی استادم گفته حتمآ از دیکدر استفاده کن.
    در ضمن برای برنامه نویسیشم که به زبان c هست.احتیاج به کمک دارم.
    ممنون میشم جوابمو زود بدین.

    #2
    پاسخ : تابلو روان با دیکدر

    نوشته اصلی توسط np_1990k
    سلام دوستان
    من میخوام یه تابلو روان8*16 بسازم که توی سخت افزارش به جای لچ از ic دیکدر استفاده بشه.
    در حال حاضر یه مدار دارم که توش از آی سی 74hc573 استفاده شده.ولی استادم گفته حتمآ از دیکدر استفاده کن.
    در ضمن برای برنامه نویسیشم که به زبان c هست.احتیاج به کمک دارم.
    ممنون میشم جوابمو زود بدین.
    خب یه دیکدر 16*4 لازم داری که به ستون ها میدی و بعدش میتونی داده 8 بیتی به سطرها بدی
    برعکس هم میشه ولی اونطوری چون 2 بایت باید به خروجی بدی منطقی نیست
    [glow=red,2,300]تاپيک هاي ايجاد شده[/glow]

    دیدگاه


      #3
      پاسخ : تابلو روان با دیکدر

      ممنون.
      میشه بهم بگین توی سخت افزارش آیا حتمآ لازمه که از آی سی uln2803 واسه جریان دهی استفاده کنم یا نه؟
      شماره آی سی دیکدر رو هو اگه بهم بگین ممنون میشم.
      و سوال آخرم اینکه توی برنامش که به زبان c هست چه تغییری باید ایجاد کنم؟

      دیدگاه


        #4
        پاسخ : تابلو روان با دیکدر

        نوشته اصلی توسط np_1990k
        ممنون.
        میشه بهم بگین توی سخت افزارش آیا حتمآ لازمه که از آی سی uln2803 واسه جریان دهی استفاده کنم یا نه؟
        شماره آی سی دیکدر رو هو اگه بهم بگین ممنون میشم.
        و سوال آخرم اینکه توی برنامش که به زبان c هست چه تغییری باید ایجاد کنم؟
        74154 دیکدر 4*16 هست ولی منطق خروجی Low هست
        پیشنهاد بهتر استفاده از 74159 هست که خروجی Open collector داره
        حتما نباید از ULN استفاده کنین ولی در کل برای تقویت جریان باید کاری کنین
        برنامه هم به نحوه طراحی شما مربوط میشه
        [glow=red,2,300]تاپيک هاي ايجاد شده[/glow]

        دیدگاه


          #5
          پاسخ : تابلو روان با دیکدر

          یه برنامه ی کلی دارم که البتهsearch کردم.
          حالا دقیقا نمیدونم باید چی رو تغییر بدم.
          کد:
          #include <mega8.h>
          #include <delay.h>
          // Declare your global variables here
          #define scan PORTD
          #define dat PORTB
          #define le1 PORTC.0
          #define le2 PORTC.1
          #define endi 2
          #define endj 8
          #define endp 8
          
          
          flash unsigned char buf_len1[9][8]=      //right
          {
          //#define buf_len_ 36
          
          0x00 ,0x01 ,0x04 ,0x04 ,0x04 ,0x04 ,0x04 ,0x04 ,
          0xC0 ,0x80 ,0xBF ,0xA8 ,0xB8 ,0x00 ,0x80 ,0x00 ,
          0x30 ,0x00 ,0xBF ,0xA5 ,0xA5 ,0x80 ,0x83 ,0x81 ,
          0x00 ,0x00 ,0xFF ,0x4C ,0x4F ,0x00 ,0x80 ,0x0F ,
          0x00 ,0x00 ,0xFD ,0x05 ,0xC5 ,0x44 ,0x44 ,0xC4 ,
          0x00 ,0x00 ,0xC7 ,0x45 ,0xC7 ,0x00 ,0x00 ,0x00 ,
          0x30 ,0x00 ,0xFF ,0x16 ,0x17 ,0x00 ,0x00 ,0x07 ,
          0x03 ,0x02 ,0xFA ,0x02 ,0xE2 ,0x20 ,0x20 ,0xE0 ,
          0x9E ,0x10 ,0x1E ,0x12 ,0x1E ,0x00 ,0x00 ,0x00 
          };
          flash unsigned char buf_len2[9][8]=      //lift
          {
          //#define buf_len_ 32
          
          0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
          0x00 ,0x01 ,0x01 ,0x01 ,0x01 ,0x01 ,0x00 ,0x00 ,
          0xE3 ,0x12 ,0x10 ,0x10 ,0x10 ,0x10 ,0xE0 ,0x00 ,
          0xEF ,0x49 ,0x41 ,0x41 ,0x41 ,0x41 ,0xE3 ,0x00 ,
          0x8F ,0x08 ,0x02 ,0x03 ,0x02 ,0x08 ,0x8F ,0x00 ,
          0xC7 ,0x82 ,0x82 ,0x83 ,0x82 ,0x82 ,0xC7 ,0x00 ,
          0x70 ,0x20 ,0x20 ,0xE0 ,0x20 ,0x20 ,0x70 ,0x00 ,
          0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,
          0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 
          };
          unsigned char i=0;
          unsigned char j=0;
          unsigned char p=0;
          unsigned char z=0;
          unsigned char k=0;
          unsigned char endz=0;
          unsigned char endk=0;
          unsigned char char1=0;
          unsigned char char2=0;
          char a[8]={1, 2, 4 ,8 ,16, 32 ,64 ,128 }; //     128,64,32,16,8,4,2,1
          void lift();
          void right();
          void main(void)
          {
          // Declare your local variables here
          
          // Input/Output Ports initialization
          // 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=0xFF;
          
          // Port C initialization
          // Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=Out 
          // State6=T State5=T State4=T State3=T State2=0 State1=0 State0=0 
          PORTC=0x00;
          DDRC=0x07;
          
          // Port D initialization
          // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
          // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
          PORTD=0x00;
          DDRD=0xFF;
          
          // Timer/Counter 0 initialization
          // Clock source: System Clock
          // Clock value: Timer 0 Stopped
          TCCR0=0x00;
          TCNT0=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: Off
          // INT1: Off
          MCUCR=0x00;
          
          // 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;
          
          while (1)
             {  
              endz=15; //speed
              endk=4; //tole matn
              right(); 
               
              endz=15; //speed
              endk=4; //tole matn
              lift();
               
             };
          }
          void lift()
           { 
          //#define endi 2
          //#define endj 8
          //#define endp 8
          //endz=15; //speed
          //endk=7; //tole matn
            for(k=0;k<endk;k++)      //tole matn
              {
               for(p=0;p<endp;p++)   // 8
                {
                 for(z=0;z<endz;z++) //speed
                 {
                  for(j=0;j<endj;j++) // 8   
                  {
                    for(i=0;i<endi;i++)  // 2
                     {
                     char1=~buf_len2[endk-k+i][j]>>p;   //>>p
                     char2=~buf_len2[endk-k-1+i][j]<<8-p ; //<<8-p      
                     dat=(char1+char2);//buf_len1[i][j];
                     if(i==0)
                     le1=1;
                     if(i==1)
                     le2=1;
                     delay_us(1);
                     le1=0;
                     le1=0;
                     }
                  scan=a[j]; //0x01<<j
                  delay_ms(1); 
                  scan=0;   
                  }
                 } 
               }
             } 
           }
          void right()
           {
               for(k=0;k<endk;k++)
               {
               for(p=0;p<endp;p++)
                 {
                  for(z=0;z<endz;z++)
                 {
                 
                  for(j=0;j<endj;j++)    
                  {
                    for(i=0;i<endi;i++)
                     {
                     char1=~buf_len1[i+k][j]<<p;
                     char2=~buf_len1[i+k+1][j]>>8-p;       
                     dat=char1+char2;//buf_len1[i][j];
                     if(i==0)
                     le1=1;
                     if(i==1)
                     le2=1;
                     delay_us(1);
                     le1=0;
                     le1=0;
                     }
                 scan=a[j]; //0x01<<j
                  delay_ms(1); 
                  scan=0;   
                  }
                 } 
               }
               }
           
           }
          البته یه سخت افزاری هم هست که نمیدونم مربوط به این برنامس یا نه؟

          دیدگاه


            #6
            پاسخ : تابلو روان با دیکدر

            نمیدونم شبیه سازی سخت افزارش رو از پرتیوس چه جوری اینجا بذارم؟

            دیدگاه


              #7
              پاسخ : تابلو روان با دیکدر

              دوست عزیز برای اینکار آی سی های دکودر مخصوصش وجود داره که به راحتی کار میکنن .
              MAX7219 یکی از نمونه ها هستش . فقط یک میکرو معمولی با پورت سریال میخود و دیگر هیچ . 8*8 هستش . قابل افزایش هستش . رجوع به دیتاشیت آی سی . شما دیتا رو با پورت سریال میدین به این آی سی و خودش ماتریکس رو نمایش میده . همین !
              ommunicates with target board microcontroller via four SPI lines (DIN, DOUT, CLK and CS)
              موفق و شاد باشید .
              if all men are the same
              then
              why do women take so long to choose one ?

              دیدگاه

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