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 Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 18-10-2006, 05:20 PM   #1
FFGmember
Nhập môn đệ tử
 
Tham gia ngày: Feb 2006
Bài gửi: 4
:
Học CCS thông qua Tutorial PICVIETNAM

Đã lâu lâu không đóng góp cho PIC Việt Nam gì rồi. Đợt này tự nhiên công việc liên quan đến PIC, yêu cầu đến việc sử dụng SPI, nhào zô luôn cho việc học CCS. Mong mỏi đóng góp chút gì đó cho tất cả mọi ngưòi.


1. Mục tiêu của việc học CCS:
• Sử dụng được CCS programmer
• Ứng dụng được chương trình hiển thị LCD
• Ứng dụng được chương trình kết nối SPI với EEPROM và MMC card. hiển thị các thông số lên LCD .


2. Nguồn tài liệu và công cụ làm việc:
• Theo tutorial của Linhnc308: http://www.picvietnam.com/forum//att...6&d=1157644591
• Chương trình CCS: down load ban CCS3.249.rar. http://www.tailieuvietnam.net/downlo...CCSC_3.249.rar
• Chương trình Proteus. 6.7
__________________
Răng ơi nhe ra nào …..
FFGmember vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-10-2006, 05:47 PM   #2
FFGmember
Nhập môn đệ tử
 
Tham gia ngày: Feb 2006
Bài gửi: 4
:
Ví dụ 1: thực thi bài nhấp nháy led

Bước 1: tạo một project mới test1 trong thư mục project1 ( CCS -> Project -> New -> PIC Wizard )
Bước 2: Copy paste đoạn code của Linhnc308 vào trong mục file test1.c

Trích:
#include <16f877a.h>
#include <def_877a.h>
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
void main()
{
// Thiet lap che do cho PORTB
TRISB = 0x00; // Tat ca PORTB deu la cong xuat du lieu
PORTB = 0xFF; // Tat het cac LED
While(1)
{
PORTB = 0; // Cho các LED sáng
delay_ms(250); // T.o th.i gian tr. 250ms
PORTB = 0xFF;
delay_ms(250);
}
}
Bước 3: Compile Unit ( F9 ) => chương trình báo lỗi, không có def_877A trong thư mục PICC/Device/ . Đọc lại bài hướng dẫn thấy có nói def_F877A là file khai báo thanh ghi của người sử dụng. Search một hồi trong diễ đàn cũng tìm được file def_876 -> chỉnh sửa rename rồi copy vào PICC/Device . Compile lại => chuơng trình chạy OK.
Bước 4: Quay trở lại đường link thư mục ban đầu …./Project1 check xem có file gì mới ko, file hex đã được tạo trong này rồi
Bước 5: Bật chương trình Proteus lên lắp mạch như linhnc308 => chỉnh thông số tần só thạch anh là 4Mhz rồi nạp file hex vào => chạy. Chương trình chạy OK

Túm lại : kết thúc VD1 này tôi đã thu được:
• Năm bắt được thành thạo các bước thực thi của CCS : tạo project mới, tạo file mới, các compile chương trình
• Nắm được cấu trúc khung cảu chương trình CCS, cách khai báo ban đầu
• Gợi nhớ lại Proteus 6.7 vì đã lâu lắm rồi ko sờ đến nó, chuẩn bị cho các Project tiếp theo.

Vi du 2, 3 ve` LCD, SPI den toi' giai quyet tiep.
File Kèm Theo
File Type: rar project1.rar (26.4 KB, 2528 lần tải)
__________________
Răng ơi nhe ra nào …..

thay đổi nội dung bởi: FFGmember, 18-10-2006 lúc 05:51 PM.
FFGmember vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-10-2006, 12:40 AM   #3
FFGmember
Nhập môn đệ tử
 
Tham gia ngày: Feb 2006
Bài gửi: 4
:
Project2: Hiển thị lên LCD dùng lcd_lib_4bit.c

LCD cùng với led đơn và led 7 thanh là một trong những phương thức để hiển thị các kết quả các thông số. Thông thường tôi luôn chọn LCD vì lập trình đơn giản và đông thời có thể thể hiện được các giá trị mà mình mong muốn.

Có rất rất nhiều source code cho việc viết LCD 4 bit. Và một trong số đó là file lcd_lib_4bit.c đã đươc linhnc308 giới thiệu trong tập tutorial của mình

Lại thực thi các bước như ở trên, với đoạn code dưới đây.

PHP Code:
#include <16f877a.h>
#include <def_877a.h>
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include <lcd_lib_4bit.c> // Thu vien ham cho LCD

void main()
{
trisa 0xFF;
trisb 0x01;
trisd 0x00;
LCD_init();
Printf(LCD_putchar," PICVIETNAM tut");
LCD_putcmd(0xC3);
Printf(LCD_putchar," LCD 4bit ");


Khi lập trình đến LCD 4bit sử dụng lcd_lib_4bit.c cần lưu ý đến 2 điều
  • Chân nối đã được fix sẵn trong hàm lcd_lib_4bit.c, khi thay đổi chân cho phù hợp với việc thiết kế mạch là coi như đã thay đổi cả với các chương trình mình dùng truóc đó.
  • Trong chương trình sử dụng đến lệnh LCD_putcmd( 0xC3) chính là chỉ vị trí con trỏ cho việc hiển thị đoạn text. 0xC3 là vi tri thu 4 của dòng thứ 2
File Kèm Theo
File Type: rar project2.rar (25.3 KB, 2395 lần tải)
__________________
Răng ơi nhe ra nào …..
FFGmember vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-10-2006, 04:30 AM   #4
FFGmember
Nhập môn đệ tử
 
Tham gia ngày: Feb 2006
Bài gửi: 4
:
Project 1: Kết nối PIC 16F877A với EEPROM 25AA640.

Sorry mọi người là tối hôm nay em tìm mỏi cả mắt mà không thấy bất cử một thằng EEPROM nào có chuẩn giao tiếp SPI, cho nên ở Project này em chỉ xin được làm chay thôi, ai có điều kiện mạch thật hoặc có trình giả lập tốt thì xin test + đưa ra ý kiến cho em phát.

SPI là một chuẩn dữ liệu giao tiếp đơn giản nhất có tốc độ lớn nhất, tuy nhiên có độ an toàn không cao khi mà dây clock bị ảnh hưởng => dẫn đến ảnh hưởng đến toàn hệ thống.
Với PIC16F877A thì có 3 chân cho chế độ SPI đó là: RC3( clock ), RC4 ( SDI ), RC5 ( SD0) , còn chân select chíp thì lấy bất cứ một chân I/O thông thường.

Cơ chế SPI là quá trình dịch bít qua lại giữa Slave và Master qua 2 đường đây SDI, SDO. Ứng với mỗi IC khác nhau lại cho một chuẩn truyền tiếp riêng để điều khiển quá trình truyền. Với EEPROM 25AA640 cơ chế đó là:

Đọc byte:
Truyền lệnh 0000011 tiếp đến là truyền địa chỉ 16 byte, và đọc dữ liệu . Khi chân CS lên 1 => cũng là lúc báo hiệu kết thúc đường truyền.






Write byte
Viết lệnh command: 00000010, sau đó truyền địa chỉ 16 bit, rồi bắt đầu truyền dữ liệu. Quá trình truyền kết thức khi CS = 1





PHP Code:
void main()
{
// init ban dau
   
OUTPUT_LOW(PIN_C2);       
   
setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_4);
   
OUTPUT_HIGH(PIN_C2); 
   
delay(5);   
   
// truyen du lieu co gia tri 0x55 xuong eeprom tai dia chi 0x0004    
   
OUTPUT_LOW(PIN_C2);      
   
spi_write(0x02);        // command = 0x02 -> ghi du lieu
   
spi_write(0x00);
   
spi_write(0x04);
   
wpi_write(0x55);
   
OUTPUT_HIGH(PIN_C2); 
   
delay(5);
   
// Doc du leu
   
OUTPUT_LOW(PIN_C2);      
   
spi_write(0x03);       // command -= 0x03 -> doc du lieu
   
spi_write(0x00);
   
spi_write(0x04);
   
wpi_read(buff);
   
OUTPUT_HIGH(PORTD); 
   
delay(5);   
   
   while(
1);


Code trên hoàn toàn chỉ là ý tưởng như thế, ai có điều kiện hoặc đã làm rồi xin cho đôi lời.
Lâu lâu ko đựoc làm đến pic , nay còn được làm trên CCS nữa thấy thật thoải mái.

See Ua!
__________________
Răng ơi nhe ra nào …..

thay đổi nội dung bởi: FFGmember, 19-10-2006 lúc 04:34 AM.
FFGmember vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-12-2011, 05:46 PM   #5
bbld
Nhập môn đệ tử
 
Tham gia ngày: Jun 2010
Bài gửi: 5
:
Trích:
Nguyên văn bởi FFGmember View Post
LCD cùng với led đơn và led 7 thanh là một trong những phương thức để hiển thị các kết quả các thông số. Thông thường tôi luôn chọn LCD vì lập trình đơn giản và đông thời có thể thể hiện được các giá trị mà mình mong muốn.

Có rất rất nhiều source code cho việc viết LCD 4 bit. Và một trong số đó là file lcd_lib_4bit.c đã đươc linhnc308 giới thiệu trong tập tutorial của mình

Lại thực thi các bước như ở trên, với đoạn code dưới đây.

PHP Code:
#include <16f877a.h>
#include <def_877a.h>
#device *=16 ADC=8
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include <lcd_lib_4bit.c> // Thu vien ham cho LCD

void main()
{
trisa 0xFF;
trisb 0x01;
trisd 0x00;
LCD_init();
Printf(LCD_putchar," PICVIETNAM tut");
LCD_putcmd(0xC3);
Printf(LCD_putchar," LCD 4bit ");


[/LIST]
mọi người cho mình hỏi 1 điều là LCD mình mới mua(chưa dùng đựoc lần nào).trong lcd_lib_4bit.c của anh linh có những hàm khởi tạo lcd đúng như nhà sx yêu cầu.vậy sao mình kết nối lcd dùng đoạn code trên thì ko chạy,chỉ hiện 1 dòng đen
mình đã define port rồi,RS=D0,EN=D2,D4-D7,vậy lỗi này có thể do LCD hỏng hay là do khởi tạo chưa đúng?
bbld vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-11-2006, 04:14 PM   #6
tranhuyky
Đệ tử 2 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 39
:
Send a message via Yahoo to tranhuyky
Bước 5 mình bí rồi

gởi bạn FFGmember
Mình đã làm thử vd1 theo hướng dẫn của bạn rồi, nhưng tới bước 5 thì bí. Mình không biết cách nạp file hex vào trong proteus. Bạn hướng dẫn kỷ hơn cho mình được không. Cám ơn bạn trước nha.
tranhuyky vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-12-2014, 10:40 PM   #7
teemo
Nhập môn đệ tử
 
Tham gia ngày: Nov 2014
Bài gửi: 9
:
anh ơi, làm sao khắc phục lỗi này vậy anh:
*** Error 18 "def_877a.h.c" Line 1(9,20): File can not be opened
Not in "E:\Program Files\PICC\devices\16F877A.h"
Not in "E:\Program Files\PICC\dr\16F877A.h"
Not in project "C:\Users\NhokPro1234\Documents\pi\project1\16F877 A.h"
*** Error 128 "def_877a.h.c" Line 3(1,12): A #DEVICE required before this line
2 Errors, 0 Warnings.
teemo vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-10-2006, 11:47 AM   #8
IMI
Nhập môn đệ tử
 
Tham gia ngày: Sep 2006
Bài gửi: 2
:
Quá hay. Và quá chi tiết.
__________________
Lê Như Quang Huy
IMI vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-11-2006, 08:12 PM   #9
anhquangngai
Đệ tử 2 túi
 
Tham gia ngày: Sep 2006
Bài gửi: 33
:
vậy muốn viết cho led đơn sáng dần và xoay phải xoay trái thì làm thế nào?
mình mới làm quen với CCS nên ko biết nhờ bạn giúp cho!
anhquangngai vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-11-2006, 09:53 AM   #10
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Trích:
Nguyên văn bởi anhquangngai View Post
vậy muốn viết cho led đơn sáng dần và xoay phải xoay trái thì làm thế nào?
mình mới làm quen với CCS nên ko biết nhờ bạn giúp cho!
http://www.picvietnam.com/forum//showthread.php?t=357
Tài liệu mô phỏng bạn hỏi ở đây:
http://www.picvietnam.com/forum//sho...p?t=406&page=2 Dưới cùng, bài của anh F có link.
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263

thay đổi nội dung bởi: nhh, 05-11-2006 lúc 10:04 AM.
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-11-2006, 04:13 PM   #11
anhquangngai
Đệ tử 2 túi
 
Tham gia ngày: Sep 2006
Bài gửi: 33
:
Trích:
Nguyên văn bởi nhh View Post
http://www.picvietnam.com/forum//showthread.php?t=357
Tài liệu mô phỏng bạn hỏi ở đây:
http://www.picvietnam.com/forum//sho...p?t=406&page=2 Dưới cùng, bài của anh F có link.
trong này ko có led sang dan !
anhquangngai vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-11-2006, 08:36 AM   #12
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Trích:
Nguyên văn bởi anhquangngai View Post
trong này ko có led sang dan !
Muốn làm led sáng dần, tức là bạn phải làm cho điện áp cấp vào chân led tăng dần.

Hãy sử dụng chức năng PWM điều chế độ rộng xung, nhưng trước hết bạn phải học cách sử dụng các Timer, Timer 2 phục vụ PWM.
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-11-2006, 09:40 PM   #13
thaithienanh
Đệ tử 7 túi
 
thaithienanh's Avatar
 
Tham gia ngày: Jul 2006
Bài gửi: 189
:
Send a message via Yahoo to thaithienanh
anh REMMEMBER ơi viết tiếp bài nữa đi
thaithienanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-11-2006, 05:18 AM   #14
necati
Nhập môn đệ tử
 
Tham gia ngày: Oct 2006
Bài gửi: 10
:
http://rapidshare.com/files/2849523/...d_regfiles.rar
necati vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-12-2006, 07:01 PM   #15
anhquangngai
Đệ tử 2 túi
 
Tham gia ngày: Sep 2006
Bài gửi: 33
:
cho em hỏi về vòng lặp while

các bác có thể cho mình biết cách sử dụng vòng lặp while dc ko?
chương trình mình viết như sau nhưng vòng lặp while ko thực hiện đc
Code:
int8 a,b;
main()
{
while(a==8){
a++;
portb=00;
delay_ms(100);
portb=0xFF;
delay_ms(100);
}
em sử dụng như thế mà sao vòng lặp while ko chạy?
anhquangngai vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bà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

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
dsPIC Tutorial 3-Đọc ngõ vào và giao tiếp LCD namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 92 19-02-2017 11:15 PM
dsPIC Tutorial 2-Các kỹ thuật cơ bản namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 33 17-10-2013 11:09 PM
dsPIC Tutorial 4-Module UART và I2C namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 76 09-05-2012 10:55 AM
Tutorial LCD cua Nigel??????? spirit Cơ bản về vi điều khiển và PIC 16 16-03-2009 05:32 PM
tutorial hay cho newbie FUD84 Cơ bản về vi điều khiển và PIC 2 04-12-2005 02:29 AM


Múi giờ GMT. Hiện tại là 03:55 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