PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và 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

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 14-05-2008, 02:33 AM   #61
daikaka
Nhập môn đệ tử
 
Tham gia ngày: May 2008
Bài gửi: 1
:
Anh tinhthanthep oi!
- Em đang nghiên cứu về PIC8F877
- Anh co crack của MikroC ver 6 không? Nếu có gửi cho e với (soft và crack luôn nha a )
- Cho em xin mạch nguyên lý và chương trình lịch vạn niên
Cảm ơn anh rất nhiều !
Email : jindo1287@yahoo.com
Topic của arất hữu ích với tất cả mọi người.
daikaka vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-05-2008, 12:37 PM   #62
Son Hien
Nhập môn đệ tử
 
Tham gia ngày: Apr 2008
Bài gửi: 3
:
có anh nao giup minh với sao mình tạo Project bằng mikroc nhu file hướng dẩn của bac tinh thần thép nhưng lúc biên dịch nó k dich ra file hex , dó là pic 16F877A, còn nữa nếu muon tạo Project dể khi viết xong cho biên dịch ra file hex cho pic 18F452 thì làm thế nào có bác nào biết xin giup em
Son Hien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 27-05-2008, 01:15 PM   #63
Son Hien
Nhập môn đệ tử
 
Tham gia ngày: Apr 2008
Bài gửi: 3
:
Post Do nhiet do hien thi LCD dung DS1820 pic6F877A

có bài viet nay em không hiểu và sau khi viết xong em dịch nó không ra file hex co anh nào biết nhờ chỉ giúp em cảm ơn nhiều
unsigned temp;
unsigned short j;

void Display_Temperature(unsigned int temp) {
//...
}
Void main() {
ADCON1 = 0xFF;
PORTA = 0xFF;
TRISA = 0xFF;
PORB = 0;
TRISB = 0;
do {
ow_Reset(&PORTA,5);
ow_write(&PORTA,5,0xCC);
ow_write(&PORTA,5,0x44);
Delay_us(120);

ow_Reset(&PORTA,5);
ow_write(&PORTA,5,0xCC);
ow_write(&PORTA,5,0xBE);
Delay_us(400);

j = ow_Read(&PORTA,5);
temp = ow_Read(&PORTA,5);
temp <<= 8;
temp +=j;
Display_Temperature(temp);
Delay_ms(500);
}
while (1);
}//~!
Son Hien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-07-2008, 08:40 AM   #64
tdaminh
Nhập môn đệ tử
 
Tham gia ngày: Mar 2008
Bài gửi: 1
:
Bác tinhthanthep cho minh hỏi:
- ROM ngoài chỉ chứa giờ phút giây alarm phải không ?
- Nếu thay bằng ROM của PIC luôn, thì làm thế nào ?
Cảm ơn.
tdaminh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-07-2008, 11:31 AM   #65
tallht
Đệ tử 5 túi
 
tallht's Avatar
 
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: Bình Thạnh, TPHCM
Bài gửi: 98
:
Code:
Lcd_Config(&PORTD,4,7,6,3,2,1,0);     // các bạn xem sơ đồ mạch để hiểu được cách khai các tham số của hàm này
  Lcd_Cmd(Lcd_CLEAR);                // xóa màn hình 
  Lcd_Cmd(Lcd_CURSOR_OFF);         // tắt con trỏ nhấp nháy của LCD

void LCD_DISPLAY() {
  LCD_Out(1,1,"Hello");                // hiện chứ Hello bắt đầu ở dòng 1 cột 1
  LCD_Out(2,1,"Picvietnam");        // hiện chữ Picvietnam bắt đầu ở dòng 2 cột
mấy thông số của mấy hàm trên mình làm sao mà biết được hả bác?còn LCD bác dùng là loại nào vậy? mình thấy nó có tới 16 chân>?
__________________
-------------------------------------------------------------------
Cung cấp bo mạch thực hành Arduino và các mạch sáng tạo.
Mời tham quan: https://www.facebook.com/eshop1109

Cung cấp dịch vụ order hàng từ Aliexpress
Liên hệ: https://www.facebook.com/Mua-h%E1%BB...5265931515571/
tallht vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-07-2008, 11:56 AM   #66
tallht
Đệ tử 5 túi
 
tallht's Avatar
 
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: Bình Thạnh, TPHCM
Bài gửi: 98
:
Cool ????

Trích:
Nguyên văn bởi tinhthanthep View Post
Tiếp theo ta làm sang cái LCD nhé. Bạn nào mới làm quen với LCD mà viết bằng assembly thì chắc mất vài ngày quá. Nếu viết bằng MikroC bạn nào kém lắm cũng chỉ 30 phút là xong. Nói thế để các bạn thấy rằng viết ứng dụng mà dùng MikroC thì thôi rồi, viết nhanh và ứng dụng nhanh đi vào cuộc sống, chứ cứ tỉa tót bằng assem thì khi sản phẩm ra thị trường thì đối thủ cạnh tranh đã ra mấy phiên bản khác nhau mất roài.
Giờ ta viết chương trình để hiển thị dòng chữ Hello Picvietnam nhé. Chương trình như sau:

Code:
void INIT_MAIN() {
// Khoi tao cong B
  PORTB   = 0;
  TRISB   = 0xFF;
// Khoi tao cong D
  PORTD   = 0;           // Xóa dữ liệu đang tồn tại sẵn trên cổng D
  TRISD   = 0;            // Định nghĩa cổng D là digital Output
// Khoi tao cong E
  PORTE   = 0;
  TRISE   = 0;
  ADCON1  = 0xE;
// Khoi tao LCD
  Lcd_Config(&PORTD,4,7,6,3,2,1,0);     // các bạn xem sơ đồ mạch để hiểu được cách khai các tham số của hàm này
  Lcd_Cmd(Lcd_CLEAR);                // xóa màn hình 
  Lcd_Cmd(Lcd_CURSOR_OFF);         // tắt con trỏ nhấp nháy của LCD

void LCD_DISPLAY() {
  LCD_Out(1,1,"Hello");                // hiện chứ Hello bắt đầu ở dòng 1 cột 1
  LCD_Out(2,1,"Picvietnam");        // hiện chữ Picvietnam bắt đầu ở dòng 2 cột 1
}

void MAIN() {
  INIT_MAIN();
  LCD_DISPLAY();
}
Bạn nên sắp xếp các chương trình con như trên. Trong chương trình chính ta chỉ việc gọi tên các chương trình con thôi.

bác ơi ! mình đã tìm được thư viện lệnh của LCD gòy! nhưng sao viết như bác chỉ mà nó chẳng xuất ra chữ nào hết
có file kèm theo đây:
File Kèm Theo
File Type: rar MIKRO C.rar (28.5 KB, 248 lần tải)
__________________
-------------------------------------------------------------------
Cung cấp bo mạch thực hành Arduino và các mạch sáng tạo.
Mời tham quan: https://www.facebook.com/eshop1109

Cung cấp dịch vụ order hàng từ Aliexpress
Liên hệ: https://www.facebook.com/Mua-h%E1%BB...5265931515571/
tallht vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-07-2008, 12:50 PM   #67
tallht
Đệ tử 5 túi
 
tallht's Avatar
 
Tham gia ngày: Mar 2008
Nơi Cư Ngụ: Bình Thạnh, TPHCM
Bài gửi: 98
:
Smile ????

Trích:
Nguyên văn bởi tinhthanthep View Post
Chào các bạn!
Hiện mình đã làm xong mạch Lịch Vạn niên sử dụng PIC16F877A. Mình sẽ lần lượt post các chương trình thử nghiệm trên mạch này. Qua Project này các bạn sẽ làm chủ được con PIC16F877A và trình dịch MikroC, một trình biên dịch rất dễ sử dụng cho người mới bắt đầu học.
Đây là sơ đồ mạch nguyên lý:
bác ơi! trong sơ đồ của bác có cái ICSP-BLD là cái gì vậy? trong proteus mình chẳng thấy đâu cả? nó dùng làm gì trong sơ đồ mạch này?
ah còn con 24c04 của bác,trong proteus chỉ có 2 chân A1,A2 thôi ,đâu có tới 3 chân như của bác đâu? bác giải thích rõ chút ah! cảm ơn bác nha!
__________________
-------------------------------------------------------------------
Cung cấp bo mạch thực hành Arduino và các mạch sáng tạo.
Mời tham quan: https://www.facebook.com/eshop1109

Cung cấp dịch vụ order hàng từ Aliexpress
Liên hệ: https://www.facebook.com/Mua-h%E1%BB...5265931515571/
tallht vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-07-2008, 10:30 AM   #68
minhsondaklak
Đệ tử 5 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 96
:
Khởi tạo ds1307

Trích:
Nguyên văn bởi tinhthanthep View Post
Ban đầu, ds1307 chưa có giá trị nào cả trong các thanh ghi. Vì vậy, việc đầu tiên là phải nạp một giá trị bất kỳ cho các thanh ghi. Chương trình sau sẽ thực hiện công việc này. Sau này , bạn có thể dùng 4 nút bấm để hiệu chỉnh lại thời gian cho đúng với thực tế.

Code:
void INIT_MAIN() {
// Khoi tao truyen thong I2C
  I2C_Init(100000);       // Kích hoạt môddun truyền thông i2c với tốc độ baud là 100kHz
// Khoi tao DS1307
  I2C_Start();    // điều kiện start
  I2C_Wr(0xD0); // truyền địa chỉ của ds1307 và chọn ghi dữ liệu lên ds1307
  I2C_Wr(0x00); // Truyền địa chỉ ô nhớ đầu tiên của ds1307
  I2C_Wr(0x13); // Khoi tao gia tri ban dau cho  thanh ghi giây
  I2C_Wr(0x03); // Khoi tao gia tri ban dau cho  thanh ghi phút
  I2C_Wr(0x02); // Khoi tao gia tri ban dau cho  thanh ghi giờ
  I2C_Wr(0x03); // Khoi tao gia tri ban dau cho  thanh ghi thứ
  I2C_Wr(0x05); // Khoi tao gia tri ban dau cho  thanh ghi ngày
  I2C_Wr(0x03); // Khoi tao gia tri ban dau cho  thanh ghi tháng
  I2C_Wr(0x03); // Khoi tao gia tri ban dau cho  thanh ghi năm
  I2C_Wr(0x90); // đặt cấu hình cho thanh ghi điều khiển, sử dụng xung 1Hz.
  I2C_Stop();    // Điều kiện stop
}
Chương trình chính
Code:
void MAIN() {
  INIT_MAIN();
}
Chào các huynh !
Theo "lịch vạn niên" của Bác Thép, mình còn thắc mắc 1 điều, nhờ các Huynh xem giúp:
Trong hàm INIT_MAIN() có đoạn khởi tạo cho ds1307 như trên. Như thế cứ mỗi lần con PIC được cấp điện lại (mất điện lưới rồi có lại ấy !) thi đồng hồ lại bị Reset theo giá trị mình khởi tạo ban đầu cho nó. Thế hoá ra mỗi lần như vậy phải đi chỉnh lại giờ cho đồng hồ à !
Hay phải xử lý thế nào đây ? mong các Huynh chỉ giúp, xin cám ơn !

thay đổi nội dung bởi: minhsondaklak, 18-07-2008 lúc 10:43 AM. Lý do: lỗi chính tả
minhsondaklak vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-07-2008, 01:53 PM   #69
nguyenthinho
Nhập môn đệ tử
 
Tham gia ngày: Jun 2008
Bài gửi: 3
:
bác Tinhthanthep có thể gửi cho mình cái software và crack của Mickro C với nha. Cảm ơn bác nhiều lắm.Mail của mình là ghetnguoithu3@yahoo.com
nguyenthinho vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-07-2008, 01:57 PM   #70
david
Đệ tử 4 túi
 
david's Avatar
 
Tham gia ngày: Aug 2006
Bài gửi: 81
:
http://www.picvietnam.com/forum//showthread.php?t=2505
tìm trong diễn đàn trước rồi hãy hỏi nhé bạn !
david vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-07-2008, 05:57 PM   #71
minhsondaklak
Đệ tử 5 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 96
:
Mô phỏng "Lịch vạn niên" với proteus

Cùng thực hành với "lịch vạn niên"
File Kèm Theo
File Type: zip LichVanNien.zip (84.3 KB, 1618 lần tải)
minhsondaklak vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-07-2008, 12:33 AM   #72
minhsondaklak
Đệ tử 5 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 96
:
Khởi tạo ds1307

Hôm nay mình đã cho chạy trên mạch thực nghiệm, kết quả:
- Phần code khởi tạo cho ds1307 chỉ cho chạy 1 lần, để khởi tạo cho IC ds1307
- Sau đó phải xoá đoạn code này đi, biên dịch lại và nạp lại cho PIC thì OK !!!
minhsondaklak vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-07-2008, 04:01 PM   #73
meishun
Đệ tử 6 túi
 
meishun's Avatar
 
Tham gia ngày: Jul 2006
Bài gửi: 135
:
con DS1307 có vùng ram cho người dùng tùy ý sử dụng, sao ta không đặt 1 giá trị bất kì (ví dụ 0xff) tại 1 ô nhớ nào đó (chẳng hạn tại 0x09). Trong hàm main, ta kiểm tra giá trị tại 0x09 của DS1307, nếu = 0xff thì nhảy đến vòng lặp chính, nếu khác thì gọi hàm thiết lập giá trị cho DS1307. Đây là cách mà tôi bẫy DS mỗi khi cúp điện.
meishun vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-07-2008, 06:02 PM   #74
minhsondaklak
Đệ tử 5 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 96
:
Thumbs down ???

Chào meishun !
Bạn có thể nói rõ hơn được không: Lệnh ghi giá trị 0xff vào địa chỉ 0x09 cho DS thì đặt ở đâu được ?
minhsondaklak vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-07-2008, 03:33 PM   #75
meishun
Đệ tử 6 túi
 
meishun's Avatar
 
Tham gia ngày: Jul 2006
Bài gửi: 135
:
ví dụ hàm khởi tạo cho DS1307 tôi trích ra trong 1 project trước kia của tôi (do ưu tiên giao tiếp SPI cho MMC nên tôi thiết lập giao tiếp I2C bằng phần mềm, trình biên dịch MikroC)
Code:
void RTC_init()
{
     unsigned char i,RTC_flag;
    // dat ba^~y DS1307
     RTC_flag = RTC_get(0x08);	// doc gia tri tại địa chỉ 0x08 của DS1307 .
     if(RTCflag!=0xFF)		     // neu ko phai 0xFF
     {
         RTC_setdate(0x21,0x07,0x08);	// thi khoi tao gia tri cho DS1307
         RTC_settime(0x14,0x30,0x00);
         Soft_I2C_Start();		// dat cau hinh cho DS
         Soft_I2C_Write(RTC_ID);
         Soft_I2C_Write(0x07);		//dat con tro tai vi tri nay
         Soft_I2C_Write(0x10);		// tao xung 1Hz tai chan so 7.
         Soft_I2C_Write(0xFF);          // ghi giá trị 0xFF vào ô nhớ có địa chỉ 0x08;
         Soft_I2C_Stop();
     }
}
- với các hàm do người dùng tự định nghĩa (nếu nắm được nguyên tắc I2C thì thật dễ dàng):
unsigned char RTC_get(unsigned char addr);
RTC_settime(unsigned char hh, unsigned char mm, unsigned char ss);
RTC_setdate(unsigned char dd, unsigned char mm, unsigned char yy);
- khi đó, trong hàm main():
Code:
void main()
{
   // thiet lap PORT cho PIC
   // thiet lap gia tri cho cac thanh ghi chuc nang khac, v.v...
   RTC_init();  // goi ham khoi tao DS1307 - da co "trap".
   // cac ham khac ....
   while (1)
   {
       // hien thi hoac cac cong viec khac....
   }
}
như vậy, khi được cấp điện lại, đầu tiên con PIC sẽ lấy giá trị trong ô nhớ 0x08 của 1307 để kiểm tra, nếu là 0xFF thì bỏ qua việc khởi tạo.
Thực tình, việc bẫy này cũng chỉ "khá" hiệu quả thôi. Tôi cung ko hiểu tại sao lâu lâu con DS1307 bị treo (?), một ngày mà cúp điện chừng 3-4 lần là nó chạy "tào lao" thôi. Có lẽ bị sốc nguồn chăng??
meishun 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à 01:39 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