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 23-08-2008, 07:47 PM   #1
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 luanktd View Post
Mình muốn hỏi các bác.Mình có viết một chương trình sau với PIC8F4431 nhưng khi dịch ra chạy thì chạy không đươc
Code:
#include<18f4431.h>
#fuses NOWDT,NOLVP,PUT,XT
#byte PORTB=0xF81
#byte TRISB=0xF93
void main()
{ 
 While(1)
  {
   TRISB=0x00;
   PORTB=0x0F;
  }
}
Các chân ở portB đều là 0V hết.Mong các bác chỉ giáo
Bạn chạy thử bằng mô phỏng hay mạch thật? Nếu thử bằng mạch thật thì tần số thạch anh được sử dụng là bao nhiêu?

PIC18F4431 có 7 từ cấu hình, trong đó tối thiểu các từ cấu hình 1 đến 4 cần được thiết lập giá trị ban đầu. Bạn chỉ thiết lập có vài cụm cấu hình trong số đó. Tôi đã gặp nhiều trường hợp PIC18F không chạy trong mạch thật, chỉ vì thiết lập thiếu các từ cấu hình.

Khi viết code cho PIC18, tôi luôn thiết lập đầy đủ các từ cấu hình. Ví dụ dưới đây viết cho MPLAB C18, dùng cho các PIC18 như PIC18Fx320:
Code:
//Configuration bits
#pragma config OSC = INTIO1
#pragma config FSCM = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOR = ON
#pragma config BORV = 27
#pragma config WDT = OFF
#pragma config WDTPS = 32768
#pragma config MCLRE = ON
#pragma config PBAD = DIG
#pragma config CCP2MX = C1
#pragma config STVR = ON
#pragma config LVP = OFF
#pragma config DEBUG = OFF
#pragma config CP0 = OFF
#pragma config CP1 = OFF
#pragma config CP2 = OFF
#pragma config CP3 = OFF
#pragma config CPB = OFF
#pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRT3 = OFF
#pragma config WRTB = OFF
#pragma config WRTC = OFF
#pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTR3 = OFF
#pragma config EBTRB = OFF
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 23-08-2008, 07:07 PM   #2
picpen
Đệ tử 5 túi
 
picpen's Avatar
 
Tham gia ngày: Jun 2008
Bài gửi: 112
:
Chương trình của bạn thiếu hàm khai báo sử dụng tần số thạch anh cho pic :
#use delay(clock= x ) , x là tần số thạch anh mà bạn dùng cho pic ,nó có thể là 4Mhz ,10,12 hoặc 20Mhz tùy bạn chọn.
__________________
** xin hãy cho tôi là tượng đá
** Để muôn đời không nhớ thương ai ..!!
picpen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-08-2008, 11:55 PM   #3
popeye_ts22
Đệ tử 2 túi
 
popeye_ts22's Avatar
 
Tham gia ngày: Jul 2008
Nơi Cư Ngụ: Hà Nội
Bài gửi: 42
:
Send a message via Yahoo to popeye_ts22
Smile

Em đọc về ADC rùi gửi lên LCD mà sao chẳng thấy hiển thị đúng ADC mà toàn ra giá trị lung tung các bác ạ.Em bỏ chân biến trở ra mà màn hình vẫn cứ hiện giá trị lung tung.Em biết đấy không phải là ADC nhưng không hiểu vì sao.Các bác giúp thằng em với..
Code:
#include <16f877a.h>
#include <def_877a.h>
#device 16F877*=16 ADC=10 
#use delay(clock=8000000)
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#include <lcd_lib_4bit.c>

unsigned int  a,b,c,d,adc;
long value;
char *text;
void main()
{
   set_tris_d(0);
   setup_adc_ports( AN0_AN1_AN3 );
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel( 0 );
   delay_ms(100);
   text="V";
   while(1)
   {
   adc=read_adc();
   //value=(adc*5000)/1023;
   
   value = (long)adc * 5000; // covert adc reading to milivolts
   value = value / 1023; // 0..1023 -> 0-5000mV
   a=value/1000;
   b=(value-(a*1000))/100;
   c=(value-(a*1000)-(b*100))/10;
   d=(value-(a*1000)-(b*100)-(c*10));
   LCD_Init();
   LCD_putcmd(0x80);
   LCD_putchar(48+a);
   LCD_putcmd(0x81);
   LCD_putchar(48+b);
   LCD_putcmd(0x82);
   LCD_putchar(48+c);
   LCD_putcmd(0x83);
   LCD_putchar(48+d);
   LCD_putcmd(0x84);
   LCD_putchar(text);
   delay_ms(100);
   }
}

thay đổi nội dung bởi: popeye_ts22, 27-08-2008 lúc 12:03 AM.
popeye_ts22 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-08-2008, 12:23 AM   #4
popeye_ts22
Đệ tử 2 túi
 
popeye_ts22's Avatar
 
Tham gia ngày: Jul 2008
Nơi Cư Ngụ: Hà Nội
Bài gửi: 42
:
Send a message via Yahoo to popeye_ts22
Smile

Em còn 1 số câu hỏi nữa tiện thể các bác trả lời luôn cho em:
- Có set đc 1 chân khác của PIC làm chân PWM không ạ.
- Khi Timer2 hoạt động PWM thì còn mình còn dùng làm Timer để đếm thời gian được không.Nếu điều khiển 2 động cơ cùng 1 lúc thì bắt buộc phải dùng đến Timer0,timer1 để đếm xung về,và như thế là hết các bộ timer,counter phải ko ạ.
- ADC có 8 kênh,nếu em dùng cả 8 kênh thì Vref=Vdd.Vậy thì ADC sẽ rất dễ bị nhiễu đúng không ạ.Có cách nào khắc phục được không ạ.
- Trong CCS mình chỉ cần chọn ALL ANALOG là chip mặc định Vref=Vdd có phải ko ạ.
popeye_ts22 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-08-2008, 02:09 AM   #5
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 popeye_ts22 View Post
Em còn 1 số câu hỏi nữa tiện thể các bác trả lời luôn cho em:
- Có set đc 1 chân khác của PIC làm chân PWM không ạ.
- Khi Timer2 hoạt động PWM thì còn mình còn dùng làm Timer để đếm thời gian được không.Nếu điều khiển 2 động cơ cùng 1 lúc thì bắt buộc phải dùng đến Timer0,timer1 để đếm xung về,và như thế là hết các bộ timer,counter phải ko ạ.
- ADC có 8 kênh,nếu em dùng cả 8 kênh thì Vref=Vdd.Vậy thì ADC sẽ rất dễ bị nhiễu đúng không ạ.Có cách nào khắc phục được không ạ.
- Trong CCS mình chỉ cần chọn ALL ANALOG là chip mặc định Vref=Vdd có phải ko ạ.
1. Bạn có thể dùng một chân I/O thông thường để tạo PWM bằng phần mềm (một số đặc điểm về loại tín hiệu PWM này tôi đã từng đề cập trên diễn đàn).

2. Khi Timer2 được dùng cho chức năng PWM của module CCP thì nó vẫn là timer, nếu khéo léo thì chúng ta vẫn dùng được nó như một bộ đếm thời gian. Nếu điều khiển 2 động cơ cùng lúc thì còn tùy vào trường hợp cụ thể, khả năng vận dụng của người thiết kế, không nhất thiết phải dùng hết 3 timer.

3. Nếu thiết kế kém hiệu quả thì một kênh ADC cũng nhiễu, nếu thiết kế tốt thì 8 kênh vẫn chạy tốt.

4. Tôi không dùng CCS C, nhường câu trả lời cho các bạn dùng CCS C.

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 27-08-2008, 12:18 PM   #6
picpen
Đệ tử 5 túi
 
picpen's Avatar
 
Tham gia ngày: Jun 2008
Bài gửi: 112
:
Đầu vào ADC rất nhạy và cũng rất rễ nhiễu nếu thiết kế phần cứng không tốt
Bác Nam ơi ,bác có thể cho em và mọi người biết: một số biện pháp và chú ý khi thiết kế phần cứng cho bộ chuyển đổi ADC của pic chứ ??
Em cũng đang làm việc với 8 đầu vào ADC của pic6f877a ,8 đầu vào này đc nối với 8 cảm biến,em dùng 1 lá 103 mắc từ mỗi cổng ADC nối xuống mass để lọc nhiễu tần số cao ...... nhưng kết quả cũng ko tốt nắm. vì các cổng tín hiệu vẫn bị nhiễu lẫn nhau : cứ có 1 đầu vào thay đổi thì các đầu vào còn lại it nhiều bị nhiễu ,ảnh hưởng và thay đổi theo

** Mong mọi người giúp đỡ vấn đề trên ****** Thanks ...........
__________________
** xin hãy cho tôi là tượng đá
** Để muôn đời không nhớ thương ai ..!!
picpen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-08-2008, 08:12 PM   #7
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 picpen View Post
Đầu vào ADC rất nhạy và cũng rất rễ nhiễu nếu thiết kế phần cứng không tốt
Bác Nam ơi ,bác có thể cho em và mọi người biết: một số biện pháp và chú ý khi thiết kế phần cứng cho bộ chuyển đổi ADC của pic chứ ??
Em cũng đang làm việc với 8 đầu vào ADC của pic6f877a ,8 đầu vào này đc nối với 8 cảm biến,em dùng 1 lá 103 mắc từ mỗi cổng ADC nối xuống mass để lọc nhiễu tần số cao ...... nhưng kết quả cũng ko tốt nắm. vì các cổng tín hiệu vẫn bị nhiễu lẫn nhau : cứ có 1 đầu vào thay đổi thì các đầu vào còn lại it nhiều bị nhiễu ,ảnh hưởng và thay đổi theo

** Mong mọi người giúp đỡ vấn đề trên ****** Thanks ...........
Có nhiều vấn đề liên quan đến câu hỏi của bạn mà hiện giờ tôi cũng chưa có thời gian tìm lại các tài liệu. Bạn có thể xem qua phần "Common Design Mistakes" trong tài liệu "ABCs of ADCs" của National Semiconductor (link download dưới đây), để từ đó tránh được một số lỗi thiết kế thường gặp. Điều này đôi khi có thể giúp bạn có được một thiết kế đủ tốt, chứ chưa cần đến những kỹ thuật phức tạp khác.

http://www.national.com/appinfo/adc/...Cs_of_ADCs.pdf

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

thay đổi nội dung bởi: namqn, 27-08-2008 lúc 08:20 PM. Lý do: lỗi đính kèm tập tin
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-01-2012, 03:13 AM   #8
ngdnhanbk
Đệ tử 2 túi
 
Tham gia ngày: Nov 2010
Bài gửi: 38
:
Trích:
Nguyên văn bởi namqn View Post
Có nhiều vấn đề liên quan đến câu hỏi của bạn mà hiện giờ tôi cũng chưa có thời gian tìm lại các tài liệu. Bạn có thể xem qua phần "Common Design Mistakes" trong tài liệu "ABCs of ADCs" của National Semiconductor (link download dưới đây), để từ đó tránh được một số lỗi thiết kế thường gặp. Điều này đôi khi có thể giúp bạn có được một thiết kế đủ tốt, chứ chưa cần đến những kỹ thuật phức tạp khác.

http://www.national.com/appinfo/adc/...Cs_of_ADCs.pdf

Thân,
Anh có thể up lại tài liệu trên được không, link die rồi ạ
ngdnhanbk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-08-2008, 11:08 PM   #9
picpen
Đệ tử 5 túi
 
picpen's Avatar
 
Tham gia ngày: Jun 2008
Bài gửi: 112
:
Cám ơn bác Nam nhiều !!!!
__________________
** xin hãy cho tôi là tượng đá
** Để muôn đời không nhớ thương ai ..!!
picpen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-08-2008, 11:51 AM   #10
bean984
Đệ tử 3 túi
 
