PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 14-11-2008, 11:39 AM   #1
nguyenquoctoan
Đệ tử 6 túi
 
Tham gia ngày: Nov 2007
Nơi Cư Ngụ: BK TP HCM
Bài gửi: 136
:
hiển thị giá trị xung trên lcd

tiểu đệ điều xung xuất giá trị ra lcd tăng giảm độ sáng của một bóng đèn,đoạn code như sau:

Code:
#include<16f877a.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#device PIC16f877a*=16 ADC=10
#use delay(clock=4000000)
#include<lcd_lib_4bit.c>
#byte porta = 0x05
#byte portb = 0x06 
#byte portc = 0x07   
#byte portd = 0x08
#byte porte = 0x09
void main()
{     
      
         set_tris_b(0);
         set_tris_e(0);
         LCD_init();
         delay_us(10);
         LCD_putcmd(0x80);
         delay_us(10);
         printf(LCD_putchar,"do_sang !");
         setup_ccp1(CCP_PWM);   // CCP1 la chan PWM

                        //(1/4000000)*4*16*128= 2048 us or 488 Hz

         setup_timer_2(T2_DIV_BY_16, 127, 1);
         set_pwm1_duty(500);
         LCD_putcmd(0xc0);
         delay_us(10);
         printf(LCD_putchar," %lu",CCP_1);//xuat gia r\tri g
     while(1)
      {
     
     }
}
chương trình đã chạy ok,nhưng khi hiển thị lcd giá trị của ccp_1 thì lại là 32125,kô biết giá trị này ở đâu ra trong khi giá trị duty của đệ là 500us,và chu kỳ là 2048us,xin các sư huynh chỉ giáo

thay đổi nội dung bởi: namqn, 14-11-2008 lúc 05:17 PM.
nguyenquoctoan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-11-2008, 05:29 PM   #2
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi nguyenquoctoan View Post
tiểu đệ điều xung xuất giá trị ra lcd tăng giảm độ sáng của một bóng đèn,đoạn code như sau:

Code:
#include<16f877a.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#device PIC16f877a*=16 ADC=10
#use delay(clock=4000000)
#include<lcd_lib_4bit.c>
#byte porta = 0x05
#byte portb = 0x06 
#byte portc = 0x07   
#byte portd = 0x08
#byte porte = 0x09
void main()
{     
      
         set_tris_b(0);
         set_tris_e(0);
         LCD_init();
         delay_us(10);
         LCD_putcmd(0x80);
         delay_us(10);
         printf(LCD_putchar,"do_sang !");
         setup_ccp1(CCP_PWM);   // CCP1 la chan PWM

                        //(1/4000000)*4*16*128= 2048 us or 488 Hz

         setup_timer_2(T2_DIV_BY_16, 127, 1);
         set_pwm1_duty(500);
         LCD_putcmd(0xc0);
         delay_us(10);
         printf(LCD_putchar," %lu",CCP_1);//xuat gia r\tri g
     while(1)
      {
     
     }
}
chương trình đã chạy ok,nhưng khi hiển thị lcd giá trị của ccp_1 thì lại là 32125,kô biết giá trị này ở đâu ra trong khi giá trị duty của đệ là 500us,và chu kỳ là 2048us,xin các sư huynh chỉ giáo
Tôi không dùng CCS C, nhưng tin rằng giá trị mà bạn đã xuất ra LCD không phải là giá trị duty cycle, và duty cycle của bạn cũng không phải là 500 us/2048 us (mà là 500/512). Bạn nên đọc lại datasheet của PIC16F877A về module CCP.

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

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-11-2008, 11:56 PM   #3
dientudong
Đệ tử 5 túi
 
Tham gia ngày: Oct 2008
Bài gửi: 95
:
các bạn cho mình hỏi sao doạn code của bạn nguyenquoctoan mình paste vào CCS 4.068 thì không biên dich được n nó báo lỗi gần chỗ ADC bên file .h
dientudong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-11-2008, 03:07 PM   #4
0903579509
Đệ tử 4 túi
 
Tham gia ngày: Mar 2007
Nơi Cư Ngụ: Da Nang
Bài gửi: 69
:
Bạn xem các file đính kèm sau và phần trợ giúp CCS C về set_pwm1_duty(value) sẽ hiểu rỏ hơn về PWM. Bạn mở file adc trong Proteus để mô phỏng, bạn nhấn Button để hiển thị các giá trị trên LCD, thay đổi chiết áp để xem sự thay đổi các giá trị ADC và CCP_1, mở Osciloscope để xem sự thay đổi của xung
Theo tôi giá trị CCP_1 chẳng có ý nghĩa gì, không nên quan tâm nếu đã tính thời gian đúng.
Nếu value là int8, bạn gán value = X thì CCP_1 = Y trong đó :
X / 255 = Y / 65535
Nếu value là int16 ( value phải <= 10 bit) thì
X / 1023 = Y / 65535
Bạn có thể thay đổi cấu hình ADC trong file.h thành 10 bit để xem.
Chúc vui!
File Kèm Theo
File Type: rar PWM.rar (21.4 KB, 55 lần tải)
0903579509 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 10:26 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam