Thông báo

Collapse
No announcement yet.

Timer 0 for PIC18LF4550 ???

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

  • Timer 0 for PIC18LF4550 ???

    Gởi các huynh đệ trên diễn đàn có thể giúp tại hạ debug mấy lỗi sau với. Tại hạ chỉ muốn làm thử một chương trình nhấp nháy LED ở chân RA0 --> phần cứng rất cơ bản, còn đây la code của ct:
    ----------------------------------------------------------------
    program written by Eng.X - HT-PIC18 v8.35PL
    project to blind 1 LED on RA0
    ----------------------------------------------------------------

    #include<pic18.h>
    #include<stdio.h>

    /* Chu thich cho cac bit cau hinh */
    __CONFIG(1, HSPLL & PLLDIV1 & CPUDIV2 & FCMDIS & IESODIS);

    bit out;

    void interrupt Timer0(void)
    {
    if (TMR0IF == 1) //xac dinh ngat timer 0 thi thuc hien ct
    {
    TMR0IF = 0; // Xoa co ngat Timer 0
    TMR0H = 0xAA; // nap lai so dem
    TMR0L = 0xAA;
    if(out == 1)
    {
    out = 0;
    RA0 = out;
    }
    if(out == 0)
    {
    out = 1;
    RA0 = 0;
    }
    }
    }


    void main ()
    {
    OSTS = 1;
    INTCON = 0b11100100;
    IPEN = 1;
    T0CON = 0b10100000;
    TMR0H = 0xAA;
    TMR0L = 0xAA;
    TMR0ON =
    out = 1;
    TRISA = 0;
    while(1)
    {
    TRISA = 0;

    };
    }

    Nhung ko thấy mạch nhấp nháy tẹo nào cả !
    Troi ko so dat ko so chi so minh ko biet so

  • #2
    Trong đoạn chương trình xử lý ngắt, trong cả hai trường hợp bạn đều gán RA0 = 0 thì làm sao nhấp nháy được.

    Thân,
    Biển học mênh mông, sức người có hạn

    Comment


    • #3
      Phân tích đoạn code này:

      __CONFIG(1, HSPLL & PLLDIV1 & CPUDIV2 & FCMDIS & IESODIS);

      Với config như trên, chắc bác KST dùng thạch anh 4MHZ, nếu đúng như vậy thì PIC của bác đang chạy ở 48MHz.


      INTCON = 0b11100100;
      IPEN = 1;

      Đoạn khởi tạo trên thì bác nên để IPEN trước INTCON. Vì cấu hình INTCON phụ thuộc vào IPEN nên bác phải khai báo nó trước.

      T0CON = 0b10100000;

      Với cấu hình T0CON như trên thì bác dùng T0 ở chế độ 16 bit và nguồn clk lấy từ chân T0CKI theo sườn lên và chia 2.

      TMR0ON là không cần thiết.

      Bác nạp cho TMR0 giá trị AA x 256 + AA = 170x256 + 170 = 43690.
      Như vậy số clk để TMR0 tràn là 65536 - 43690 = 21846.
      PIC chạy ở tốc độ 48Mhz như vậy thời gian tràn của TMR0 là 1/(48.10^6)*21846 xấp xỉ 0.46ms.

      Trong vòng while(1) bác nên để NOP(); hay CLRWDT();

      Còn vụ viết ngắt chắc bác KST quen viết Keil rồi. PIC bang hiếm ai viết vậy

      Chươngh trình sau nháy LED chân RA0, cỡ 0.5s, tại hạ copy từ một chương trình khác:

      #include<pic18.h>

      /* Chu thich cho cac bit cau hinh */
      __CONFIG(1,HSPLL & USBPLL & PLLDIV1 & CPUDIV1 & FCMDIS & IESODIS);

      const TMR0H_RELOAD = 0x0E8;
      const TMR0L_RELOAD = 0x99;
      unsigned int count=0;

      void interrupt MyISR(void)
      {

      if (TMR0IF==1) //xac dinh ngat timer 0 thi thuc hien ct
      {
      count++;
      TMR0IF = 0; // Xoa co ngat Timer 0
      TMR0ON = 0; // Tat Timer 0
      TMR0H = TMR0H_RELOAD; //moi lan tran la 1ms
      TMR0L = TMR0L_RELOAD;
      TMR0ON = 1;
      if (count==100)
      {
      count=0;
      RA0 = !RA0;
      }

      }

      } //end of ISR

      void main ()
      {

      INTCON = 0b11100100;
      IPEN = 1;
      T0CON = 0b10000010; //chia 8


      TMR0H = TMR0H_RELOAD;
      TMR0L = TMR0L_RELOAD;

      TRISA = 0;

      while(1)
      {
      CLRWDT();
      }

      }

      Comment


      • #4
        Goi MOD Hoa, chương trình của huynh đệ không chạy. RA0 luôn ở mức 1 ??? He hehe h e. tại sao vậy nhỉ các huynh đệ ???
        Troi ko so dat ko so chi so minh ko biet so

        Comment


        • #5
          tôi đồng ý với nhận định của bác namqn, đoạn code xử lý LED của KST có vấn đề:
          ---------------------
          if(out == 1)
          {
          out = 0;
          RA0 = out;
          }

          if(out == 0)
          {
          out = 1;
          RA0 = 0;
          }
          ----------------------
          ban đầu KST khời tạo bit OUT = 1--->
          + lần vào ngắt đầu tiên sẽ thực hiện nhánh lệnh trên lúc này OUT=RA0=0,
          + lần vào ngắt thứ 2 --->nhánh lệnh dưới thực hiện (lỗi tại đây), KST dựng OUT trở lại 1, nhưng lại ko gán RA0=OUT để = 1 mà gán RA0=0
          + lần vào ngắt thứ 3 lại trở lại nhánh trên vì Out=1---> RAO=0

          Như vậy dù phần hardware ok, và chương trình đã vào ngắt--->nhưng
          RA0 lại luôn bằng 0---> LED luôn sáng hay luôn tắt tùy thuộc phần cứng của KTS.
          ---------
          Không biết lệnh của KST là
          if then
          else
          then
          hay
          if then

          if then
          ----------------------

          Comment


          • #6
            Hu huu huu, tại hạ đã sửa như vậy rồi mà có được đâu. Tại sao thế ???
            Troi ko so dat ko so chi so minh ko biet so

            Comment


            • #7
              Hừ hừ, xem kỹ lại phần phân tích của www9van thì thấy KST viết phần xử lý ngắt làm cho phần code:
              Code:
              if(out == 0)
              {
              out = 1;
              RA0 = 0;
              }
              luôn luôn chạy sau cùng, do đó RA0 sẽ luôn có giá trị 0 khi ra khỏi chương trình xử lý ngắt.

              Thân,
              Biển học mênh mông, sức người có hạn

              Comment


              • #8
                Có lẽ nguyên nhân sai nằm ở đây: cổng A có thể là analog hay digital. Nếu không khởi tạo ở ADCON1 hay CMCON thì nó hiểu là lối vào analog, do vậy bác KST thêm dòng: ADCON1=0b00001111;(Nếu vẫn chưa được thì thêm khởi tạo cho CMCON nữa, dạo này tui bận quá nên bác đọc kỹ nhé, đọc kỹ phần khởi tạo cổng A ấy). Còn để nháy led đơn giản là viết: RA0=!(RA0);

                Comment


                • #9
                  Nếu lênh của KST là 2 lệnh
                  if then
                  if then
                  tách biệt nhau, mà ko là
                  if then else thì....kết quả thu đựoc như vậy là đúng rồi he he
                  gợi ý như sau:
                  1. Nên viết thử 1 chương trình để dựng PIN nào đó lên 1, nếu được rồi thì viết chương trình khác hạ nó xuống 0 ---> đảm bảo config đúng PIN là IO output
                  2. Sau đó dùng lệnh delay viết nhấp nháy Pin đó (ko dùng ngắt) --> để đảm bảo thông suất phần hardware, từ CPU, thạch anh có chính xác ko ??..
                  3. Nếu 2 bươc trên đều ok --> viết dùng ngắt để nhấp nháy
                  và tại chương trình xử lý ngắt chỉ cần dùng 1 lệnh lấy bù bit như BA nói cho gọn vidu: RX.y = ! RX.y X là port, y là pin

                  Comment


                  • #10
                    Cái chương trình em viết trên, chạy OK rồi đó, lúc trước em thử với port D là OK rồi. Còn muốn dùng với portA thì config như anh BA nói.

                    Comment


                    • #11
                      He heh e he !
                      Tại hạ chưa thử chương trình nhưng những lập luận của trưởng nhóm ăn mày cũng chưa thật chính xác = BA, (1!), Bây giờ tại hạ thấy được nhiều điều rồi.
                      Chúc vui vẻ !
                      Troi ko so dat ko so chi so minh ko biet so

                      Comment


                      • #12
                        Lỗi trong phần code là trực quan, còn cấu hình của các chân analog là một cái bẫy mà đôi khi người có kinh nghiệm vẫn quên. Chú BA nói rồi thì không cần nhắc lại.

                        Nếu cấu hình chân đúng mà code như vậy thì cũng chẳng thể nào chạy đúng được.

                        Bạn sửa code rồi mà vẫn không đúng thì những người khác mới nghĩ đến đặc điểm của chân I/O bạn đang dùng. Với trường hợp của bạn, ngoại trừ đặt 4-bit thấp nhất của ADCON1 là '1111' thì không thể đặt RA0 là digital pin.

                        Đó là 2 trong số những lý do có thể dẫn đến việc chương trình được viết ra chạy không theo ý định. Liệu có một lý do nào là chính xác hơn những lý do còn lại không?

                        Thân,
                        Biển học mênh mông, sức người có hạn

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        • mèomướp
                          Trả lời cho Sửa bộ nguồn DC 60V 45A
                          bởi mèomướp
                          Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
                          hôm nay, 13:11
                        • tuyennhan
                          Trả lời cho Sửa bộ nguồn DC 60V 45A
                          bởi tuyennhan
                          Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
                          hôm nay, 09:25
                        • tuyennhan
                          Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                          bởi tuyennhan
                          Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
                          Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
                          hôm nay, 09:10
                        • Ng.Phuong.5
                          Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                          bởi Ng.Phuong.5
                          Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                          Mấy con...
                          Hôm qua, 19:44
                        • viettinh
                          Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                          bởi viettinh
                          Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
                          Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
                          Hôm qua, 18:12
                        • nguyendinhvan
                          Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                          bởi nguyendinhvan
                          Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
                          Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
                          Cách đơn giản...
                          Hôm qua, 00:04
                        • mèomướp
                          Trả lời cho Sửa bộ nguồn DC 60V 45A
                          bởi mèomướp
                          Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
                          08-01-2025, 19:02
                        • tuyennhan
                          Trả lời cho Sửa bộ nguồn DC 60V 45A
                          bởi tuyennhan
                          Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
                          08-01-2025, 15:43
                        • tuyennhan
                          Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                          bởi tuyennhan
                          Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
                          08-01-2025, 15:28
                        • mèomướp
                          Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                          bởi mèomướp
                          Dạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
                          08-01-2025, 11:44
                        Đang tải...
                        X