PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   CCS C cho PIC/dsPIC phiên bản 4.xxx (http://www.picvietnam.com/forum/showthread.php?t=2296)

vietanh 17-04-2009 11:22 AM

minh up lại hai phiên bản cho css 74 va 84 bạn nào không tải được pm vn2005_00@yahoo.com mình send cho ok mọi người lưu y trình bẻ khóa tụi nó toan gắn mã đôc trước khi cài đặt nên tắt kết nôi với mạng ,sau khi bẻ khóa ok quét virut 1 lần ok rui mới cho kết nối nhé

http://rapidshare.com/files/12706092...WHD_v4.074.rar

http://rapidshare.com/files/222279847/CCS4.083.rar

tinhgiac_vp 21-04-2009 07:00 PM

các bác cho em hỏi làm cách nào để biết được chiều dài của một chuỗi số nguyên 16bit, em khai bao int16 dist[] = {675,786,789,567].nhưng hàm strlen() chỉ trả về giá trị 1, do nó làm việc với chuỗi 8 bit.Mong các bác chỉ giúp em.

namqn 21-04-2009 07:18 PM

Trích:

Nguyên văn bởi tinhgiac_vp (Post 25068)
các bác cho em hỏi làm cách nào để biết được chiều dài của một chuỗi số nguyên 16bit, em khai bao int16 dist[] = {675,786,789,567].nhưng hàm strlen() chỉ trả về giá trị 1, do nó làm việc với chuỗi 8 bit.Mong các bác chỉ giúp em.

Hàm strlen() được dùng cho chuỗi (là kiểu tương đương với mảng char), làm sao áp dụng cho mảng int16 của bạn được.

Bạn nên cho biết mục đích cụ thể, từ đó người khác sẽ có thể góp ý cho bạn cách xây dựng kiểu dữ liệu phù hợp với mục đích cụ thể đó.

Thân,

tinhgiac_vp 21-04-2009 08:24 PM

em muốn gửi 10 giá trị int16 lên PC. Muốn đưa 10 giá trị đó vào 1 chuoi đê viết chương trình cho gọn, không phải viết từng dòng để gửi lên PC mà chỉ cần dùng vòng lặp. Rõ ràng vấn đề không có gì khi em biết mảng đó có 10 giá trị, nhưng trong trường hợp chúng ta không biết mảng đó có bao nhiêu giá trị thì làm thế nào? Em cũng biết là hàm strlen() không trả về giá trị chiều dài trong trường hợp này. Không biết có cách nào xác định chiều dài mảng này không?

mabubeo22 21-04-2009 09:16 PM

Trích:

Nguyên văn bởi lexuantien (Post 23423)
Em có đoạn Code , cho led sáng tuần tự trên PORTB .Em không hiểu RTCC_DIV_
2 (chia prescaler 1:2) là gì ? Nó có tác dụng như thế nào trong Time0 , cũng như trong quá trình ngắt của đoạn Code trên.



Code:

#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#byte PORTB = 0x06

int16 count;
int8 a;
//Chuong trinh ngat TMR0
#int_timer0
void interrupt_timer0()
{
set_timer0(2);
++count;
if(count == 2000) // 2000*500us = 500000us = 1s
{
count=0;
rotate_left(&a,1);
}
}
//Chuong trinh chinh
void main(void)
{
set_tris_b(0);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(global);
set_timer0(2);// T_dinhthi = 2*(256 - 6)*1us = 500us
a = 0x01;

while(true)
{
PORTB = a;
}
}



mình cũng mới tìm hiểu về PIC và có xem qua đoạn mắc này giống bạn, đây là câu trả lời đầy đủ của anh ntc, bạn xem xong sẽ hiểu:

rtcc_state là một trong những constant sau:

RTCC_INTERNAL
RTCC_EXT_L_TO_H
RTCC_EXT_H_TO_L
Mỗi Timer đều có 2 tác dụng:

Tác dụng định thời: Timer sẽ dựa vào các xung tạo ra bởi bộ dao động (thạch anh, dao động RC, ...) cung cấp cho vi điều khiển để đếm. Và dựa vào tần số bộ dao động, giá trị các bộ chia tần số và giá trị của Timer, ta có thể xác định được thời gian thực. Như vậy trong trường hợp muốn Timer hoạt động ở chế độ định thời, ta phải khai báo rtcc_state là "RTCC_INTERNAL" (xử dụng tần số dao động nội).

Tác dụng đếm: Timer sẽ dựa vào các xung lấy từ môi trường bên ngoài để đếm. Tùy theo Timer mà ta sử dụng chân lấy xung tương ứng (Timer 0 là chân RA4, Timer1 là chân RC0). Các xung này có tác dụng phản ánh các hiện tượng trong thực tế, và việc đếm các xung cũng đồng nghĩa với việc đếm các hiện tượng đó. Và để linh động hơn trong quá trình xử lí, Timer còn cho phép chọn cạnh tác động lên bộ đếm (chế độ này chỉ có ở Timer 0). Như vậy muốn Timer hoạt động ở chế độ đếm, ta phải khai báo rtcc_state là một trong 2 trường hợp còn lại (sử dụng dao động ngoài).


Trích:
ps_state là một trong những constant sau:

RTCC_DIV_2
RTCC_DIV_4
RTCC_DIV_8
RTCC_DIV_16
RTCC_DIV_32
RTCC_DIV_64
RTCC_DIV_128
RTCC_DIV_256
WDT_18MS
WDT_36MS
WDT_72MS
WDT_144MS
WDT_288MS
WDT_576MS
WDT_1152MS
WDT_2304MS
Ở đây có đến 2 hàm dùng để ấn định tỉ số chia của prescaler, một hàm là "RTCC_DIV_...", một hàm là "WDT_ ...". Đó là bởi vì Timer 0 và WDT dùng chung bộ chia tần số. Khi bộ chia được Timer 0 sử dụng thì WDT không đựoc hỗ trợ với bộ chia này nữa. Như vậy sự khác biệt về thao tác giữa 2 hàm này có thể là như sau:

Hàm "RTCC_DIV_..." : cho phép Timer 0 sử dụng bộ chia tần số, không cho phép WDT sử dụng và ấn định tỉ số chia của nó.

Hàm "WDT_ ..." : cho phép WDT 0 sử dụng bộ chia tần số, không cho phép Timer 0 sử dụng và ấn định tỉ số chia của nó.

khanhbp 22-04-2009 06:44 PM

CCS 4.088 new
 
Link download:
Tested OK

hatbui 02-05-2009 09:51 AM

Giúp em code làm việc với 74HC595
 
1 Attachment(s)
Chào các bác.
Bác nào chỉ giúp em đoạn code làm việc với 595 theo 2 cách
- sử dụng SPI module có sẵn của 16F877A
- có thể sử dụng pin khác của Port khác
Giúp em code bằng CCS C được ko ah.


Em xin chân thành cảm ơn.

manhha2799 02-05-2009 09:11 PM

Đây là cách phần mềm :

#bit SCK=0x06.6
#bit DATA=0x06.4
#bit SCL=0x06.7

void Data_in(int1 k)
{
output_bit(pin_b4,k);
output_low(pin_b6);
output_high(pin_b6);
}
void LatchData()
{
output_low(pin_b7);
output_high(pin_b7);
}


Đây là spi phần cứng :

spi_write(0b11111111);
setup_spi(spi_master |spi_h_to_l|spi_clk_div_4);

mocdailam 02-05-2009 09:47 PM

bac F ơi! có thời gian trả lời giúp em với

manhha2799 03-05-2009 09:37 PM

Bạn này hỏi gì thế nhỉ? mà ko thấy câu hỏi gì hết?

bravesoldier 23-06-2009 05:40 PM

Em tra datasheet của PIC16F877A để tìm hiểu module SPI và xem cả example trong CCS nữa nhưng khi thử trên bo cắm với 5 con 595 thì 40 con LED sáng loạn cả lên. Liệu em có dùng sai hay không? Bác nào dùng SPI cứng của PIC ko chỉ cho em với?
Code:

#include <16F877A.h>
#device *=16 ADC=8
#fuses NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=4000000)
#use fast_io(b)
#byte portb=0x6
#bit SCL = portb.0

void latch_data()
  {
    SCL=0;
    SCL=1;
  }

main()
  {
  byte i;
  set_tris_b(0);
  setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16); // tham kha?o Help
 
  SCL=1;
  while (true)
      {
      for (i=1; i<=5; ++i) {spi_write(0xAA);}
      latch_data();
      delay_ms(1000);

      for (i=1; i<=5; ++i) {spi_write(0x55);}
      latch_data();
      delay_ms(1000);
      }
  }

