Thông báo

Collapse
No announcement yet.

Nguyên lý đưa data và chốt data của IC 74hc595

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

  • Nguyên lý đưa data và chốt data của IC 74hc595

    hic hic.chào các anh. em đang tìm hiểu về 595 để làm đề tài quang báo. nhưng em vẫn chưa hiểu cho lắm về hoạt động của con này. theo em hiểu như thế này không biết có đúnh không, nhờ các anh chỉ giáo thêm :
    +khi muốn đưa 1 bit vào thì mình cần 1 xung clock o chân 11 để đưa 1 bit này đi vào thanh ghi bên trong nó và muốn xuất 8 bit ra 8 chân của nó thì ta cần 1 tác động mức cao lên chân 12
    +giả sử em muốn truyền 8 bit 10101100 tương ứng ngõ ra từ Q0(mức 0)-Q7(mức 1) thì em truyền theo thứ tự 00110101 vào thanh ghi, như vậy là cần 8 chu kỳ xung clock ở chân 11
    +và sau đó em cho chân 12 lên 1 thì 8 bit này được đẩy ra 8 ngõ ra Q0-Q1
    thế là 8 em được đẩy ra. như vậy thì cần 1 xung ở chân 12.
    Nhưng ở đây em thắc mắc hoài mà không nghĩ ra được. vấn đề là như thế này :
    +thứ nhất : theo như ý em tìm hiểu thì chân 11 và 12 là 2 chân có chu kỳ xung khác nhau. Nhưng dướng như tất cả các mạch về quang báo em tìm thấy được trên mạng hầu như chân 11 và 12 mắc chung vời nhau. Nếu như vậy thì 2 chân cùng 1 xung clock.nếu như vậy chắc chắn em đã hiểu sai vấn đề truyền data và xuất dữ liệu ra 8 ngõ ra.
    +thứ 2: giả sử em cần xuất 8byte để quyét led matrix 8*8. như vậy thì làm sao để chốt 8byte này đây?để 8byte tiếp sẽ là của con led thứ 2.do em đang làm đồ án thiết kế hiển thị chữ trên 10 led matrix 8*8 dùng bàn phím hex, cách nhấn phím hiển thị như điện thoại.
    +thứ 3 : em thấy chân 9 dữ liệu ra nối tiếp của con 1 được mắc với 14 của con tiếp theo. như vậy khi em bấm A, tiếp tục bấm B thì chữ hiển thị là A led 1 và B led 2 hay là B led 1 A led 2.
    do em đang học hợp ngữ nên tài liệu toàn là ccs nên em không hiểu gì hết. đó là những thắc mắc của em. mong các bạn, các anh giúp đỡ em. em xin cảm ơn mọi người nhiều lắm

  • #2
    74595 có các chân và hoạt tác dụng của chúng như sau:
    - 8 chân xuất dữ liệu, chân reset (10), cho phép chip (13): Mấy chân này chắc ko phải nói j rồi.
    - Một chân nhận dữ liệu vào nối tiếp (14): Bạn muốn dịch bit 0 hay 1 thì tác động vào đây.
    - Một chân xung clock (11): Cứ mỗi xung tác động vào chân này thì bit logic tại chân nhận dữ liệu (14) sẽ đc dịch vào một lần.
    - Một chân chốt dữ liệu (12): Mỗi lần có xung tác động vào chân này thì dữ liệu đc xuất ra một lần
    - Còn chân 9: Thì cứ có 8 xung tác động vào chân clock nó lại xuất ra một xung.
    VD: Bạn nối một chú LED 7 thanh vào 74595 (a nối Q0,..., g nối Q6) rồi thử cho hiện số 5 chẳng hạn:
    - Muốn có số 5 thi Q0 - Q7 có mức logic là: 01001000.
    - Đầu tiên cho chân 14 nhận mức logic 1
    - Kick một xung clock vào chân 11 rồi lại đưa chân 14 xuống mức logic 0 sau đó tác động 2 xung vào chân 11 rồi lại đưa chân 14 lên mức logic 1 tác động một xung vào chân 11 rồi lại đưa 14 xuống 0. Cuối cùng tác động một xung vào chân 11, sau đó chốt bằng cách tác động một xung vào chân 12, nhìn trên Proteus bạn sẽ thấy kết quả.
    Nhớ quá khứ buồn rơi nước mắt.
    Nhìn tương lai lạnh buốt sống lưng.
    Y!M: nhamdtk4.

    Comment


    • #3
      vì quang báo người ta dùng đồng thời 595 cho hàng và cột,hàn dùng để xuất dữ liệu,cột thì để quét cột,2 chân 11 và 12 đc nói với nhau có thể là của con 595 dùng quét cột,vì ta cần sáng từng cột,nên khi dịch bit 0 đi 1 lần(dk mức 0) thì người ta xuất luôn,không chờ dich đủ 8 lần mới xuất.chờ cao thủ vào giúp đỡ thêm :d

      Comment


      • #4
        hic. như theo ý anh dtk4 thì cứ đưa dữ liệu vào kích như vậy chắc là chết mất. em đang làm đồ án quang báo dùng pic16f877a kết hợp bàn phím để xuất chữ từ 0-9 và từ a-z như bàn phím điện thoại vậy đấy. nếu em muốn xuất ra chữ A chẳng hạn thì em cứ cho da ta rồi xuất xung rồi chốt như vậy không biết là em phải viết mấy chục trang cho cái bàn phím đấy nữa. em đang học hợp ngữ à. thầy bảo làm đồ án môn học là dùng HỢP NGỮ đấy.hichic
        bây giờ chưa nói tới chuyện bàn phím mà chỉ nói tới chyện là đưa dữ liệu ra con led 8*8 cái đã. anh cho em biết có cách nào xuất ra xong 8 byte rồi chốt lại không anh. dể chữ A còn lưu ại tên led thứ 1 chẳng hạn. như vậy anh cho em hỏi khoảng delay giữa các hàng là bao nhiêu vậy anh. để còn lưu ảnh trên võng mạc chứ. để em về làm theo cách của anh thử xem đã. mọi người cố gắng giúp em với nha. em mới tìm hiểu về quang báo nên chưa hiểu gì niều. cảm ơn mọi người nhiều !!!

        Comment


        • #5
          Nguyên văn bởi dtduckhung Xem bài viết
          hic. như theo ý anh dtk4 thì cứ đưa dữ liệu vào kích như vậy chắc là chết mất. em đang làm đồ án quang báo dùng pic16f877a kết hợp bàn phím để xuất chữ từ 0-9 và từ a-z như bàn phím điện thoại vậy đấy. nếu em muốn xuất ra chữ A chẳng hạn thì em cứ cho da ta rồi xuất xung rồi chốt như vậy không biết là em phải viết mấy chục trang cho cái bàn phím đấy nữa. em đang học hợp ngữ à. thầy bảo làm đồ án môn học là dùng HỢP NGỮ đấy.hichic
          bây giờ chưa nói tới chuyện bàn phím mà chỉ nói tới chyện là đưa dữ liệu ra con led 8*8 cái đã. anh cho em biết có cách nào xuất ra xong 8 byte rồi chốt lại không anh. dể chữ A còn lưu ại tên led thứ 1 chẳng hạn. như vậy anh cho em hỏi khoảng delay giữa các hàng là bao nhiêu vậy anh. để còn lưu ảnh trên võng mạc chứ. để em về làm theo cách của anh thử xem đã. mọi người cố gắng giúp em với nha. em mới tìm hiểu về quang báo nên chưa hiểu gì niều. cảm ơn mọi người nhiều !!!
          Bạn nhầm rồi, như bạn trình bày thì bạn chưa hiểu hết thế nào là LED matrix.
          - Ở trên mình trình bày đó là hoạt động của con 74595 (có thể chốt và ghi dịch đc như thế nào) cái xung kick trong đó thì có thể dùng các vòng lặp xử lý như vậy thì sao CT có thể dài đến mấy chục trang đc.
          - Quay lại với bài toán của bạn (bây giờ bạn phải đọc kỹ về LED matrix đã rồi hãy tính):
          + Để hiển thị một chữ bất kỳ lên LED matrix thì chỉ cần xuất mã hàng ra hàng và cho cột tương ứng sáng, lần tiếp theo lại xuất mã hàng và cho cột tiếp đó sáng (tất nhiên cột trc đã tắt) cứ làm như vậy đến hết thì sẽ có chữ đó hiển thị lên LED matrix.
          + Với việc quét cột như trên thì các IC ghi dịch (hoặc kể cả con MUX 74138) cũng có thể làm đc, ko hiểu bạn cần chốt là chốt cái j (trong khi chữ đó đã hiện lên đc rồi).
          + Còn code mà viết bằng ASM thì mình....chịu thua.
          Nhớ quá khứ buồn rơi nước mắt.
          Nhìn tương lai lạnh buốt sống lưng.
          Y!M: nhamdtk4.

          Comment


          • #6
            a ha. em cũng đang làm quang báo. em dùng 595 để xuất dữ liệu ra cột và 138 để quét hàng, dùng 10 led 7 đoạn. anh có cao kiến gì giúp em với. anh em cùng nhau trao đổi. anh có tài liệu minh họa thì hay quá.

            Comment


            • #7
              Nếu bạn dùng 595 để quét thì chân clock và chân latch nối chung với nhau cũng được,giả sử bạn có 16 cột thì cấp một xung vào chân data và cấp 16 xung clock, nếu bạn dùng 595 để xuất dữ liệu thì bao nhiêu bit dữ liệu thì cần bấy nhiêu xung clock xuất đủ dữ liệu thì cấp xung latch

              Comment


              • #8
                QUÉT led 7thanh thông qua 74hc595

                hi các bạn!
                mình cũng đang tìm hiểu về cách đưa dữ liệu từ con 74hc595 ra led 7 thanh.
                mình làm mãi mà ko được. mình muốn con số của led 7 thanh chạy từ:0000,0001.....9999.
                nhưng nó toàn chạy từ 0000,1111,2222...9999. các ban nào đã làm rùi có thể giúp mình và mọi người ko?
                à mình viết = c.

                Comment


                • #9
                  Đệ có ý tưởng thế này mong các huynh chỉ giáo,số cần hiển thị từ 0 đến 9999 như vậy cần có 4 led 7 thanh , các led dùng chung đương dữ liệu từ 595 nên cần 4 con bjt để đóng mở cho led,quét led ta dùng ngắt timer với 1 biến tạm là count.Cần tạo 1 bảng mã cho led bảy đoạn bảng mã này tùy thuộc vào led sử dung là led anod chung hay catod chung(anod chung thì bảng mã mức 0 còn catod chung thì bảng mã mức 1) cần thêm 5 biến : 1 biến chứa giá trị đếm ,bốn biến còn lại chứa giá trị nghìn, trăm, chục ,đơn vị. Để có giá trị nghìn ta lấy giá trị đếm chia cho 1000, lấy phần dư chia cho 100 được giá trị trăm,tiếp tục lấy phần dư chia cho 10 được giá trị chục phần dư còn lại là giá trị hàng đơn vị. đầu tiên ta cho biến count =0 ,khi ngắt timer xảy ra ta tăng count thêm 1 ,count=1 -> mở led hang nghìn so sánh biến nghìn với bảng mã xuất ra 595 ,count=2 -> mở led hang trăm so sánh biến trăm với bảng mã xuất ra 595,count=3 -> mở led hang chục so sánh biến chục với bảng mã xuất ra 595,count=4 -> mở led hang dơn vị so sánh biến dơn vị với bảng mã xuất ra 595, khi count= 4 ta trả count về 0.Huynh nào có ý hay thì cứ nói râ cho anh em mở rộng tầm mắt nha!

                  Comment


                  • #10
                    Nguyên văn bởi VĩnhNinh87 Xem bài viết
                    Đệ có ý tưởng thế này mong các huynh chỉ giáo,số cần hiển thị từ 0 đến 9999 như vậy cần có 4 led 7 thanh , các led dùng chung đương dữ liệu từ 595 nên cần 4 con bjt để đóng mở cho led,quét led ta dùng ngắt timer với 1 biến tạm là count.Cần tạo 1 bảng mã cho led bảy đoạn bảng mã này tùy thuộc vào led sử dung là led anod chung hay catod chung(anod chung thì bảng mã mức 0 còn catod chung thì bảng mã mức 1) cần thêm 5 biến : 1 biến chứa giá trị đếm ,bốn biến còn lại chứa giá trị nghìn, trăm, chục ,đơn vị. Để có giá trị nghìn ta lấy giá trị đếm chia cho 1000, lấy phần dư chia cho 100 được giá trị trăm,tiếp tục lấy phần dư chia cho 10 được giá trị chục phần dư còn lại là giá trị hàng đơn vị. đầu tiên ta cho biến count =0 ,khi ngắt timer xảy ra ta tăng count thêm 1 ,count=1 -> mở led hang nghìn so sánh biến nghìn với bảng mã xuất ra 595 ,count=2 -> mở led hang trăm so sánh biến trăm với bảng mã xuất ra 595,count=3 -> mở led hang chục so sánh biến chục với bảng mã xuất ra 595,count=4 -> mở led hang dơn vị so sánh biến dơn vị với bảng mã xuất ra 595, khi count= 4 ta trả count về 0.Huynh nào có ý hay thì cứ nói râ cho anh em mở rộng tầm mắt nha!
                    bạn có code và phần mophổng không?hoặc sơ đồ nguyên lý cũng được?
                    port lên cho anh em tham khảo và học tập
                    cám ơn!

                    Comment


                    • #11
                      hjx hjx mấy bác làm ơn giúp đỡ mình tí nha vì mới tìm hiểu con 595 mà chỉ mới hiểu được nguyên lý ghi dịch của nó thôi nhưng không biết khai triển như thế nào. Bác nào viết dùm em đoạn code cho hiện lên chữ gì đó cũng được hay chữ A đi cho em tham khảo với. thank mấy bác nhiều
                      làm sao hiểu hết được công nghệ :)

                      Comment


                      • #12
                        bạn nhamdtk4 ơi, mình đang viết đk mạch quang báo led matrix 8x8 , mình làm mạch xong rồi, nhưng đang gặp rắc rối với lập trình bằng ngôn ngữ C, bạn giúp mình được ko, mình cần ý tưởng thôi.

                        Comment


                        • #13
                          Bạn thử xem cái này nha, hỏi google :"matrix16x64" rui load cả file code và mô phỏng về :
                          mình chỉ load file.c về gửi đây, bạn tham khảo!

                          #include <AT89X52.H>
                          #include "font_code1.h"
                          #define scan_led P2
                          /////////////////////////////
                          //////THIET LAP BAN DAU//////
                          #define so_led 8 //boi cu?a 8
                          #define so_hang 16 //chieu cao cua font chu
                          #define multi so_hang+1 //
                          #define cot_font 11 //chieu ngang cua font chu
                          #define en_run 1 //1: chay <----> 0 dung
                          ////////////////////////////

                          typedef unsigned char uchar;
                          typedef unsigned int uint;
                          sbit rck=P3^2;
                          sbit srck=P3^0;
                          sbit ser_in=P3^1;
                          sbit en_hc154=P3^3;

                          bit run=0,en=en_run;
                          idata uchar display_buffer[so_hang][so_led];
                          idata uchar shift_buffer[so_hang];
                          uchar row_buffer[16]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
                          uchar row_led[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
                          uchar tocdoh=0xf6,tocdol=0x00;
                          uchar kitu_code=0;
                          char row=multi;
                          void shift_dataled();
                          void test_led();
                          void clear_buffer();
                          void run_string();
                          void copy_datacode();
                          void scan_dataled_code();
                          void init_interrupt();

                          ////////////////////////////////
                          ///////ngat timer 0////////////
                          void isr_timer0() interrupt 1 using 1
                          {
                          TH0=tocdoh,TL0=tocdol;
                          row=row-1;
                          if(row==-1) row=multi-1;
                          shift_dataled();
                          if(row==so_hang) run=1;
                          }
                          ////////////////////////////////
                          /////////chuong trinh chinh/////
                          void main()
                          {
                          uchar w;//bien nay de
                          init_interrupt();//da cho phep ngat roi
                          //test_led(); //nap 0xff vao 16x8 byte bo dem hien thi
                          clear_buffer();//nap 0x00 vao 16x8 byte bo dem hien thi
                          if(en==0) scan_dataled_code();//luu 16x8 byte tu bang font vao bo dem hien thi

                          while(1)
                          {
                          if((run==1)&(en==1))
                          {
                          IE&=0xfd;//cam ngat
                          run_string(),run=0;
                          w=w+1;
                          if(w==8) {copy_datacode();w=0;}//con so 8 o day nghia la sau 8 lan dich bit vao 1 o 16x8 thi dich du lieu
                          row=so_hang;// khong can lenh nay van chay binh thuong
                          IE|=0x02;//cho ngat
                          }

                          }

                          }
                          //////////////////////////////////////////////
                          ////////nap0xff va 0x00 cho bo dem////////////
                          /*void test_led()
                          {
                          uchar i,j;
                          uint t_delay=10000;
                          for(i=0;i<so_hang;i++)
                          for(j=0;j<so_led;j++)
                          display_buffer[i][j]=0xff;
                          while(--t_delay);
                          }*/
                          void clear_buffer()
                          {
                          uchar i,j;
                          for(i=0;i<so_hang;i++)
                          for(j=0;j<so_led;j++)
                          display_buffer[i][j]=0;
                          }

                          ////////////////////////////////
                          ///////dich data va quet led////
                          //ham nay dua du lieu ra 64 cot va quet hang tuong ung du lieu do
                          void shift_dataled()
                          {
                          char i,j;

                          srck=0;
                          rck=0;
                          if(row<so_hang){
                          for(i=0;i<so_led;i++)
                          for(j=0;j<8;j++){
                          ser_in=display_buffer[row][i]&row_buffer[7-j];//truyen bit cao truoc
                          srck=1;
                          srck=0;
                          }
                          en_hc154=1;
                          rck=1;
                          rck=0;
                          scan_led=row_led[row];
                          en_hc154=0;
                          }

                          }

                          ////////////////////////////////////////
                          //
                          void copy_datacode()
                          {
                          uchar i;
                          static uchar j;
                          for(i=0;i<so_hang;i++)
                          shift_buffer[i]=Bmp002[16*j+i];
                          if(++j==18) j=0;
                          }
                          ////////////////////////////////
                          ////////chay chuoi//////////////
                          void run_string()
                          {
                          uchar i,j;
                          for(i=0;i<so_hang;i++)
                          {
                          for(j=0;j<so_led;j++)
                          {
                          display_buffer[i][j]<<=1;
                          if(j!=(so_led-1)) display_buffer[i][j]|display_buffer[i][j+1]&0x80)>>7);
                          else display_buffer[i][j]|shift_buffer[i]&0x80)>>7);
                          }
                          shift_buffer[i]<<=1;
                          }
                          }
                          /////////////////////////////
                          void scan_dataled_code()
                          {
                          uchar i,j;
                          for(i=0;i<so_led;i++){
                          for(j=0;j<so_hang;j++){
                          display_buffer[i][j]=Bmp002[i*16+j];
                          }
                          }
                          }
                          ////////////////////////////////
                          //////khoi dong ngat////////////
                          void init_interrupt()
                          {
                          TMOD=0x01; //timer0 che do 1 16b
                          TH0=0xF8;
                          TL0=0x30;
                          TR0=1;
                          TR1=1;
                          IE=0x82; //cho phep ngat timer0
                          }

                          Comment


                          • #14
                            hehehehehe! có mấy chỗ lỗi, thông cảm!

                            Comment


                            • #15
                              Nguyên văn bởi nhamdtk4 Xem bài viết
                              74595 có các chân và hoạt tác dụng của chúng như sau:
                              - 8 chân xuất dữ liệu, chân reset (10), cho phép chip (13): Mấy chân này chắc ko phải nói j rồi.
                              - Một chân nhận dữ liệu vào nối tiếp (14): Bạn muốn dịch bit 0 hay 1 thì tác động vào đây.
                              - Một chân xung clock (11): Cứ mỗi xung tác động vào chân này thì bit logic tại chân nhận dữ liệu (14) sẽ đc dịch vào một lần.
                              - Một chân chốt dữ liệu (12): Mỗi lần có xung tác động vào chân này thì dữ liệu đc xuất ra một lần
                              - Còn chân 9: Thì cứ có 8 xung tác động vào chân clock nó lại xuất ra một xung.
                              VD: Bạn nối một chú LED 7 thanh vào 74595 (a nối Q0,..., g nối Q6) rồi thử cho hiện số 5 chẳng hạn:
                              - Muốn có số 5 thi Q0 - Q7 có mức logic là: 01001000.
                              - Đầu tiên cho chân 14 nhận mức logic 1
                              - Kick một xung clock vào chân 11 rồi lại đưa chân 14 xuống mức logic 0 sau đó tác động 2 xung vào chân 11 rồi lại đưa chân 14 lên mức logic 1 tác động một xung vào chân 11 rồi lại đưa 14 xuống 0. Cuối cùng tác động một xung vào chân 11, sau đó chốt bằng cách tác động một xung vào chân 12, nhìn trên Proteus bạn sẽ thấy kết quả.
                              anh ơi, cho em hỏi chút, ở ví dụ anh lấy tại sao chân 11 lại phải kích 2 lần anh nhỉ, nó tích cực ở mức dương mà. Có nghĩa là nó đang ở mức 0, mà chuyển sang mức 1 thì cho phép truyền chứ. Em mới tìm hiểu, sai gì mong mọi ng đừng chém

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X