Thai microtron community

Electronic Knowledge Base => Microcontoller & Electronics => Topic started by: pakapong16 on February 16, 2010, 04:24:50 PM



Title: ใครรู้มั่ง ช่วบอกที
Post by: pakapong16 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


Title: Re: ใครรู้มั่ง ช่วบอกที
Post by: smitdh on February 16, 2010, 08:07:26 PM
สงสัยว่าลืม #include <math.h> หรือเปล่าครับ


Title: Re: ใครรู้มั่ง ช่วบอกที
Post by: pakapong16 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>


Title: Re: ใครรู้มั่ง ช่วบอกที
Post by: smitdh on February 17, 2010, 08:25:00 PM
ดูจากโค๊ดที่ให้มา E3,V2,I จะค้องประกาศเป็น float ด้วยนะครับ


Title: Re: ใครรู้มั่ง ช่วบอกที
Post by: pakapong16 on February 22, 2010, 09:55:16 PM
อ๋อ ได้แล้วครับ

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

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


Title: Re: ใครรู้มั่ง ช่วบอกที
Post by: smitdh 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


Title: Re: ใครรู้มั่ง ช่วบอกที
Post by: pakapong16 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

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




Title: Re: ใครรู้มั่ง ช่วบอกที
Post by: pakapong16 on March 12, 2010, 05:01:27 PM
ถ้าใช้ความถี่ 20MHzล่ะคับพี่

ต้องใช้ prescale เท่าไหร่คับ