Thông báo

Collapse
No announcement yet.

Tutorial: Led ma trận bằng hình ảnh (completed)

Collapse
This is a sticky topic.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Nguyên văn bởi lkhanh Xem bài viết
    Các bác cứ choảng nhau loảng xoảng thế này phỏng có ích j chứ, chỉ tội chúng em đọc oong cả đầu! Ko có j là tối ưu, chỉ có cái hợp lí thôi! Mỗi bác có cách riêng của mình, và đều chạy tốt đó thôi.
    Bác Hà cho em hỏi chút về SPI cứng và mềm. Em ko hiểu mà cũng ko chậy đc cái hàm spi() của bác viết. <spi.h> đâu ra vậy bác, Keil C nó bảo ko quen thằng này. Help me, pl!
    Bác Hà viết bằng Codevision AVR mới có hàm spi() trong thư viện <spi.h>, còn Keil C thì ko có sẵn thư viện này, bạn phải tự viết hàm spi() thôi. Nếu chip có hỗ trợ spi cứng thì tốc độ đưa dữ liệu ra nhanh hơn spi mềm.
    Giả sử chip có hỗ trợ spi cứng, hàm spi() trong thư viện spi.h là như sau (Sau khi thiết lập các thông số cho module SPI):
    unsigned char spi(unsigned char data)
    {
    SPI_Buffer=data; // đưa dữ liệu cần truyền vào SPI Buffer
    while(cờ truyền xong chưa dựng); // đợi đến khi truyền hết dữ liệu trong buffer
    return SPI_Buffer; // đọc giá trị trong SPI Buffer
    }
    Nếu chỉ để truyền dữ liệu (truyền ra 595) thì chỉ cần viết thủ tục là được không cần hàm, ko cần giá trị trả về.
    void spi(unsigned char data)
    {
    SPI_Buffer=data; // đưa dữ liệu cần truyền vào SPI Buffer
    while(cờ truyền xong chưa dựng); // đợi đến khi truyền hết dữ liệu trong buffer
    }
    Last edited by hightech_uc; 17-03-2009, 08:25.
    |

    Comment


    • Nguyên văn bởi hightech_uc Xem bài viết
      Không phải là 16x32 pixels đâu, là 8x16 pixels, kích cỡ vật lí mới là 16x32cm, như vậy mặt sau nó có 32 con 595 thôi. Và 32 con 595 này nắm trên một mạch in khoảng 2 dm2 cắm lên trên bo hàn led. Để tôi đưa video của nó lên cho bạn xem.
      http://www.easy-share.com/1904061582/Led_Module.mp4
      Mấy module như thế này chỗ em có nhiều lắm, bác cho em xem làm gì. Em đang cần bác chứng minh điều bác nói cơ.
      Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
      Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.

      Comment


      • Nó đây này. Bạn đếm xem có đủ 32 con 595 không...
        http://www.maxup.vn/tai-ve/dlyce40fj...00001.jpg.html
        http://www.maxup.vn/tai-ve/lmxawtt2u...00002.jpg.html
        http://www.maxup.vn/tai-ve/hcvjvw0kd...00003.jpg.html
        http://www.maxup.vn/tai-ve/1krcudsmb...00004.jpg.html
        Last edited by hightech_uc; 19-03-2009, 08:46.
        |

        Comment


        • Hoặc đây...
          Attached Files
          |

          Comment


          • @hightech_uc: Cái module này đảm bảo nó tốn điện ác bác nhỉ? bác có gì đo thử dòng trung bình (phía 220VAC) khi thắp sáng khoảng 10 module không.

            Bác có module đó kiểm tra cho em chỗ này. Nguồn cung cấp của bác sẽ là 5V. Qua 595 cấp nguồn cho led cũng 5V. Nếu không quét mà cấp nguồn luôn thế này thì led chắc là chóng die. Vậy cái phần hạ áp xuống cho led nằm ở đâu hả bác?

            Cám ơn bác.
            Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
            Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.

            Comment


            • Mỗi chân 595 có 1 con trở mà bạn. Dòng qua mỗi led khoảng 10-15mA, loại led bầu dục này tuổi thọ cao lắm, ko dễ chết đâu...
              |

              Comment


              • Em cũng đang tập tành làm led ma trận. Em mới kiếm được phần mềm tạo mã cho led ma trận, không biết các bác có cần ko nhưng em thấy dùng rất nhanh, đỡ tốn công tính toán nên em cứ đưa lên đây :
                http://www.mediafire.com/download.php?yywtyjhwcnm

                Comment


                • Bạn HÀ ơi. Bạn có thể chỉ rõ hỏn về cách bạn dùng FET 4A với IC đệm 74245 dc ko? Với lại bạn có thể tính thử giúp mình phần công suất nếu mình làm bảng quang báo 2x12 led ma trận, dựa theo cách thiết kể dùng FET va IC đệm của bạn. Cảm ơn bạn nhìu.

                  Comment


                  • AVR cho người mới bắt đầu

                    Em mới bắt đầu học AVR nên có thể nói là chưa biết gì cả.
                    Em muốn hỏi các anh là: AVR có những ưu, nhược điểm, thế mạnh, kiến trúc phần cứng như thế nào so với 8051.
                    Mong các anh giới thiệu rõ hơn về cả Tập thanh ghi của nó nữa để cho những người mới học như em được hiểu rõ hơn.
                    Cảm ơn các tiền bối.

                    Comment


                    • /************************************************** ***
                      This program was produced by the
                      CodeWizardAVR V2.03.4 Standard
                      Automatic Program Generator
                      © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
                      http://www.hpinfotech.com

                      Project :LED MATRIX 8x32 ,quet hang
                      Version :

                      Date : 4/7/2009
                      Author :
                      Company :
                      Comments: 74259+2803 quet hang(K) ,74595 xuat data ra cot(A) ,2 mau (neu muon them mau nua thi cho red=0;blue=0),dung 2 bo dem de hien thi man hinh

                      Chip type : ATmega8
                      Program type : Application
                      Clock frequency : 8.000000 MHz
                      Memory model : Small
                      External RAM size : 0
                      Data Stack size : 256
                      ************************************************** ***/

                      #include <mega8.h>
                      #include <delay.h>

                      #define DATA PORTB.3
                      #define SCL PORTB.4
                      #define SCK PORTB.5

                      #define blue PORTD.0
                      #define red PORTD.1
                      //Bang ma chu so tu 0 den 9 luu vao flash
                      unsigned char flash bang[]={
                      0,0,0,0,112, 0,0,0,0,137, 0,0,0,0,138, 0,0,0,0,136, 0,0,0,0,136, 0,0,0,0,136, 0,0,0,0,115, 0,0,0,0,0,
                      0,0,0,112,135, 0,0,0,137,136, 0,0,0,138,136, 0,0,0,136,129, 0,0,0,136,134, 0,0,0,136,136, 0,0,0,115,239, 0,0,0,0,0,
                      0,0,112,135,62, 0,0,137,136,130, 0,0,138,136,140, 0,0,136,129,2, 0,0,136,134,34, 0,0,136,136,34, 0,0,115,239,156, 0,0,0,0,0,
                      0,112,135,62,131, 0,137,136,130,130, 0,138,136,140,139, 0,136,129,2,136, 0,136,134,34,250, 0,136,136,34,10, 0,115,239,156,9, 0,0,0,0,0,
                      112,135,62,131,225, 137,136,130,130,2, 138,136,140,139,196, 136,129,2,136,39, 136,134,34,250,40, 136,136,34,10,40, 115,239,156,9,199, 0,0,0,0,0,
                      135,62,131,225,62, 136,130,130,2,2, 136,140,139,196,4, 129,2,136,39,8, 134,34,250,40,136, 136,34,10,40,136, 239,156,9,199,8, 0,0,0,0,0,
                      62,131,225,62,113, 130,130,2,2,138, 140,139,196,4,138, 2,136,39,8,113, 34,250,40,136,136, 34,10,40,136,136, 156,9,199,8,113, 0,0,0,0,0,
                      131,225,62,113,192, 130,2,2,138,32, 139,196,4,138,32, 136,39,8,113,192, 250,40,136,136,64, 10,40,136,136,128, 9,199,8,113,0, 0,0,0,0,0,
                      225,62,113,192,0, 2,2,138,32,0, 196,4,138,32,0, 39,8,113,192,0, 40,136,136,64,0, 40,136,136,128,0, 199,8,113,0,0, 0,0,0,0,0,
                      62,113,192,0,0, 2,138,32,0,0, 4,138,32,0,0, 8,113,192,0,0, 136,136,64,0,0, 136,136,128,0,0, 8,113,0,0,0, 0,0,0,0,0,
                      113,192,0,0,0, 138,32,0,0,0, 138,32,0,0,0, 113,192,0,0,0, 136,64,0,0,0, 136,128,0,0,0, 113,0,0,0,0, 0,0,0,0,0,
                      192,0,0,0,0, 32,0,0,0,0, 32,0,0,0,0, 192,0,0,0,0, 64,0,0,0,0, 128,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,
                      0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0};



                      //Khai bao 2 bo dem de hien thi man hinh
                      unsigned char manhinh_1[32];
                      unsigned char manhinh_2[32];

                      //khai bao 5 byte de chua ma
                      unsigned char byte1,byte2,byte3,byte4,byte5;
                      //khai bao 4 bien de tang so dem
                      unsigned int a=0;
                      //khai bao bien de dich bit
                      unsigned char n=0,j=0;
                      unsigned int k=0;

                      void bodem_1(void)
                      {
                      unsigned int i;
                      n++;
                      for(i=0;i<8;i++)
                      {
                      //lay du lieu tu bang ma trong flash
                      byte1=bang[i*5+0+a];
                      byte2=bang[i*5+1+a];
                      byte3=bang[i*5+2+a];
                      byte4=bang[i*5+3+a];
                      byte5=bang[i*5+4+a];
                      // tao 4 byte moi bang cach dich bit roi luu vao man hinh 1
                      manhinh_1[i*4+0] = (byte1<<n)|(byte2>>8-n);
                      manhinh_1[i*4+1] = (byte2<<n)|(byte3>>8-n);
                      manhinh_1[i*4+2] = (byte3<<n)|(byte4>>8-n);
                      manhinh_1[i*4+3] = (byte4<<n)|(byte5>>8-n);
                      }
                      }

                      void bodem_2(void)
                      {
                      unsigned int i;
                      n++;
                      for(i=0;i<8;i++)
                      {
                      //lay du lieu tu bang ma
                      byte1=bang[i*5+0+a];
                      byte2=bang[i*5+1+a];
                      byte3=bang[i*5+2+a];
                      byte4=bang[i*5+3+a];
                      byte5=bang[i*5+4+a];
                      // tao 4 byte moi
                      manhinh_2[i*4+0] = (byte1<<n)|(byte2>>8-n);
                      manhinh_2[i*4+1] = (byte2<<n)|(byte3>>8-n);
                      manhinh_2[i*4+2] = (byte3<<n)|(byte4>>8-n);
                      manhinh_2[i*4+3] = (byte4<<n)|(byte5>>8-n);
                      }
                      if(n==8)
                      {
                      n=0;
                      a=a+40;
                      if(a==520)
                      {
                      a=0;
                      red=~red;
                      blue=~blue;
                      }
                      }
                      }


                      void spi(unsigned char CDATA)
                      {
                      unsigned char i;
                      for(i=0;i<8;i++)
                      {
                      DATA = (CDATA<<i)&0x80;
                      SCK=1; SCK=0;
                      }
                      }

                      void display_1(void)
                      {
                      spi(manhinh_1[k*4]);
                      spi(manhinh_1[k*4+1]);
                      spi(manhinh_1[k*4+2]);
                      spi(manhinh_1[k*4+3]);
                      }

                      void display_2(void)
                      {
                      spi(manhinh_2[k*4]);
                      spi(manhinh_2[k*4+1]);
                      spi(manhinh_2[k*4+2]);
                      spi(manhinh_2[k*4+3]);
                      }

                      void main(void)
                      {
                      DDRB=0xFF;
                      DDRC=0xFF;
                      DDRD=0xFF;

                      PORTB=0x00;
                      PORTC=0x00;
                      blue=1;
                      red=0;
                      //Khoi tao time1 ngat mode CTC COMPA
                      TCNT1=0x00;
                      TCCR1B=0x09;
                      OCR1A=16000;
                      TIMSK=0x10;
                      #asm("sei")

                      bodem_1();
                      while(1)
                      {
                      //hien thi man hinh 1 ,layman hinh 2
                      bodem_2();
                      while(j<10);

                      bodem_1();
                      while(j>10);
                      }
                      }

                      //Trinh ngat tran timer1
                      interrupt [TIM1_COMPA] void timer1_compa_isr(void)
                      {
                      if(blue)
                      {
                      if(j<10)
                      {
                      display_1();
                      // hien thi
                      red=1;
                      SCL=1; SCL=0;
                      PORTC=k;
                      red=0;
                      k++;
                      if(k==8)
                      {
                      k=0;
                      j++;
                      if(j==10) j=11;
                      }
                      }
                      else
                      {
                      display_2();
                      // hien thi
                      red=1;
                      SCL=1; SCL=0;
                      PORTC=k;
                      red=0;
                      k++;
                      if(k==8)
                      {
                      k=0;
                      j++;
                      if(j==20) j=0;
                      }
                      }
                      }
                      else
                      {
                      if(j<10)
                      {
                      display_1();
                      // hien thi
                      blue=1;
                      SCL=1; SCL=0;
                      PORTC=k;
                      blue=0;
                      k++;
                      if(k==8)
                      {
                      k=0;
                      j++;
                      if(j==10) j=11;
                      }
                      }
                      else
                      {
                      display_2();
                      // hien thi
                      blue=1;
                      SCL=1; SCL=0;
                      PORTC=k;
                      blue=0;
                      k++;
                      if(k==8)
                      {
                      k=0;
                      j++;
                      if(j==20) j=0;
                      }
                      }
                      }
                      }//ket thuc chuong trinh
                      Last edited by phamngoc; 29-04-2009, 16:22.

                      Comment


                      • help em

                        các đại ca ơi, giúp em với nhé. em dùng proteus mô phỏng lại cái mạch của bác nghaiha. nhưng sao kết quả lại như thế này. em mong các bác giúp em nhé
                        Attached Files

                        Comment


                        • Xin chào mọi người.Mình đang làm bài tâp lớn về ma trận led.nhưng mà phần chữ dịch phải trái vẫn chưa làm dc.ai xem hộ mình viết trong chương trình chính thì phần while(1) phải viết thế nào nha.Mình làm y hệt bài của bác Nghaiha mà.

                          for (k=0;k<=7;k++){
                          delay_ms(10);
                          }
                          for (i=0;i<=23;i++){
                          DMem[i]>>=1;
                          }
                          }
                          mình ko hiểu bác Haiha dịch bít trước như thế nào.mình chỉ thấy chữ dịch dc 1 ít thôi rồi mất luôn.bác Haiha và mọi người giúp đỡ mình với...please!!!!

                          Comment


                          • Em đang làm bảng led 16*64, phần hiển thị led em đã làm xong rồi. Anh nghaiha có kinh nghiệm làm led ma trận xin giúp đỡ em phần mạch điều khiển với, em thây mạch ĐK của anh làm rất pro nên mong anh giúp đỡ em sơ đồ nguyên lý + layout mạch ĐK. Đây là ơ đồ led của em:
                            Sơ đồ này là module 2 led mở rộng được.
                            Attached Files

                            Comment


                            • hix!! bài lập trình của bác phamngoc lằng nhằng quá!!
                              em có cách viết như thế này không cần dùng SPI luôn. các bác xem thử và đóng góp ý kiến

                              /************************************************** ***
                              LEDMATRIX 16X48

                              Chip type : ATmega32
                              Program type : Application
                              Clock frequency : 11.059200 MHz
                              Memory model : Small
                              External SRAM size : 0
                              Data Stack size : 512
                              ************************************************** ***/

                              #include <mega32.h>
                              #include <delay.h>

                              /************************************************** ***/
                              #define SCK PORTB.0
                              #define DATA PORTB.1
                              #define SCL PORTB.2

                              /************************************************** ***/
                              #define A PORTA.0
                              #define B PORTA.1
                              #define C PORTA.2
                              #define OE PORTA.3

                              /************************************************** ***/
                              unsigned char i,j;
                              unsigned char m=0,n;
                              unsigned char k;
                              bit tmp;

                              /************************************************** ***/
                              unsigned char Led[16][12]={
                              0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                              0, 0, 0, 56, 224, 0, 0, 0, 0, 0, 0, 0,
                              0, 0, 0, 198, 24, 3, 0, 0, 0, 0, 0, 0,
                              0, 199, 1, 1, 5, 4, 128, 225, 129, 227, 191, 79,
                              224, 56, 2, 1, 2, 4, 192, 57, 226, 228, 63, 71,
                              16, 69, 4, 1, 0, 4, 224, 25, 114, 40, 39, 71,
                              8, 130, 4, 1, 0, 4, 208, 25, 115, 0, 7, 71,
                              8, 128, 4, 2, 0, 2, 200, 225, 112, 0, 7, 71,
                              8, 128, 2, 4, 0, 1, 252, 27, 115, 0, 7, 71,
                              16, 64, 1, 8, 128, 0, 192, 25, 114, 0, 7, 71,
                              32, 160, 0, 16, 64, 0, 192, 25, 98, 8, 7, 71,
                              64, 80, 0, 32, 32, 0, 224, 243, 225, 4, 7, 71,
                              128, 40, 0, 64, 16, 0, 0, 0, 192, 131, 15, 62,
                              0, 21, 0, 128, 8, 0, 0, 0, 0, 0, 0, 0,
                              0, 2, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0,
                              0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0
                              };

                              /************************************************** ***/
                              void xuatdata(char data) {
                              for(k=0;k<8;k++) { //1 biến kiểu unsigned char có 8bit
                              if (data & 0x80) //kiểm tra xem bit thứ 8 là 0 hay 1
                              DATA = 0; //nếu bằng 1 thì DATA=0;
                              else DATA = 1; //nếu bằng 0 thi DATA=1;
                              data = data << 1; //dịch qua phải 1 bit
                              // bỏ đi thứ 8 vừa đẩy chân 595 và đưa bit thứ 7 vào chỗ bit thứ 8
                              //bit đầu tiên gán giá tri bằng 0 (cái này ko cần quan tâm)
                              //lần lược xuất data của 8 bit
                              SCK = 0;
                              SCK = 1;
                              }
                              }
                              /************************************************** ***/
                              interrupt [TIM0_COMP] void timer0_comp_isr(void)
                              {

                              for(n=6;n>0;n--) //48 cột = 6*8 led (xem như là "6 led" mỗi led 8 led đơn)
                              xuatdata(Led[m][n-1]); //ta chỉ đưa data của "6 led" thôi(bằng phần cứng)
                              SCL=0;
                              SCL=1;
                              PORTA=m; //quét hàng từ 0 đến 15
                              m++ ;
                              if (m==16) m=0;
                              }
                              /************************************************** ***/
                              void main(void)
                              {
                              DDRA=0xFF;
                              DDRB=0xFF;
                              DDRD=0xFF;

                              TCCR0=0x03; //
                              TCNT0=0x00; //
                              OCR0=0x5A; //tinh tan so quet

                              TIMSK=0x02;

                              ACSR=0x80;
                              SFIOR=0x00;

                              #asm("sei")

                              SCK=1;
                              SCL=1;


                              /*********** CHAY CHU TU TRAI QUA PHAI **********/

                              while(1)
                              {
                              for(i=0;i<16;i++) //16 hàng
                              {
                              tmp=Led[i][0]&0x01;
                              //dùng biến tmp để lưu gía trị của bit đầu tiên của con led đầu tiên
                              for(j=1;j<12;j++)
                              {
                              if(Led[i][j]&0x01) //lấy bit đầu tiên của led thứ i gán cho bit thứ 8 của led i-1
                              Led[i][j-1]=(Led[i][j-1]>>1)|0x80;
                              else
                              Led[i][j-1]=Led[i][j-1]>>1;
                              }
                              if(tmp) //nếu tmp =1 thì gán cho bit thứ 8 của led cuối cùng
                              Led[i][11]=(Led[i][11]>>1)|0x80;
                              else //nếu tmp =0 thì chỉ cần dịch trái 1 bit
                              Led[i][11]=Led[i][11]>>1;
                              }
                              delay_ms(100);
                              };

                              }

                              Comment


                              • em đã làm bảng led với bài lập trình này .chạy chữ rất ok!không xảy ra tình trạng bóng mờ hay mất xung gì cả.

                                Comment

                                Về tác giả

                                Collapse

                                nghaiha Tìm hiểu thêm về nghaiha

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X