Thông báo

Collapse
No announcement yet.

Dùng vi điều khiển AVR hiển thị chữ chạy trên led ma trận 2 màu

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #16
    Nguyên văn bởi @bin Xem bài viết
    tại em mới tìm hiểu về vi điều khiển thôi, nên chưa bit gì cả, mong các bác chỉ nhiều.
    bác thangktvta ơi chỉ em viết bằng hợp ngữ với.
    bạn cứ mua cuốn sách họ vi điều khiển của "Tống Văn Ôn" hoặc của "Nguyễn Tăng Cường" về mà đọc và có chi không hiểu thì lên diễn đàn hỏi. Như thế thì mọi người mới có thể giup được bạn. Bạn nên vào luồng làm wen với vi điều khiển, ở đó sẽ giúp được bạn đấy
    Nếu chẳng một phen sương thấm lạnh
    Hoa mai đâu dễ tỏa mùi hương

    Comment


    • #17
      bạn ntcisa ơi, bạn biết viết bằng ASM để điều khiển quang báo phải không? Bạn cho mình một đoạn code mẫu truyền dữ liệu nối tiếp vào SDI của IC5026 với nha! thanks!
      Nguyen Sinh_ 01689.660.922

      Comment


      • #18
        các bác ơi chỉ dùm minh cách quét led theo cột của quang bao với. Mình chi điều khiển được theo hàng thôi. Có đoạn code mẫu cho mình tham khảo với nha(bằng ngôn ngữ gì cũng được)! Cảm ơn nhiều!
        Nguyen Sinh_ 01689.660.922

        Comment


        • #19
          Chào NGUYEN SINH , mình cũng từng làm 1 cái QB nho nhỏ chừng 24 hàng x160 cột x 2 màu ; mình quét theo cột nhưng thực ra thì quét theo cột hay theo dòng cũng không quan trong lắm đâu , quan trọng nhất là kỹ thuaatj quét , với " công phu " kém cõi của mình thì có thể tóm lược như sau :
          Bước 1 : xác định kích thướt , công suất , hiệu ứng -> chon linh kiện (MCU, tầng công suất ,...) ,phương pháp quét led -> thiết kế mạch -> viết chương trình (1 cho MCU và 1cho PC để điều khiển MCU )-> test -> xong .
          Nói nghe nó đơn giản quá nhỉ : , nhưng thực ra thì vô cung phức tạp ( mình phải mất gần 4 tháng để học hỏi , chế tạo , và sau vài lần làm hỏng tốn không ít " lúa " mới làm hoàn chỉnh được đó , : ) , mình đã làm như sau :
          1- chọn MCU và phần công suất : bảng đầu tiên mình dùng at89 nó giật như uống nhầm thuốc lắc vậy ( mặt dù mình đã cố cải thiện tốc độ bằng phần cứng lẫn phần mềm ) nâng speed thì ít giật hơn nhưng mờ không thấy gì hết -> đến bảng thứ 2 mình chuyển sang xài atmega64 , đúng là một thay đổi tuyệt vời , nó chạy ngon cực ,nhìn đã lắm ! . Còn cái tầng công suất mình cũng khổ sở không ít với nó , trước mình hút dòng trực tiếp từ 74HC595 2 con cho 2 màu và A1015 để phun dòng cho mỗi đơn vị 8x8x2 màu ( không dùng đệm để tiết kiệm ) , dùng 74ls154 (có thêm 16 cổng đảo để đảo từ - -> + )quet 16 cột đệm phía sau là 4 con ULN 2803 để kéo 8x20x3 con A1015 ,mạch này chạy matran led loại 2088 là ok nhưng với 2388 thì hơi mờ , bảng thứ 2 mình dùng 74ch595 để phun dòng trực tiếp chỉ 1 con cho 1 đơn vi 8x8x2 dùng 16 con c1815+ 16 con H1061 để hút dùng cho toàn bộ bảng led ( 8 cho màu xanh và 8 cho màu đỏ ) dịch cột bằng 74hc595 luôn .

          Comment


          • #20
            2- tầng điều khiển : mình chia bảng thành 3 dãy 8 dòng , mõi dãy dịch data ra bằng 74hc165 đến 74hc595 , như vậy là mình cần 4 con 165 cho cả bảng ( kể cả 1 con dich cột ) , câu hỏi đặt ra là tại sao xài 74165 mặt dù mega64 có speed rất cao -> trả lời để viết code cho gọn nhẹ và dẽ dàng xuất đồng bộ 3 dãy cùng lúc (đầu vào data của chúng nói chung tới 1 port xuát data của MCU .
            3- Kỹ thuật quét : Phần này là quang trọng nhất quyết định sống còn tới led borad , như đã nói ở trên ta chia bảng led ra làm 3 dãy như vậy ta cần 6 mảng chứa data cho led board :
            unsigned char red_h[160];
            unsigned char red_m[160];
            unsigned char red_l[160];
            unsigned char green_h[160];
            unsigned char green_m[160];
            unsigned char green_l[160];
            (hôm sau viết tiếp thằng bạn nó điện đi gấp)

            Comment


            • #21
              Tiếp tục ...
              như đã nói ở trên , ta cần 6 mảng đệm data cho led board , 3 cho màu đỏ và 3 cho màu xanh ,rồi viết một thủ tục để xuất data ra 1port đã chọn làm đường xuất data lúc thiết kế phần cứng ( chẳng hạn export_data() ), thủ tục này làm nhiệm vụ đặt data ra port lần lượt cho từng dãy , ví dụ :
              ( vidu này viết trong keil c cho at89)
              void load(unsigned char data_out,unsigned char row )
              {
              // giả sử chân load / shift định nghĩa là sl_pinx
              // xuất data ra out_port
              out_port = data_out;
              switch (row)
              {
              case 1: sl_pin1 = 0;sl_pin1 = 1;break;
              case 2: sl_pin2 = 0;sl_pin2 = 1;break;
              case 3: sl_pin2 = 0;sl_pin2 = 1;break;
              }
              }
              void export()
              {
              unsigned char i;
              for(i=0;i<=7;i++)
              {
              clk=1;
              clk=0;
              }
              }
              void export_data()
              {

              unsigned int i;
              unsigned char data_out;
              for(i=1;i<=160;i++)
              {
              // xuất data red ra port
              data_out = red_h[i];
              load(data_out,1);
              data_out = red_m[i];
              load(data_out,2);
              data_out = red_l[i];
              load(data_out,3);
              export();
              delay_ms(5) ;
              // xuất data green ta làm tương tự
              ........
              }

              }

              Comment


              • #22
                ở trên thiếu thủ tục chọn cột thêm vào ở trên hết của thủ tục export_data():
                void seclect_col(unsigned char col)
                {
                data_out=col;
                load(data_out,4);
                export();
                }

                Comment


                • #23
                  hốmau viết tiếp ....

                  Comment

                  Về tác giả

                  Collapse

                  @bin Tìm hiểu thêm về @bin

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

                  Collapse

                  Đang tải...
                  X