Tham gia ngày: Dec 2007
Bài gửi: 51
:
mình đang tìm hiểu con 16f628a. đang làm với 16f877a bg chuyển qua tìm hiểu con này. loay hoay mãi vẫn không điều khiển được chân RA4. mình cũng đã thử kéo con trở 1k lên VDD nhưng cũng k đc. xin hỏi làm sao để set chân RA4 thành chân I/O? con này còn có chân nào đặc biệt không?
cảm ơn mọi người.
bean984 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-08-2008, 10:08 PM   #11
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 bean984 View Post
mình đang tìm hiểu con 16f628a. đang làm với 16f877a bg chuyển qua tìm hiểu con này. loay hoay mãi vẫn không điều khiển được chân RA4. mình cũng đã thử kéo con trở 1k lên VDD nhưng cũng k đc. xin hỏi làm sao để set chân RA4 thành chân I/O? con này còn có chân nào đặc biệt không?
cảm ơn mọi người.
Để tránh cho chân RA4 là ngõ ra của bộ so sánh thứ hai, cần đảm bảo 3 bit thấp nhất của thanh ghi CMCON khác với giá trị "110". Vì RA4 là loại ngõ ra cực máng hở, nhất thiết phải có điện trở kéo lên để xuất mức cao ra chân này.

Các chân RA0 .. RA3 sẽ ở trạng thái analog khi vừa reset PIC, cần thay đổi 3 bit thấp nhất của thanh ghi CMCON một cách thích hợp (xem hình 10-1 trong datasheet) để có thể dùng chúng như chân digital.

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 29-08-2008, 10:42 AM   #12
bean984
Đệ tử 3 túi
 
Tham gia ngày: Dec 2007
Bài gửi: 51
:
ý e muốn hỏi là nếu dùng ccs thì sẽ phải làm ntn? (e đã đọc datasheet và cũng đã biết phải thiết lập thanh ghi CMCON như vậy)? e k muốn chèn đoạn mã asm vào trong chương trình.
Code:
#int_RB
void ngat_RB()
{
if((RBIF)&&(RBIE))
   {
       ngatRB=1;
       if(!RB4)
         {
               //ngatRB4=1;
           if(tg==0)
            {
               tg=30;
               goto Thoat;
            }
          if(tg==30)
            {
               tg=60;
               porta=6;               
               goto Thoat;
            }
          if(tg==60)
            {
               tg=90;
               porta=9;
               goto Thoat;
            }
          if(tg==90)
            {
               tg=120;
               porta=1;
               goto Thoat;
            }
         }// Xong RB4
       if(!RB5)
         {
               ngatRB5=1;
         }// Endif(RB5)
   thoat:
   RBIF=0; //Xoa co ngat RB
   } // Ket thuc if co ngat
}// Ket thuc ham void*/
a xem giúp e đoạn code trên xem tại sao e phải ấn 2 lần nút bấm tại RB4 thì nó mới chịu thực hiện ngắt? đoạn code đó chạy cho con 16f877a thì ngon lành nhưng khi đưa qua con 628a thì bị như vậy.
thanks!

thay đổi nội dung bởi: bean984, 29-08-2008 lúc 11:47 AM.
bean984 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-08-2008, 11:36 AM   #13
cong1810
Đệ tử 4 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 62
:
Send a message via Yahoo to cong1810
em đang thực hành về LCD 4 bit. sử dụng file lcd.c có sẵn trong thư viện của CCS C.nhưng trong file lcd.c các chân enable RS và RW nó sắp ko theo thứ tự để mỉnh cắm bus cho tiện. em muốn hỏi cách mình thay đổi thứ tự chân E,RW,RS trong file LCD.C. em tìm cả buổi rồi mà ko thấy chỗ nó khai báo.các huynh giúp đệ với!!!!
cong1810 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-08-2008, 07:17 PM   #14
buiminhtu
Nhập môn đệ tử
 
Tham gia ngày: Jun 2008
Bài gửi: 1
:
bác nào có CCSC 3.242 cho em xin voi
thanks
buiminhtu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-08-2008, 07:45 PM   #15
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 buiminhtu View Post
bác nào có CCSC 3.242 cho em xin voi
thanks
Bạn đọc kỹ post #1 của luồng này:
http://www.picvietnam.com/forum/showthread.php?t=958

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
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:15 PM.


Đượ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