Thông báo

Collapse
No announcement yet.

trục chặc đồng hồ số khi làm mạch thật

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

  • Mọi người giúp dùm mình nhé,sắp tết rồi làm cái đồng hồ đem về quê cho gia đình.Mình có đọc các bài viết trước của các bạn,có bạn cũng làm thành công!mình hy vọng bạn nào làm thành công có kinh nghiệm chỉ giáo lại dùm mình nhé.
    Sơ đồ mạch mô phỏng:



    code:
    #include <REGX51.H>
    //==========================================
    //Cac chan dieu khien
    #define SEC 0x00
    #define MIN 0x01
    #define HOUR 0x02

    char sec,hour,min;

    sbit L01 = P2^0; //LED 1
    sbit L02 = P2^1; //
    sbit L03 = P2^2;
    sbit L04 = P2^3;
    sbit L05 = P2^4;
    sbit L06 = P2^5; //LED 6

    sbit SCL = P1^1; // Dieu khien doc ghi Data
    sbit SDA = P1^0; // Dieu khien xung Clock


    sbit MENU = P3^0;
    sbit OK = P3^4;
    sbit DOWN = P3^2;
    sbit UP = P3^1;



    //************************************************** ****************************
    // KHAI BAO BIEN, MANG...
    unsigned char led7_data[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 }; //Decimal to Led7seg
    unsigned char Data,time,index,setx,bat_nhay,read_time=0;
    // KHAI BAO HAM, CHUONG TRINH CON
    void set_main(void); // Chuong trinh khoi tao main
    void setup_timer(void); // Chuong trinh cai dat timer
    void delay(unsigned int time); // Delay
    void Set_Clock(void); // Kiem tra va hieu chinh gia tri cua gio,phut,giay
    void Keypad(void); // Kiem tra xu ly phim nhan
    void T1_ISR(void); // Ngat timer 1 de nhay led
    void T0_ISR(void); // Ngat timer 0 de quet led

    // CAC CHUONG TRINH CON CHO I2C
    //************************************************** ****************************
    void I2C_start(void)
    {
    SCL = 1; SCL = 0;
    SDA = 1; SCL = 1;
    delay(2);
    SDA = 0; delay(2);
    SCL = 0; delay(2);
    }
    void I2C_stop(void)
    {
    SCL = 1; SCL = 0;
    SDA = 0; delay(2);
    SCL = 1; delay(2);
    SDA = 1;
    }
    bit I2C_write(unsigned char dat)
    {
    unsigned char i;
    for (i=0;i<8;i++)
    {
    SDA = (dat & 0x80) ? 1:0;
    SCL=1;SCL=0;
    dat<<=1;
    }
    SCL = 1; delay(2);
    SCL = 0;
    return dat;
    }
    unsigned char I2C_read(void)
    {
    bit rd_bit;
    unsigned char i, dat;
    dat = 0x00;
    for(i=0;i<8;i++) /* For loop read data 1 byte */
    {
    delay(2);
    SCL = 1; delay(2); /* Set SCL */
    rd_bit = SDA; /* Keep for check acknowledge */
    dat = dat<<1;
    dat = dat | rd_bit; /* Keep bit data in dat */
    SCL = 0; /* Clear SCL */
    }
    return dat;
    }
    //************************************************** ****************************
    // CAC CHUONG TRINH CON CHO DS1307
    //************************************************** ****************************
    unsigned char DS1307_read(unsigned char addr)
    {
    unsigned int temp,ret;
    I2C_start(); /* Start i2c bus */
    I2C_write(0xD0); /* Connect to DS1307 */
    I2C_write(addr); /* Request RAM address on DS1307 */
    I2C_start(); /* Start i2c bus */
    I2C_write(0XD1); /* Connect to DS1307 for Read */
    ret = I2C_read(); /* Receive data */
    I2C_stop();
    //************************************************** ********
    temp = ret; /*BCD to HEX*/
    ret = (((ret/16)*10)+ (temp & 0x0f)); /*for Led 7seg*/
    //************************************************** ********
    return ret;
    }

    void DS1307_Write(unsigned char addr,unsigned char dat)
    {
    unsigned int temp;
    //**********************************************
    temp = dat ; /*HEX to BCD*/
    dat = (((dat/10)*16)|(temp %10)); /*for Led 7seg*/
    //**********************************************
    I2C_start(); /* Start i2c bus */
    I2C_write(0XD0); /* Connect to DS1307 */
    I2C_write(addr); /* Request RAM address on DS1307 */
    I2C_write(dat); /* Connect to DS1307 for Read */
    I2C_stop();
    }

    void Out_1Hz()
    {
    I2C_start(); /* Start i2c bus */
    I2C_write(0xD0); /* Connect to DS1307 */
    I2C_write(0x07); /* thanh ghi CONTROL */
    I2C_write(0x10); /* lay ra xung chuan 1Hz ~ 1s */
    I2C_stop();
    }

    void Read_DS1307()
    {
    sec = DS1307_read(SEC);
    min = DS1307_read(MIN);
    hour = DS1307_read(HOUR);
    }

    void Write_DS1307()
    {
    DS1307_Write(SEC,sec);
    DS1307_Write(MIN,min);
    DS1307_Write(HOUR,hour);
    }
    //************************************************** ****************************
    void delay(unsigned int time)
    {
    while(time--); // chuong trinh con delay
    }
    void set_main(void) // Chuong trinh khoi tao main
    {
    P0=P1=P3=0x00;
    P2=0xFF; // P2 chan dieu khien led
    UP=DOWN=MENU=OK=1; // set cac swith len 1,tich cuc muc thap
    }
    void setup_timer(void) // Setup timer 0;1;
    {
    TMOD=0x11; // timer0 & timer1 set che do 8 bit tu nap lai
    TH0=-1000/256; TL0=-1000%256;
    TH1=0x3C; TL1=0xAF;
    ET1=1; ET0=1; EA=1;
    TF0=0; TF1=0;
    TR0=1; TR1=1;
    }
    void T1_ISR(void) interrupt 3 // Dung ngat Timer0 de doc DS1307
    {
    TR1=0;TF1=0;
    TH1=0x3C; // nap lai gia tri cho thanh ghi
    TL1=0xAF;
    time++;
    if(time==5)
    {
    time=0; bat_nhay++; read_time=1;
    if(bat_nhay==3)
    bat_nhay=0; // chop tat khi dieu chinh Clock
    }
    TR1=1;
    }
    //*************************************
    void T0_ISR(void) interrupt 1 // Dung ngat Timer1 de hien thi 6 Led_7D
    {
    TR0=0;TF0=0;
    TH0=-1000/256; // Nap lai gia tri cho thanh ghi
    TL0=-1000%256;
    {
    index++;
    P2=0xFF;L01=L02=L03=L04=L05=L06=1;

    if(index==1)
    {
    Data=sec;
    P0=0xff; // data led ,tat het led
    if((setx==3 && bat_nhay==1))
    { index++; index++; }

    else
    {
    L01=0; // bat led 1 Giay
    P0=led7_data[Data%10];//xuat gia tri hang don vi
    }
    }
    if(index==2)
    {
    P0=0xff;
    L02=0; // bat led 2 Chuc Giay
    P0=led7_data[Data/10]; //xuat gia tri hang chuc
    }

    if(index==3)
    {
    Data=min;
    P0=0xff;
    if((setx==1 && bat_nhay==1))
    { index++; index++; }
    else
    {
    L03=0; // bat led 3 phut
    P0=led7_data[Data%10];
    }
    }
    if(index==4)
    {
    P0=0xff;
    L04=0; // bat led 4 Chuc phut
    P0=led7_data[Data/10];
    }

    if(index==5)
    {
    Data=hour;
    P0=0xff;
    if(setx==2 && bat_nhay==1)
    {
    index++;
    index++;
    }
    else
    {
    L05=0; // bat led 5 Gio
    P0=led7_data[Data%10];
    }
    }
    if(index==6)
    {
    P0=0xff;
    L06=0; // bat led 6 Chuc gio
    P0=led7_data[Data/10];
    }

    if(index==7) index=0; //reset lai chi so chay index
    }
    TR0=1;
    }
    //****************************************
    void Set_Clock(void) // Kiem tra va hieu chinh gia tri cua gio,phut,giay
    {
    //Tang
    if(sec ==60) {sec=0; }
    if(min ==60) {min =0;}
    if(hour==24) {hour=0;}


    //Giam
    if(min ==-1) {min =59;}
    if(hour==-1) {hour=23;}
    }
    //////////////////////////////////////////////////////
    void Keypad(void) // Kiem tra phim bam.
    {
    //*******SET=0: DONG HO CHAY BINH THUONG****************
    //*******SET=1: CHINH PHUT******************************
    //*******SET=2: CHINH GIO*******************************
    if(MENU==0)
    {
    while(MENU==0)
    {;}
    setx++;
    if(setx==4)
    { setx=0; Write_DS1307();}
    }

    if(OK==0)
    {
    while (OK==0)
    {;}
    setx=0;
    Write_DS1307();
    }

    if(setx==1)
    {
    if(UP==0)
    {
    while(UP==0) {;}
    min++;
    }
    if(DOWN==0)
    {
    while(DOWN==0) {;}
    min--;
    }
    }

    if(setx==2)
    {
    if(UP==0)
    {
    while(UP==0) {;}
    hour++;
    }
    if(DOWN==0)
    {
    while(DOWN==0) {;}
    hour--;
    }
    }

    if(setx==3)
    {
    if(UP==0)
    {
    while(UP==0) {;}
    sec=sec+10;;
    }
    if(DOWN==0)
    {
    while(DOWN==0) {;}
    sec=sec-10;
    }
    }
    Set_Clock();
    delay(1000);
    }

    //************ CHUONG TRINH CHINH *************
    void main()
    {
    delay(5000);
    Out_1Hz();
    set_main();
    time=index=setx=read_time=0;
    setup_timer();

    while(1)
    {

    Keypad();
    if((setx==0)&&(read_time==1))
    {
    read_time = 0;
    Read_DS1307();
    }
    else
    {
    sec = DS1307_read(SEC);
    }
    }
    }

    hiện tượng: vi điều khiển đã hoạt động,điểu chỉnh phím tăng giảm ok,nhưng chưa đọc được dữ liệu từ ds1307.Led nhấp nháy 1s chưa hoạt động được,mong các bạn giúp đỡ nhé.Thank!!
    mail:dqnam952@gmail.com

    Comment


    • riêng tôi thấy tát cả đều chưa có tran kéo dong cho 7s hoạt động.thân

      Comment


      • mạch thật tại chân 7 mình có transistor bạn à,mô phỏng là vậy thôi.
        mail:dqnam952@gmail.com

        Comment


        • Miệt mài từ sáng giờ cuối cùng cũng thành công! tối up clip len cho anh em xem.chúc mọi người năm mới nhiều sức khoẻ!!
          mail:dqnam952@gmail.com

          Comment


          • traitimanhdanhriengchoem_90
            co vấn đề gì mình sẽ giúp đớ

            Comment


            • minh làm song rùi chạy ok lắm mình làm cả trên led đon nua

              Comment


              • Nguyên văn bởi coinage_90 Xem bài viết
                minh làm song rùi chạy ok lắm mình làm cả trên led đon nua
                Bạn làm cái mạch mình đang hỏi chứ? nếu bạn ràm rồi bạn post lên đi. Mình làm mà sao nó ko chạy
                |

                Comment


                • Nguyên văn bởi namkpac Xem bài viết
                  còn đây là file mạch in mình vẽ trên orcad, khối điều khiển thôi, khối led mình mắc rời, mong các pác chỉ giúp Mach 89C51.rar
                  Đây là mạch mình làm đây, ko biết có gì sai ko mà con led đơn tại chân 7 con DS nó ko xuất xung 1Hz.
                  |

                  Comment


                  • Nguyên văn bởi namkpac Xem bài viết
                    Nhờ các pác chỉ giúp cái đồng hồ này tui làm mạch thật mà sao nó không chạy và con 7805 thì nóng ran nhỉ
                    đây là mạch mình làm đây.
                    |

                    Comment


                    • bài viết nằm ở trang 15, nhờ mọi người coi hộ lại với
                      |

                      Comment


                      • Nguyên văn bởi namkpac Xem bài viết
                        bài viết nằm ở trang 15, nhờ mọi người coi hộ lại với
                        ko mo dc Free File Sharing Made Simple - MediaFiregio1.zipgio1.zipgio1.zipuqjbpn

                        Comment


                        • gio1.zipgio1.zipgio1.zip co pai mach nay ko

                          Comment


                          • Nguyên văn bởi coinage_90 Xem bài viết
                            [ATTACH]38997[/ATTACH][ATTACH]38997[/ATTACH][ATTACH]38997[/ATTACH] co pai mach nay ko
                            không cái mạch mà mình đã post lên ở những trang trước, nó gồm sơ đồ nguyên lý, code, và mạch layout nữa, phiền các bạn coi hộ với.
                            |

                            Comment


                            • Nguyên văn bởi namkpac Xem bài viết
                              không cái mạch mà mình đã post lên ở những trang trước, nó gồm sơ đồ nguyên lý, code, và mạch layout nữa, phiền các bạn coi hộ với.
                              bây giờ chú để trống chân 7 ko hàn gì hết rồi cấp nguồn đo như vầy nhé, thang đo DC, que đen đo chân 7, que đỏ cắm lên 5V. Coi có gì thay đổi ko

                              Comment


                              • Nguyên văn bởi namkpac Xem bài viết
                                không cái mạch mà mình đã post lên ở những trang trước, nó gồm sơ đồ nguyên lý, code, và mạch layout nữa, phiền các bạn coi hộ với.
                                Mạch nguyên lý của bạn tôi không thể xem vì tôi chỉ sài orcad9.

                                Phần layout tôi có 1 số góp ý là:

                                - phần chống nhiễu nguồn Bạn đã dùng tụ C6 và C9 để lọc, tuy nhiên nếu bạn vẽ đường mass từ chân 20 của 8951 tới chân 2 7805 thật ngắn sẽ chống nhiễu hiệu quả hơn. Điều này sẽ tránh trường hợp mạch chạy bị "điên điên" vì nhiễu nguồn.

                                - R7 trong mạch để làm gì vậy bạn?

                                - Bạn nên treo P1 lên 5V bằng 1 điện trở thanh thay vì nhiều điện trở đơn lẻ. Mạch sẽ gọn và đẹp hơn nhiều.

                                - Riêng vấn đề 7805 quá nóng bạn có thể dùng phương pháp khoanh vùng để tìm ra nguyên nhân, đơn giản là gỡ lần lượt các IC ra khỏi mạch để kiểm tra dòng tiêu thụ nhằm phát hiện "quá dòng" ở đâu.
                                PCT COMPUTER
                                (Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X