• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::


Browsing this Thread:   1 Anonymous Users






Re: 30f4011_UART傳送至電腦終端機_10位元A/D顯示問題
#10
版主
版主


查看用戶資訊
謝謝提醒! C30 有 printf( ) 印到 UART 1 or UART 2 只要修改 stdio.h,也有 sprintf( ) 將輸出送到 RAM 裡的功能。只是這兩個函數相當佔程式空間,而且使用時要設定 Heap Size = 64 Bytes (在 C30 compiler 的設定項裡)Project-->Build Opions-->Build 裡

發表於: 2007/12/27 11:51
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 30f4011_UART傳送至電腦終端機_10位元A/D顯示問題
#9
新會員
新會員


查看用戶資訊
用sprintf不行嗎?
C30有 sprintf 阿

發表於: 2007/12/26 17:17
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 30f4011_UART傳送至電腦終端機_10位元A/D顯示問題
#8
版主
版主


查看用戶資訊
這些都是基本的 itoa( ) 函數的功能,C18 有提供這個轉換函數,但 C30 就沒有所以要自己寫。
itoa( ) 就是將一 int 型態的 16進制的數值轉成10進制的ASCII型態的字串。所以程式裡是先除取商並取得餘數後,再將餘數加上字元 0x30 (ASCII Code = ' ' 空白鍵) 就可以轉成 0x30 ~0x39 的數字 ASCII Code 。

發表於: 2007/12/14 11:19
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 30f4011_UART傳送至電腦終端機_10位元A/D顯示問題
#7
資深會員
資深會員


查看用戶資訊
提供另一個概念(先取得個位,十位,百位.....):
345 = 34*10 +5
= (3*10+4)*10+5

x = 345;
temp[3] = x %10; // = 5 --個位
x = x/10; //x=34
temp[0]= x%10; // = 4 -- 十位
x=x/10; //x = 5
temp[1] = x%10; // = 5 ---百位 (如果只有三位,可以省略%10)

發表於: 2007/12/14 9:33
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 30f4011_UART傳送至電腦終端機_10位元A/D顯示問題
#6
中級會員
中級會員


查看用戶資訊
太感謝了 我也正在用這方面的程式 出現一樣ㄉ問題 終於解決ㄌ

發表於: 2007/12/13 14:20
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 30f4011_UART傳送至電腦終端機_10位元A/D顯示問題
#5
初級會員
初級會員


查看用戶資訊
我終於想出來啦,真的很感謝前輩,成功的顯示了^^~原來少個(),太感謝了。

發表於: 2007/12/10 4:16
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 30f4011_UART傳送至電腦終端機_10位元A/D顯示問題
#4
資深會員
資深會員


查看用戶資訊
問題在這一行
Temp_Char_10 = The_Number - (Temp_Char_1000*1000 + Temp_Char_100 * 100) /10 ; //取十位數的數字

就當作考試 自己想想吧

發表於: 2007/12/10 0:34
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 30f4011_UART傳送至電腦終端機_10位元A/D顯示問題
#3
初級會員
初級會員


查看用戶資訊
這是我依前輩的建議改過後的程式
--------------------------------------------------
// Subroutine to show Time on UART

void Show_ADC(void)
{

unsigned char dummy ;
unsigned int ADCValue;
unsigned char TXdata[5];
ADCON1bits.SAMP = 1; // start sampling ...

for ( dummy = 0 ; dummy < 4 ; dummy ++ );

ConvertADC10();
while (BusyADC10()); // conversion done?
ADCValue = (ADCBUF0); // get ADC value

sitoa(ADCValue, (unsigned char *)TXdata);

putsUART1( (unsigned int *) "VR2 : ");
putsUART1( (unsigned char *) TXdata ) ;
putsUART1( (unsigned int *) "\r\n" );

}

//***********************************************
// Put a unsigned byte in decimal format
// to UART Module

void sitoa( unsigned int The_Number, unsigned char *buff)
{

unsigned int Temp_Char_1000, Temp_Char_100, Temp_Char_10, Temp_Char ;
unsigned char *temp = (unsigned char *) buff ;

Temp_Char_1000 = The_Number /1000 ; //取千位數的數字
temp[0] = Temp_Char_1000 + '0' ; //取千位數的數字
Temp_Char_100 = (The_Number - Temp_Char_1000*1000) /100 ; //取百位數的數字
temp[1] = Temp_Char_100 + '0' ; //取百位數的數字
Temp_Char_10 = The_Number - (Temp_Char_1000*1000 + Temp_Char_100 * 100) /10 ; //取十位數的數字
temp[2] = Temp_Char_10 + '0' ; //取十位數的數字
Temp_Char = The_Number - ( Temp_Char_100*1000 + Temp_Char_100 * 100 + Temp_Char_10 * 10 ) ; //取個位數的數字
temp[3] = Temp_Char + '0' ; //取個位數的數字
temp[4] = 0 ;
}
-----------------------------------------------------------
現在我執行的結果變成千位跟百位數字可正常執行,但是十位與個位數,會成亂碼,請問哪裡還不足嗎?
附上執行結果的圖檔與整個程式的筆記本
縮圖

整個程式的筆記本http://www.badongo.com/file/5514707


發表於: 2007/12/9 22:08
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 30f4011_UART傳送至電腦終端機_10位元A/D顯示問題
#2
資深會員
資深會員


查看用戶資訊
unsigned int TXdata[5];
-> unsigned char TXdata[5];

void sitoa( unsigned int The_Number, unsigned char *buff)
{

unsigned int Temp_Char_1000, Temp_Char_100, Temp_Char_10, Temp_Char ;
unsigned char *temp = buff ;

....

你用 int array, 每單元是 2 bytes, TXdata 會變成

A,0x00,B,0x00,C,0x00,D,0x00,0x00,0x00;

A 千位數, 所以只送到第二個 byte = NULL(0x00) 就不送了

發表於: 2007/12/9 7:28
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


30f4011_UART傳送至電腦終端機_10位元A/D顯示問題
#1
初級會員
初級會員


查看用戶資訊
各位好:

如同問題所示。曾百由書上範例12-1是將8位元A/D的10進制電壓值
(0~254),透過UART連上終端機顯示。我想將他改成10位元的A/D顯示出來(0-1023),於是我嘗試修改了範例中的部份程式。下面是我修改後的。
-------------------------------------------------------
// Subroutine to show Time on UART

void Show_ADC(void)
{

unsigned char dummy ;
unsigned int ADCValue;
unsigned int TXdata[5];
ADCON1bits.SAMP = 1; // start sampling ...

for ( dummy = 0 ; dummy < 4 ; dummy ++ );

ConvertADC10();
while (BusyADC10()); // conversion done?
ADCValue = (ADCBUF0); // get ADC value

sitoa(ADCValue, (unsigned int *)TXdata);

putsUART1( (unsigned int *) "VR2 : ");
putsUART1( (unsigned int *) TXdata ) ;
putsUART1( (unsigned int *) "\r\n" );

}

//***********************************************
// Put a unsigned byte in decimal format
// to UART Module

void sitoa( unsigned int The_Number, unsigned int *buff)
{

unsigned int Temp_Char_1000, Temp_Char_100, Temp_Char_10, Temp_Char ;
unsigned int *temp = (unsigned int *)buff ;

Temp_Char_1000 = The_Number /1000 ; //取千位數的數字
temp[0] = Temp_Char_1000 + '0' ; //取千位數的數字
Temp_Char_100 = (The_Number - Temp_Char_1000*1000) /100 ; //取百位數的數字
temp[1] = Temp_Char_100 + '0' ; //取百位數的數字
Temp_Char_10 = The_Number - (Temp_Char_1000*1000 + Temp_Char_100 * 100) /10 ; //取十位數的數字
temp[2] = Temp_Char_10 + '0' ; //取十位數的數字
Temp_Char = The_Number - ( Temp_Char_100*1000 + Temp_Char_100 * 100 + Temp_Char_10 * 10 ) ; //取個位數的數字
temp[3] = Temp_Char + '0' ; //取個位數的數字
temp[4] = 0 ;
}
---------------------------------------------------------

Build ALL 沒有問題,但是程式執行後,再終端機只顯示,當我可變電阻VR2轉到最低時顯示0,轉到最高時顯示1,請問是還有哪裡我沒有注意到的地方呢,以及程式有什麼問題呢。



發表於: 2007/12/9 3:38
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------