Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - samarters

#10
1. อ่านแบบ 32 บิตครับ
#include <18F4431.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600,  parity=N, Bits=8, xmit=PIN_C6, rcv=PIN_C7)

#BYTE QEICON=0xFB6  // quadrature configure
#bit QEICONDIR=0xFB6.5
#BYTE DFLTCON=0xF60  // quadrature noise filter configure
#BYTE CAP2BUFL=0xF66 // position counter
#BYTE CAP2BUFH=0xF67
#BYTE CAP3BUFL=0xF64  //max count
#BYTE CAP3BUFH=0xF65
unsigned int16 quadhigh=0;

#int_IC2QEI
QuadRollover()
{
QEICONDIR?quadhigh++:quadhigh--;
}

void main()
{
   signed int32 position=0;

   QEICON=24; // quad in x4 mode, resettable by maxcount
   DFLTCON=49; // noise filter on QEA, QEB,, 1:2 clock
   CAP3BUFL=0xFF;  // set max count
   CAP3BUFH=0xFF;
   CAP2BUFL=0;
   CAP2BUFH=0;
   enable_interrupts(INT_IC2QEI);
   enable_interrupts(GLOBAL);

  while (true)
{
        position=(((int32)(quadhigh))<<16)+(CAP2BUFL+((int16)CAP2BUFH<<8));
        printf("%ld\r\n",position);

}
}

2. อ่านแบบ 16 บิต

//setting QEI

#define     DISABLE_VELOCITY      0x80
#define     QEI_OFF               0x00
#define     QEI_2XINDX            0x04
#define     QEI_2XPER             0x08
#define     QEI_4XINDX            0x14
#define     QEI_4XPER             0x18
#define     VELOCITY_DIV_1        0x00
#define     VELOCITY_DIV_4        0x01
#define     VELOCITY_DIV_16       0x02
#define     VELOCITY_DIV_64       0x03

#byte       QEICON                = 0xFB6
//bits in QEICON
#define     QEI_NOT_VELM          7
#define     QEI_ERROR             6
#define     QEI_DIRECTION         5

int16       POSCNT;
#byte       POSCNT                = 0xF66
#byte       POSCNTH               = 0xF67
#define     POSCNTL               = 0xF66
int16       VREG;
#byte       VREG                  = 0xF68
#byte       VREGH                 = 0xF69
#byte       VREGL                 = 0xF68
#byte       DFLTCON               = 0xF60   //Digital Filter Control Register
#byte       CAP1CON               = 0xF63

int16       MAXCNT;
#byte       MAXCNT                = 0xF64
#byte       MAXCNTH               = 0xF65
#byte       MAXCNTL               = 0xF64


#list

add เข้าไปใน .h ของ PIC
code ก็ตาม link ครับ
#12
น่าจะใช้รุ่นที่มี QEI นะครับ เพราะว่าใช้ CCP1 แล้วก็เช็คขา IO มันจะมี ERROR อยู่ อัันนี้ผมเคยลองทำดูแล้ว
นอกจากใช้ Interrupt ของ dspic ถึงจะทัน
ใช้เบอร์เหมือนใน link นั่นง่ายกว่า ไม่ต้องมาพะวงกับ Error http://pics-project.blogspot.com/2010/10/lab13-position-encoder.html
เบอร์ีที่ใช้ได้ 18F2331,18f2431,18f4331,18f4431 ใช้ code เดียวกันได้
#13
Thermistor ค่อนข้างรวนนะครับ ต้องวางวงจรดีๆ ถึงจะไม่ค่อยรวน โดยเฉพาะเรื่อง DC 5V ต้องบล็อกสัญญาณรบกวนจากอุปกรณ์ภายนอกให้ได้มากที่สุด
ส่วนการใช้ filter นั่นผมว่าไม่ควร นอกจาก digital filter เด๋วค่าที่ได้จะผิดเพี้ยน
#14
ผมเคยใช้ RFID อยู่เหมือนกันของ thaieasy ถ้าเขียนวนส่งไม่ครบมันจะไม่ตอบสนองกลับมาครับ
ส่วนเรื่องอ่านค่า 3V นั้นมันอ่านได้ครับ ผมว่าไม่น่าจะมีปัญหาอะไร ผมก็เคยใช้กับพวก 3 V ก็ไม่มีปัญหานะครับ
#15
ผมว่าน่าจะเป็นที่โค๊ดมากกว่า