Em lắp xen kẽ 20 con LED xanh với 20 con LED đỏ, viết code để cho chúng nó nhấp nháy.
Theo như datasheet thì em dùng chân RC5 của PIC16F877A để xuất data ra chân 14 của con 595 đầu tiên, chân RC3 làm chân clock (SCK), chân RB0 chọn để chốt.
Em xin cám ơn!

picpen 24-06-2009 08:49 AM

Code:

for (i=1; i<=5; ++i) {spi_write(0xAA);}
latch_data();
delay_ms(1000);

??? tôi ko hiểu ý đồ dùng cấu trúc for của bạn là như thế nào , bạn chú ý khi quản lý khối lệnh bằng {} nhé !
với SPI tôi đã làm rồi , cái giao tiếp này của pic rất rễ nhiễu và bị sai khi bạn dùng cáp để để truyền dữ liệu . Chỉ cần sai 1 bít là tất cả khối dữ liệu sau đó bị sai hết
Bạn nên chú ý với 2 dây dữ liệu và dây clock . phải đảm bảo mấy dây đó phải an toàn ko xảy ra lỗi ...... đó là do cách hoạt động của SPI ko có kiểm tra chẵn lẻ cũng ko có tín hiệu ack
chúc vui !

bravesoldier 24-06-2009 03:35 PM

Trích:

??? tôi ko hiểu ý đồ dùng cấu trúc for của bạn là như thế nào , bạn chú ý khi quản lý khối lệnh bằng {} nhé !
với SPI tôi đã làm rồi , cái giao tiếp này của pic rất rễ nhiễu và bị sai khi bạn dùng cáp để để truyền dữ liệu . Chỉ cần sai 1 bít là tất cả khối dữ liệu sau đó bị sai hết
Bạn nên chú ý với 2 dây dữ liệu và dây clock . phải đảm bảo mấy dây đó phải an toàn ko xảy ra lỗi ...... đó là do cách hoạt động của SPI ko có kiểm tra chẵn lẻ cũng ko có tín hiệu ack
chúc vui !
Em dùng for để thực hiện 5 lần SPI_write, để out 5x8 = 40 bit ra dãy LED 40 con
0xAA = 10101010b để LED đỏ tắt, LED xanh sáng
0x55= 01010101b để LED đỏ sáng, LED xanh tắt
đúng là em cắm nhiều dây quá nên nhiễu thật
sờ vào nguồn là cụm 8LED do con 595 thứ 2 nối ra tối hẳn đi, còn các cụm khác vẫn bình thường. Thật là củ chuối!
Đêm qua em tháo hết bo rồi. Mục đích là test chức năng SPI mềm và cứng của PIC 16F877A mà bác.
Bác có gì chỉ bảo, có gì cần chú ý về phần cứng thì giúp em với.
mail của em là dotien.dzung@gmail.com
em xin cảm ơn bác.

bravesoldier 24-06-2009 03:41 PM

chắc là dây nối dùng SPI cứng của PIC càng ngắn càng tốt các bác nhỉ :)

tonghua19 01-07-2009 07:05 PM

Trích:

Nguyên văn bởi bravesoldier (Post 27072)
Em tra datasheet của PIC16F877A để tìm hiểu module SPI và xem cả example trong CCS nữa nhưng khi thử trên bo cắm với 5 con 595 thì 40 con LED sáng loạn cả lên. Liệu em có dùng sai hay không? Bác nào dùng SPI cứng của PIC ko chỉ cho em với?
Code:

#include <16F877A.h>
#device *=16 ADC=8
#fuses NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
#use delay(clock=4000000)
#use fast_io(b)
#byte portb=0x6
#bit SCL = portb.0

void latch_data()
  {
    SCL=0;
    SCL=1;
  }

main()
  {
  byte i;
  set_tris_b(0);
  setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16); // tham kha?o Help
 
  SCL=1;
  while (true)
      {
      for (i=1; i<=5; ++i) {spi_write(0xAA);}
      latch_data();
      delay_ms(1000);

      for (i=1; i<=5; ++i) {spi_write(0x55);}
      latch_data();
      delay_ms(1000);
      }
  }

Em lắp xen kẽ 20 con LED xanh với 20 con LED đỏ, viết code để cho chúng nó nhấp nháy.
Theo như datasheet thì em dùng chân RC5 của PIC16F877A để xuất data ra chân 14 của con 595 đầu tiên, chân RC3 làm chân clock (SCK), chân RB0 chọn để chốt.
Em xin cám ơn!

Chào các bạn
các bạn cho mình hỏi là câu lệnh:
#device *=16 ADC=8
#byte portb=0x6
có nghĩa gì vậy
cho em mình hỏi thêm là làm sao mình mới có thể dùng lệnh các lệnh như trisb, portb, latb,... hay một số thanh ghi như ifs1, iec0,...
Cám ơn các bạn nhiều

thanhvanckbk 02-07-2009 05:18 PM

Mình là dân mới tập tành học PIC nê sau khi đọc xong TUTOR của bác falleaf mình thấy rất hay, không biết là phần 2 của TUTOR bác đã up lên chưa vậy? Mong cao thủ nào đã có được thì up lên cho anh em tham khảo nha!

thanhvanckbk 02-07-2009 05:23 PM

ah cho mình hỏi thêm chút với, mình đang muốn dùng PIC để điều khiển 12 RC servo bằng PWM, ai có kinh nghiệm trong việc này thì chỉ giúp mình với, nếu được thì có thể up đoạn code đó cho mình tham khảo chút nha. cám ơn những người cùng yêu thích PIC như mình. hihi

Hailua8x 16-07-2009 05:42 PM

Em mới bắt đầu nghiên cứu CCS, mong được các anh pro giúp đở
Em đang nghiên cứu con dspic6014, con này có thể chạy với tốc độ 30 MIPs

em sử dụng thạch anh 8 Mhz, các anh cho em hỏi làm sao để nhân tần số thực thi lệnh lên 30 MIPS
Cám ơn mấy anh

Hailua8x 17-07-2009 05:01 PM

Mấy anh ai có file defs_16F877A.h , cho em xin với !
Mong được mấy anh giúp đở

Hailua8x 17-07-2009 05:07 PM

Sorry, em viết nhầm, hổng phải con đó mà là con này : dspic30f6014

leethanh 29-07-2009 11:01 AM

chào các Bác!
em đang gặp rắc rối với việc cài CCS 4074.
em cài luôn bị hỏi tìm file Registration. Nếu k tìm thấy khi kích vào biểu tượng thì luôn hiện bảng báo lỗi "Registration file error".
Bác nào biết chỉ giùm em cái!

tomruoi 29-07-2009 11:54 AM

TIM KIEM DE TAI rat gap xin giup do
 
em dang lam do án 1, em co de tai dkhien nhiet do dung pic6f877 nhung ma thay ko cho,thay ko cho lam ve nhiet do va dco nua,vi no nhieu nguoi lam qa roi. ban nao co de tai ma co ung dung hay hay ,va it nguoi lam thi giup cho minh voi nha,ONG THAY THICH DE TAI: MOI VA CO UNG DUNG(IT NGUOI LAM CUNG DC),may ban giup minh nhanh nhanh nha,ngay mai (30/07/2009)la het han roi,huhu ma chua co gi het kho qa .DE TAI MINH LAM CHI CAN:VXLI,IC SO.IC SO KO CUNG DC MA CO UNG DUNG LA OK,(KO CAN DUNG GIAO TIEP M TINH)MA DE TAI PAI LAM DC NHA MAY BAN.EM XIN CAM ON TRUOC
mail em: truongquangtuong@gmail.com(ngay nay em cho giup do)

tact 23-08-2009 12:52 PM

Đã có bản CCS PCWHD v.4.093 bác nào cần thì vào đây (http://picat.dieukhien.net/forum/vie...2f4b6e9f137356) lấy nhá. :D

mocdailam 24-08-2009 02:26 AM

Trích:

Nguyên văn bởi leethanh (Post 28163)
chào các Bác!
em đang gặp rắc rối với việc cài CCS 4074.
em cài luôn bị hỏi tìm file Registration. Nếu k tìm thấy khi kích vào biểu tượng thì luôn hiện bảng báo lỗi "Registration file error".
Bác nào biết chỉ giùm em cái!

bạn chưa crack ấy mà! lên tải phần crack đi! ma đã có cái CCS 4.0.88 rùi! mất công dùng lậu thì dùng cho xịn luôn! hic!

thanhvanckbk 26-08-2009 12:35 PM

chào mọi người, mình mới học PIC nên mình muốn hỏi các bậc cao thủ một số vấn đề như sau:
1- Có cách nào để dùng timer điều khiển theo kiểu PWM được không(duty=1-2ms, period=20ms), cho các chân I/O tùy ý không phải các chân CCP
2- chỉ giúp mình cách viết code để ghi và đọc dữ liệu từ RAM của PIC

vinh86 26-08-2009 06:43 PM

cac bac co tai lieu huong dan su dung ccs cho de voi
de moi bat dau hoc pic ah
mong cac bac tien boi chi giup

vinh86 26-08-2009 06:45 PM

em rat can tai lieu ve ccs
các anh giúp đệ với đệ không thể dow được

vinh86 26-08-2009 06:47 PM

co ai giúp đệ thì gửi cho đệ qua mail : nguyenvinh.vp@gmail.com
cảm ơn các anh chị nhiều

Hard 28-08-2009 09:50 AM

Hi,
CCS là một trình biên dịch cự kỳ dễ sử dụng, hỗ trợ hầu hết các hàm giúp người lập trình nhanh chóng phát triển ứng dụng. Nếu các bác muốn học thì chỉ việc cài lên, mở một ví dụ bất kỳ rồi bấm phím F1 để biết thêm chi tiết. Nếu bác nào đã từng làm việc với ngôn ngữ C thì chỉ cần 1 tuần là có thể làm chủ được CCS và dùng CCS để phát triển mọi ứng dụng.
Đối với lập trình phần mềm thì ai cũng bắt đầu bằng chương trình "Hello" còn đối với lập trình VDK thì ai cũng bắt đầu bằng chương trình "BlinkLed". Đối với CCS nếu viết chương trình BlinkLed sử dụng các hàm dựng sẵn (build in) của nó thì coi như là đã đi được 1/2 chặng đường. Tiếp theo là chỉ việc bấm phím F1 để phát triển ứng dụng thôi.
Thân ái.

hanspkt 29-08-2009 01:06 AM

Trích:

Nguyên văn bởi vinh86 (Post 28981)
em rat can tai lieu ve ccs
các anh giúp đệ với đệ không thể dow được

Bạn vào đây: http://www.picvietnam.com/forum/show...p?t=612&page=3

Rbm_13 19-10-2009 05:42 PM

Help me??? Mình đang dùng CCSC 4.084, phiên bản này cho phép nạp chíp trực tiếp, bạn nào đã sử dụng thì giúp mình dùng với....

vungchua 21-10-2009 11:42 AM

Hi Rbm_13
Bạn sử dụng CCSC trong MPLAB IDE sẽ có nhiều lựa chọn cho các kit nạp. Mình đang sử dụng bản CCSC này và chỉ thấy nó cho phép kết nối với ICD.

nhamdtk4 06-11-2009 11:13 AM

Code:

#BIT TMR0I=0X0B.2
- Đặt tên cho địa chỉ 0x0B.2 trong RAM là: TMR0I (Đây chính là địa chỉ cờ ngắt của timer0).
Trích:

Nguyên văn bởi meovang (Post 30912)
nếu bây giờ mình cần cho chân nhận nút bấm là chấn khác của PORTA thì sao? Giả sử là chân RA5.

- Còn chỗ này thì bạn đã nhầm: Đây là CT đếm xung chân RA4 là chân nhận xung ngoài của timer0 nên khi dùng timer0 đếm xung thì làm sao mắc vào RA5 đc.

nhamdtk4 10-11-2009 06:32 PM

Trích:

Nguyên văn bởi meovang (Post 30920)
dùng 2 button hiển thị trên led 7 đoạn, một tăng một giảm được không

Muốn làm đc như vậy thì CT cần nhận biết đc phím nào đc bấm, cách dễ dàng nhất đó là dùng ngắt ngoài (hoặc ngắt RB) và ADC. Bạn đọc cách sử dụng tập lệnh của 2 modul này thì sẽ giải quyết đc thôi, có j thì cứ hỏi mọi người sẽ giúp bạn.
Chúc thành công!

hangocminh1989 18-11-2009 08:51 AM

em vẫn chưa khai báo được cái nút nhấn,hum ny em không mang theo code và cái sơ đồ,cả nhà có ai đã làm thành công nhiều về vấn đề này xin giúp đỡ em với,có code và sơ đồ luôn thi càng tốt,hic,mệt cái này quá,
thanks

nhamdtk4 18-11-2009 09:31 AM

1 Attachment(s)
Trích:

Nguyên văn bởi hangocminh1989 (Post 31376)
em vẫn chưa khai báo được cái nút nhấn,hum ny em không mang theo code và cái sơ đồ,cả nhà có ai đã làm thành công nhiều về vấn đề này xin giúp đỡ em với,có code và sơ đồ luôn thi càng tốt,hic,mệt cái này quá,
thanks

It's here:
Code:

#include<16f877a.h>
#fuses nowdt,hs,noprotect,nodebug
#use delay(clock=20M)

#bit button2  =0x008.2
#bit button1  =0x008.0

void main()
{
  int a=5;
  set_tris_b(0x00);
  set_tris_d(0xff);
  output_b(0);
  while(true)
  {
      if(button1) {delay_ms(40); while(button1){}; a++;}
      if(button2) {delay_ms(40); while(button2){}; a--;}     
      output_b(a);
  }
}


ngoyeungoc 25-11-2009 09:42 AM

Dùng PIC điều khiển động cơ bước
 
Chào mọi người !Mình đang viết chương trình điều khiển Step Motor nhưng đang mắc kẹt lại ở chỗ này không tìm được cách giải quyết mấy ngày nay rồi.Đã cố gắng nhưng không ra nên rất mọi người giúp đỡ mình với.Đây là code của mình
Code:

#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#use fast_io(b)
#byte portb=0x06
#byte intcon=0x000B
#bit RB4=portb.4
#bit RB5=portb.5
#bit RB6=portb.6
#bit RB7=portb.7
#bit RBIF=intcon.0 //dinh nghia co ngat RB
#bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB
int a=0x11,speed=1000;
// Chuong trinh ngat
#int_RB
void ngat_RB()
{
if((RBIF)&&(RBIE))
  {
      //Quay nguoc chieu kim dong ho
      {
      if(RB4==0)
        while (true)
            {
              rotate_left(&a,1);
              portb=a;
              delay_ms(1000);
            }
         
      }     
      //Quay cung chieu kim dong ho
      {
      if(RB5==0)
        while (true)
            {
              rotate_right(&a,1);
              portb=a;
              delay_ms(1000);
            }
      }
      //Quay nguoc chieu kim dong ho nhanh dan
      {
      if(RB6==0)
        {
            speed=-50;
            while (true)
              {
                  rotate_left(&a,1);
                  portb=a;
                  delay_ms(speed);
              }
        }
      }
      //Quay cung chieu kim dong ho nhanh dan
      {
      if(RB7==0)
        {
            speed=-50;
            while (true)
              {
                  rotate_right(&a,1);
                  portb=a;
                  delay_ms(speed);
              }
        }
      }
  RBIF=0; //Xoa co ngat RB     
  }
}
// Chuong trinh chinh
main()
{
set_tris_b(0xF0);
portb=0x0F;
enable_interrupts(global);
enable_interrupts(int_RB);
ext_int_edge(H_to_L);
while(true)
  {
 
  }
}

Nội dung của bài mình là điều khiển chiều quay và tốc độ của động cơ(mình đã chú thích trên đoạn code).Lỗi mình gặp phải là khi mình ấn SW để động cơ quay nhanh dần thì nó quay nhanh thật nhưng nhấn nữa thì tốc độ không tăng nữa mà vẫn giữ nguyên tốc độ.Các bạn có thể giúp mình sữa lại sao cho mỗi lần mình nhấn SW để tăng tốc độ động cơ thì nó tăng dần .Và mình hỏi thêm 1 điều nữa sao mỗi lần mình cho quay cùng chiều đồng hồ thì lúc đầu nó quay ngược chiều một bước rồi mới quay cùng chiều(và ngược lại).Có cách nào khắc phục không giup mình với.
Mình cảm ơn các bạn nhiều.
Mình còn file mô phỏng mà không biết upload lên diễn đàn sao cả,đành up lên mediafire vậy.Mong các bạn chỉ bảo thêm.
Link download :

ngoyeungoc 30-11-2009 10:29 PM

Ui,các bạn đâu rồi??? Sao không thấy ai giúp đỡ mình hết dzậy! Mình đang rất cần...Help me!

0903579509 01-12-2009 03:47 AM

Trích:

Nguyên văn bởi ngoyeungoc (Post 31842)
Ui,các bạn đâu rồi??? Sao không thấy ai giúp đỡ mình hết dzậy! Mình đang rất cần...Help me!

Tôi không hiểu lắm về Code của bạn, nhưng tôi thấy với đoạn code trên, vi điều khiển không bao giờ thoát khỏi chương trình ngắt khi chạy vòng lặp while(1). Thêm vào đó ngắt xãy ra rất nhanh, chỉ cần một động tác nhấn phím, ngắt đã xãy ra nhiều lần do rung phím, kết quả hàm delay_ms() trở thành giá trị tối thiểu -> chỉ nhấn 1 lần tốc độ động cơ đã lên tối đa.
Thân!

ngoyeungoc 06-12-2009 11:41 PM

Mình cảm ơn bạn.Các bạn có thể giải thích rõ về PWM của PIC không.Trong luồng "CCS C cho PIC16F877A" mình đọc qua nhưng không hiểu rõ lắm.Mình đang lập trình điều khiển cho động cơ bước(loai 6 dây ra). Để điều khiển tốc độ động cơ thì phải dùng PWM(đoạn code trên mình dùng delay để thay đổi tốc độ nhưng không được). PIC 16F877A chỉ có 2 ngõ ra RC1 và RC2 là dùng trong PWM,trong khi mình cần 4 ngõ vào điều khiển.Các bạn hướng dẫn cho mình cách dùng PWM để điều khiển tốc độ cho động cơ bước 4 pha với.Mình cảm ơn nhiều!


Múi giờ GMT. Hiện tại là 05:58 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam