顯示具有 韌體設計 標籤的文章。 顯示所有文章
顯示具有 韌體設計 標籤的文章。 顯示所有文章

2021年10月14日 星期四

One Source, Multi-MCUs

The global chip shortage has turned me into a multi-platform firmware developer.

Zero code modifications.

STM / MM32 / Nuvotone



2021年9月13日 星期一

一個奇怪的問題、一種簡單的解法

兩個未知規格的熱敏電阻(10K、20K或50K…未知),熱敏電阻A、熱敏電阻B

如何驗證二顆不同的熱敏電阻規格是一致的?

原來是一個簡單的分壓問題…

測試一、正電-->熱敏電阻A--求分壓a-->熱敏電阻B--負電

測試二、正電-->熱敏電阻B--求分壓b-->熱敏電阻A--負電

測試環境從 100°C~0°C,分壓a 需恆等於分壓b

即可初步判定二顆熱敏電阻規格是一致的

2016年4月18日 星期一

這些年摸過的小玩意

記錄一下這些年摸過的小玩意…

RASPBERRY PI : 拿來開發較複雜的系統很好,Linux base 的核心基本上可以玩的東西就很多了,而且資源也很豐富。

Intel Galileo : 只稍微摸看看,基本上能玩的跟 PI 應該大同小意。

Arduino DUE : 32bit ARM 作出來的強化版 Arduino,可以開發 ADK( Android Open Accessory Development Kit) 不過現在都走無線的了吧?

Arduino UNO : 好用是無庸置疑的,拿來作快速開發,網路上還有一堆 lib 可以用。

TI MSP430 : Good

ESP2866 : 小型 wifi 嵌入式系統,腳位不多,可以拿來作 iot 之類的東西。

TI CC2541 : 藍牙模組,可以拿來作 iot 之類的東西,開發手機應用產品。

EN28j60 : 8bit 低階 MCU 上網功能,還算堪用,也因此學會了很多網路底層的東西。

STM32F030 : 便宜的 ARM,拿來當強化版的 8bit MCU 用。

Freescale FRDM KL-05 : 還 ok。

Freescale TWR-S12G128 : 還 ok。☆

Arduino W5100  Ethernet Shield : Arduino 要簡單上網就靠它了。

STM32 Demo Board : 拿來學習 ARM 的板子。

ST NUCLEO-F411RE : mbed 開發版。

STM32 Demo Board : 拿來學習 ARM 的板子。

還有其它數不清的小模組板…

2010年10月28日 星期四

時間轉換函式~秒<---->日期 (從2000年)


bit isleap(int y)
{
return y%4==0&&y%100!=0 || y%400==0;
}

int DaysOfMonth( int y, int m )
{
switch(m)
{
case 1: return 31;
case 2: return isleap(y)?29:28;
case 3: return 31;
case 4: return 30;
case 5: return 31;
case 6: return 30;
case 7: return 31;
case 8: return 31;
case 9: return 30;
case 10: return 31;
case 11: return 30;
case 12: return 31;
}
return 30;
}


int DaysOfYear( int y )
{
if( isleap(y) )
return 366;
return 365;
}

unsigned long SecsFrom2000( int y, int m, int d, int hh, int mm, int ss )
{
int i;
unsigned long day = 0;
for( i=2000; i<y; i++ )
day += DaysOfYear(i);
for( i=1; i<m; i++ )
day += DaysOfMonth(y,i);
day += d;
day = day*86400L + hh*3600L + mm*60L + ss*1L;
return day;
}

void SecToDateTime( unsigned long sec, cdate * pdate, ctime * ptime )
{
unsigned long day;

day = sec/86400;

pdate->yy = 2000;
while( day > DaysOfYear( pdate->yy ) )
{
day-= DaysOfYear( pdate->yy );
pdate->yy++;
}

pdate->mm = 1;
while( day > DaysOfMonth( pdate->yy, pdate->mm ) )
{
day-= DaysOfMonth( pdate->yy, pdate->mm );
pdate->mm++;
}

pdate->dd = day;

ptime->hh = (sec/3600)%24;
ptime->mm = (sec/60)%60;
ptime->ss = (sec)%60;
}

2009年3月4日 星期三

MCU在ICE上開發與實際CHIP的差異

很多狀況會導致ICE開發時的結果正確,但是燒錄出來的實體CHIP卻有不同的結果…
底下記錄實際發生過的經驗:

一、使用內RC開發計時功能,燒錄出來卻發生時差誤差很大:
  大部份的MCU都己經有提供內RC的功能,但若ICE設計的有問題,或開發時的環境不同,年久失準…等等問題,就會有ICE內頻不準的狀況,而實際CHIP由於是相對比較量產的東西,所以實際的CHIP反而是應該要比較準確。
  系統開發的時間若是忽略這個問題,反而自作聰明的加入校正值的話,就會導致這個問題。

二、ICE由於可以模擬多種型號的CHIP,因此在設計時必定使用了比較大的RAM容量來當作CODE及MEMORY的記憶體,若是編譯器不良無法針對不同型號作檢查,那就有可能出現STACK OV的問題而在ICE模擬時卻不自知。一般都會正確檢查CODE的大小是否超過ROM的大小,但不一定都會檢查RAM的問題。

三、同樣上述的原因,不同的CHIP可能會對不同的指令集有不同程度的支援,若是編譯器無法適時檢查出這種錯誤,也會讓你DEBUG沒完沒了。

四、AD轉換模組需要使用參考電壓,有的是外部參考電壓,但也有用內部參考電壓的,這時就要考量ICE的電壓要怎麼能跟實際主板電壓一樣,或怎加入校正程序。

2008年5月19日 星期一

24LC04B用I2C讀寫

筆記:
http://www.google.com/notebook/public/12398140405581905258/BDQGMIgoQ3f676KAi

  • SCL可以到100KHZ但是寫入後要DELAY 10MS 左右,但一般都由MASTER控制,除非SLAVE端有 clock stretching 模式。
  • ACK、NOACK有兩種解釋,一個是MASTER發出的,一個是來自SLAVER(24LC04B)的,兩者SDA的方向是不同的。
  • 硬體接腳~WP一定要接好,不可浮接,否則寫入會失常。

寫入的流程…
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(RomAddress);
TestAck();
Write8Bit(*Wdata);
TestAck();
Stop();
DelayMs(10);

讀出的流程…
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(RomAddress);
TestAck();
Start();
Write8Bit(ReadDviceAddress);
TestAck()
Read8Bit();
Ack(); …
Read8Bit();
NoAck();
Stop();

2007年9月9日 星期日

74164串接線路

74164是很好用的元件,可以拿來擴充I/O,還能串接起來使用,非常方便
程式碼實現也非常容易。(但需注意評估 bit shift 造成周邊硬體元件的影響)
底下是基本的串接線路圖。

VirtualBox 空間減肥

sdelete64 -z c: VBoxManage  modifymedium  disk  "/Users/fellow/VirtualBox VMs/Win10/Win10.vdi"  --compact *.vdi 路徑可以在 VirtualBox 儲...