74hc595 Sự Thông Dụng Và Cách Dùng

Thảo luận trong 'Kỹ thuật điện tử số'

Đang xem chủ đề này ( Thành viên: 0, Khách: 2)

  1. chiến565

    chiến565 Học sinh phổ thông

    Tham gia ngày:
    16/11/16
    Bài viết:
    1
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nam
    Chỉ mở rộng được I/O chứ chân PWM có mở rộng được không?
     
  2. TheHai_12345

    TheHai_12345 Học sinh phổ thông

    Tham gia ngày:
    29/9/17
    Bài viết:
    1
    Đã được thích:
    1
    Điểm thành tích:
    1
    Giới tính:
    Nam
    Chào các bác, em cũng đang làm về con HC595 này, về vấn đề nguyên lý và lập trình thì các bác nhận xét đều ok cả, nhưng em thấy ai cũng nói là có thể mở rộng bao nhiêu tùy thích. Nhưng khi em làm thực tế có vấn đề thế này,
    Em làm một cái ngôi sao noel điều khiển 360 con LED độc lập và tạo nhiều hiệu ứng khác nhau, nhưng vấn đề không chạy đúng theo yêu cầu
    1. Nếu làm để điều khiển 256 bóng tương ứng với 256/8=32 con HC595 thì chạy ok
    2. Nếu lơn hơn 256 thì code chạy không được nữa
    3. Nếu nói là vấn đề do dòng cung cấp không đủ, vậy em đùng PIC16F886 để điều khiển, và được đệm dòng qua cả con 74HC245 nữa.
    4. Các bác cứ thư làm mô phỏng trên proterus nó cũng không chạy theo ý muốn, đơn giản các bác chỉ cần viết một chương trình để nó sáng từ con LED đầu đến con LED cuối thôi
    5. Xi n chia sể vói các bác, có 2 vấn đề chính,
    a. Nếu dùng con này để điều khiển một số các yêu cầu như đồng hồ số hoặc ,,, thì không phương pháp lập trình như các bác thì ok
    b. Nếu dùng làm điều khiển mà em hay gọi chung là mạch đa kênh chẳng hạn đk led ngệ thuật chẳng hạn thì nên làm như này code sẽ gọn hơn nhiều.
    // Chỉ cần viết các hàm cơ bản này sau đó các hiệu ứng cứ thế dựa vào hàm này mà viết thôi

    void chot()// hàm chốt, (chân B2 của VĐK nối với chân 12 của HC595)
    {
    output_high(pin_b2); delay_us(8); output_low(pin_b2); delay_us(8);
    }

    void nhoi1()// hàm đưa bít có giát trị logic 1 vào HC595
    {
    output_high(pin_b4); delay_us(8); // chân b4 của VĐK nối với chân 14 của HC595
    output_high(pin_b1); delay_us(8); output_low(pin_b1); delay_us(8); // chân b1 của VĐK nối với chân 11 của HC595
    }

    void nhoi0() // hàm đưa bit có giá trị logic 0 vao HC595
    {
    output_low(pin_b4); delay_us(8);
    output_high(pin_b1); delay_us(8); output_low(pin_b1); delay_us(8);
    }

    void nhoi1chot () // hàm đưa 1 vào chốt luôn
    { nhoi1 (); chot ();}

    void nhoi0chot () // hàm đưa 0 vào chốt luôn
    { nhoi0 (); chot ();}

    void nhoi0x (LED) // hàm đưa 0 vào nhưng với một giá trị chưa định trước, sẽ gọi ở hàm main
    { for (n=0; n<LED; n++) { nhoi0 (); } }

    void nhoi1x (LED) // hàm đưa 1 vào nhưng với 1 giastr i chưa định trước, gọi ở hàm main
    { for (n=0; n<LED; n++) { nhoi1 (); } }

    /////////////////////////////các hiệu ứng đây các bác////////////////////////////////////
    void sanghet (LED)
    {
    for (n=0; n<LED; n++)
    { nhoi1 (); }
    chot ();
    }
    ///////////////////////////////////////////////////////////////////////////////
    void tathet (LED)
    {
    for(n=0; n<LED; n++)
    { nhoi0 (); }
    chot ();
    }

    void sangdantuphaisangtrai (LED,t)
    {
    tathet(LED); delay_ms(t);
    for(n=0; n<LED; n++)
    {
    nhoi1chot ();
    delay_ms(t);
    }
    }

    void sangdantutraisangphai (LED,t)

    {
    tathet (LED); delay_ms(t);
    for(a=0,b=LED-1; a<LED,b>0; a++,b--)
    {
    nhoi1x(a); nhoi0x(b); nhoi1x(1);
    chot(); delay_ms(t);
    }
    sanghet(LED); delay_ms(t);

    }



    /////////// và hàm main đậy ah////////
    void main ()
    {
    while(1)
    {

    }
    }
     
    huunho thích bài này.
  3. huunho

    huunho Thạc sỹ

    Tham gia ngày:
    16/1/14
    Bài viết:
    3,181
    Đã được thích:
    1,422
    Điểm thành tích:
    113
    Giới tính:
    Nam
    lý do gì khiến code cho nhiều hơn 32 con 595 ko chạy vậy bạn?
     
  4. eva

    eva Kỹ sư

    Tham gia ngày:
    5/2/13
    Bài viết:
    387
    Đã được thích:
    441
    Điểm thành tích:
    63
    Giới tính:
    Nam
    PIC16F886 thì phọt tĩ ra mới được 5 MIPS chưa kể giới hạn về speed của I/O port thì không chạy được là phải. Và khi đó tốc độ maximum ( cycle ) chỉ đạt được 200ns ( na no giây ) ... chưa nói đến một đống lệnh xử lý thì nó cà giật là đúng thôi.
    74HC595 rẻ rách nhất ở 5V cũng chạy được clock 50ns ... nghĩa là với tốc độ đủ tốt thì 100 con 74Hc595 chẳng là vấn đề gì.
    Với số lượng nhiều điểm thì người ta sử dụng RAM để lưu trữ ... rồi dùng các linh kiện khả trình logic như PLD, CPLD, FPGA để đọc và đẩy dữ liệu ... chứ làm kiểu con nọ nối con kia ... đến khi có độ khoảng vài trăm con 74HC595 thì khóc tiếng mèo.
     
  5. eva

    eva Kỹ sư

    Tham gia ngày:
    5/2/13
    Bài viết:
    387
    Đã được thích:
    441
    Điểm thành tích:
    63
    Giới tính:
    Nam
    speed trung bình của HC595 hàng chợ là 50ns ... với 360 led độc lập ( tương đương sử dụng 45 con HC595 ) ( 360/8 = 45 )
    thì thời gian sẽ phải nhỏ hơn 45 x 50ns = 2250ns ( tức 2,25 micro giây ) ... đây là giá trị để hiển thị đến con HC595 cuối cùng
    ( do các clock phải nối tiếp đít con hc595 này vào đầu clock con hc595 kia --- vì bản thân là truyền hết 8 clock đẩy dữ liệu mới tới con sau chưa kể các lệnh enable, latch).
    ( Nếu hiệu ứng lớn ... 360 led đồng thời không chớp ( tức là tốc độ lưu ảnh phải lớn hơn 24 hình/ giây ) thì thời gian nhỏ nhất còn phải nhỏ hơn 24 lần nữa.
    PIC16F886 có tốc độ 5MIPS ( tức chu kỳ lệnh 200nS ) ... với điều khiển 1 led đơn mà quá 2250/200ns = Khoảng 11 chu kỳ lệnh ... Nếu lập trình mà quá số này thì khỏi phải chạy.
    Mà mấy cái kiểu vòng for, loop, bên trong một đống lênh dịch bít, tách dữ liệu ( kiểm tra 1, 0 )... lập trình bằng C thì nó chiếm 2, 3 chục chu kỳ lệnh là chuyện thường. Và do đó là không đủ tốc độ để chạy.

    Cách khắc phục ... chuyển sang loại tốc độ cao hơn như PIC18, Dspic, PIC24, PIC32 chẳng hạn.
     
  6. NgoHungCuong

    NgoHungCuong http://ngohungcuong.com

    Tham gia ngày:
    19/8/12
    Bài viết:
    4,020
    Đã được thích:
    9,121
    Điểm thành tích:
    69
    Giới tính:
    Nam
    Nghề nghiệp:
    Thất nghiệp
    Nơi ở:
    Lâm Thao - Phú Thọ
    Em thấy nhiều con thì dùng con mcu có spi và dma là ổn.
     
    hoanghoa0707eva thích bài này.
  7. eva

    eva Kỹ sư

    Tham gia ngày:
    5/2/13
    Bài viết:
    387
    Đã được thích:
    441
    Điểm thành tích:
    63
    Giới tính:
    Nam
    SPi cứng cũng được ... cơ mà MCU nếu chỉ có tốc độ 5Mips thì cứng cũng không đủ tốc độ ( vì lúc đó chu kỳ lệnh đã xơi mất 200nS ) khi đó cần MCU có tốc độ cao hơn.
     
    NgoHungCuonghoanghoa0707 thích bài này.
  8. hoanghoa0707

    hoanghoa0707 Học sinh phổ thông

    Tham gia ngày:
    6/3/16
    Bài viết:
    14
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nữ
    Có ai đã dùng các chân SDO và SCK trong module SPI để giao tiếp với 74Hc595 để quét led 7 đoạn không hướng dẫn mình với.
     

Chia sẻ trang này