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 08-05-2008, 12:52 AM   #1
daothienbao
Nhập môn đệ tử
 
Tham gia ngày: Jul 2007
Bài gửi: 4
:
Có ai giúp đỡ mình làm việc với encoder với

Em muốn dùng encoder đo tốc độ động cỏ,nhưng k hiểu sao đoạn code em viết k chạy, mặc dù đã tham khảo nhiều tài liệu rùi.Mong mọi người xem dùm.
Timer0 để đếm xung
Timer1 để định ra khoảng thời gian 1s
Nhưng k hiểu sao hiển thị ra toàn la 0000. Em đảm bảo phần hiển thị của em đúng vì em đã đi hỏi và test rồi.Mọi người giúp dùm nha.Code của nó đây:


Code:
#include "D:\pro2\vd\lcd1.h"
#include "def_877a.h"
#include<lcd_lib_4bit.c>
#use delay(clock=20000000)
int8 nghin,tram,chuc,donvi;
void tinhtoan_hienthi(int16 x);
int16 count,so_vong,int_count1,x;
#define INTS_PER_SECOND1 19
#int_rtcc                           // Ngat Timer 0
void Timer0_isr()                   // Dem so vong quay dong co
{
   count++;
}

#INT_TIMER1                        // Chuong trinh ngat Timer 1
void Timer11_isr() {                // Ham duoc goi khi TImer1 tran (65535->0)
                                   // Xap xi 19 lan / giay
    if(--int_count1==0)
    {
      int_count1 = INTS_PER_SECOND1;
      so_vong = (count*255 + get_timer0())/100;
      count = 0;
      set_timer0(0);
    }
}
void tinhtoan_hienthi(int16 x) // thuc hien tach so va dua ra hien thi luon
{nghin = x / 1000 + 0x30;
x = x % 1000;
 tram = x / 100 + 0x30; // tách s? hàng tram
 x = x % 100; // chia l?y ph?n d?
 chuc = x / 10 + 0x30; // tách l?y ph?n ch?c
 donvi = x % 10 + 0x30; // ph?n don v?
 lcd_putcmd(0xC0);
 printf(lcd_putchar,"toc do=");
 lcd_putchar(nghin);
 lcd_putchar(tram);
 lcd_putchar(chuc);
 lcd_putchar(donvi);
}
void init()
{  lcd_putcmd(0x80);
   int_count1 = INTS_PER_SECOND1;//19 lan 1 giay
      setup_timer_0 (RTCC_DIV_1|RTCC_EXT_H_TO_L);  // Timer0 is Counter
   set_timer0(0);
   set_timer1(0);
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_4);    // Timer1 is Timer
   enable_interrupts(INT_RTCC);
   enable_interrupts(INT_TIMER1);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
    count = 0;
   lcd_init();
delay_ms(200);
printf(lcd_putchar,"toc do dong co");
}
void main()
{init();

//setup_adc_ports(NO_ANALOGS);
//setup_adc(ADC_OFF);
//setup_psp(PSP_DISABLED);
//setup_spi(FALSE);


  so_vong = 0;// khoi tao gia tri
while(1) // doan chuong trinh hien thi len LCD
{
   tinhtoan_hienthi(so_vong);
   delay_ms(500);
}
}

Đây là phần mô phỏng đi kèm,không rõ encoder em nối đúng k,nhưng mà thử nhiều vẫn k được
Hình Kèm Theo
File Type: jpg sac.JPG (246.8 KB, 58 lần tải)

thay đổi nội dung bởi: namqn, 08-05-2008 lúc 01:28 AM.
daothienbao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-05-2008, 01:34 AM   #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
Với những bài toán hiển thị, không nên mô phỏng trên Proteus.

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 14-05-2008, 06:36 PM   #3
daothienbao
Nhập môn đệ tử
 
Tham gia ngày: Jul 2007
Bài gửi: 4
:
Trích:
Nguyên văn bởi namqn View Post
Với những bài toán hiển thị, không nên mô phỏng trên Proteus.

Thân,
Cám ơn anh trưởng lão, em chưa có điều kiện để lắp mạch thật, phải 1 thời gian nữa mới mua được linh kiện, em đang thay thế con encoder bằng IC tao xung 555, thấy phần ngắt timer0.timer1 cũng tạm tạm.
daothienbao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-05-2008, 11:22 AM   #4
lequocdat
Nhập môn đệ tử
 
Tham gia ngày: Jul 2006
Bài gửi: 1
:
mình không rành về C lắm,mình có làm cái này rồi bằng assembly,mình không dùng timer mà mình sài ngắt rồi tăng thanh ghi lên 1 hay giảm thanh ghi xuống 1 (tùy theo chiều quay)tốn rất ít không gian chương trình ,mình hiển thị ra led 7 doạn và mô phỏng bằng protues rất tốt ,lưu ý protues không giả lập quét led 7 đoạn được,chỉ quét led ma trận thôi
__________________
Đời là bụi
phủi là bay
lequocdat 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


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