Pages: [1]   Go Down
Print
Author Topic: ใครรู้มั่ง ช่วบอกที  (Read 11004 times)
0 Members and 1 Guest are viewing this topic.
pakapong16
Jr. Member
**
Offline Offline

Posts: 33


« on: February 16, 2010, 04:24:50 PM »

ใช้โปรแกรม CCS C complie
Pic 16F877
complie แต่ไม่ผ่าน
         signed int16 V1,V2,....
           max คือค่าดิจิตอลที่แปลงออกมา
           E1=(1/0.53); 
           E2=(max/1.41);
           E3=pow(E2,E1);
           V1=max+8.96;
           V2=V1/0.21;
           V3=50;
           I=V2/V3;
      printf(lcd_putc,"\f A  = %0.3f  ",E3);
      printf(lcd_putc,"\m B= %0.3f  ",V2);
      printf(lcd_putc,"\n C   = %0.3f  ",I);

// แล้วไม่ผ่านตอนแสดง E3 ,V2, I
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 381


อาจารย์ที่ปรึกษา


« Reply #1 on: February 16, 2010, 08:07:26 PM »

สงสัยว่าลืม #include <math.h> หรือเปล่าครับ
Logged
pakapong16
Jr. Member
**
Offline Offline

Posts: 33


« Reply #2 on: February 17, 2010, 07:26:20 AM »

ผมประกาศแล้วครับ

#include <16F877.h>
#device ADC=10
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 381


อาจารย์ที่ปรึกษา


« Reply #3 on: February 17, 2010, 08:25:00 PM »

ดูจากโค๊ดที่ให้มา E3,V2,I จะค้องประกาศเป็น float ด้วยนะครับ
Logged
pakapong16
Jr. Member
**
Offline Offline

Posts: 33


« Reply #4 on: February 22, 2010, 09:55:16 PM »

อ๋อ ได้แล้วครับ

ขอบคุณมากคับ

ขอรบกวนพี่ smitdh  เขียนโค๊ดนับเวลาให้ได้ไหมคับ
ไปไม่ถูก อ่านแล้วก้อไม่เข้าใจ เอาสโคปจับ เอาต์พุตดูเวลาประมาณ 4-6 ms อ่ะคับ
เขียนยังงัยให้มันเริ่มจับเวลาตั้งแต่มีอินพุตเข้ามา จนถึงสิ้นสุด แล้วให้โชว์เวลาที่จับนั้นอ่ะคับ
Logged
smitdh
Administrator
Hero Member
*****
Offline Offline

Gender: Male
Posts: 381


อาจารย์ที่ปรึกษา


« Reply #5 on: February 23, 2010, 05:33:49 AM »

การจับเวลาให้นำ Timer1 ซึ่งเป็น timer/counter ขนาด 16-bit
ซึ่งเมื่อใช้ Xtal 4 Mhz (clock ภายใน = 1 MHz)และ prescaler เป็น 1 จะนับได้สูงสุด 65536 หรือ 65.5 ms

 
//1). กำหนดค่า
unsigned long CalTime;
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);

//2). เคลียร์ค่าเพื่อเริ่มนับ
set_timer1(0); //Clear Timer1

//ส่วนที่ต้องการจับเวลา

//3). อ่านค่าที่นับได้
CalTime=get_timer1();
printf("Cal Time=%lu\r\n",CalTime);


ดูเพิ่มเติมที่
http://www.thaimicrotron.com/CCS-628/Timer/Timer1_2.htm
Logged
pakapong16
Jr. Member
**
Offline Offline

Posts: 33


« Reply #6 on: March 10, 2010, 04:34:39 PM »

งงคับพี่
หากผมใช้ timer0 ความถี่ XTAL= 20 Mhz
นับเวลา 6 ms ให้ได้ 6 ms. ตรงๆๆหรือใกล้เคียงนี้
ผมต้องใช้ prescale เท่าไหร่คับ
แล้วค่าเหล่านี้ล่ะคับต้องกำหนดยังงัย

 cycle=(Td/Pr)*(20*10^6/4 )=256   
  Td = 256*(4/20*10^6)*PR   
  Tdmax = 256*(4/20*10^6)*256    ;PR=256
  Tdmax = 65536*(4/20*10^6)   
  Tdmax = 262144/20*10^6

มันเกี่ยวไหมคับ


Logged
pakapong16
Jr. Member
**
Offline Offline

Posts: 33


« Reply #7 on: March 12, 2010, 05:01:27 PM »

ถ้าใช้ความถี่ 20MHzล่ะคับพี่

ต้องใช้ prescale เท่าไหร่คับ
Logged
Pages: [1]   Go Up
Print
 
Jump to: