2022年4月30日 星期六

[C 語言] 有無const 的差異?

 


char *s : 表示s 指標指向一個character
constant char *s : 表示s 指標指向一個constant character; 也就是所指向的字元不能被修改
可以參考底下範例, 觀察有無const 的差別.

#include <stdio.h>
int main()
{
const char str[]="hello";
str[0]='H';
printf(str);
return 0;

}

若是寫 const char *str="hello";
這str 本來就指向read only 的"hello"字串區域, 所以本來就不能更改, 因此
這兩個寫法結果沒有差異, 但用const char * str寫法可以讓別人知道, 不會透過str 來改變指標所指的內容.

char *str="hello"; 
const char *str="hello";


2022年3月15日 星期二

[MCU單晶片 Q&A] ADC工作頻率

 

Question:
要怎麼知道Fosc 是16MHz呢? Fosc 是MCU的固定property 還是是個可以設置的參數呢?

Answer: 
這是外部提供 16MHz 的 Crystal oscillator
p.s. 可參考上課文件的的電路圖  (WengPICV2_sch.pdf )


2022年3月13日 星期日

[MCU單晶片 Q&A] 中斷

 

Question:

PPSunlock() 和PPSlock() 功能為何呢? 為什麼要用這兩個PPSunlock和PPSlock去包住RPI function? 使用PPSlock()和PPSunlock() 為什麼要把GIEH 中斷關掉呢? 因為沒看到文件上有這樣說明, 但是PPS 裡的function 有關掉中斷後面再回復的動作




Answer: 

   這是PPS 使用的規定, 如此才可以 remap Pin 腳功能, 
   可以參考PIC18F46J50 文件描述, 關於PPS 主題 10.7.4.1 Control Register Lock  

2022年3月9日 星期三

[MCU單晶片 Q&A] I2C 操作


[I2C 操作]
Question : 在I2C的START function 裡要先檢查SDA 是否已經為0,來決定是否進行後面是否要將SCL=0和SDA=1的動作,這樣和範例是藉由Din 來判斷是一樣的嗎? 而 Din 是SDA接腳的接收輸入接腳,為什麼要定義這個接腳呢?而沒有SCL的輸入接腳的定義




Answer : 
確認SDA 是否真的在Low level的狀態, 實際的作法是去讀取PORT 暫存器, 而不是去讀取TRIS暫存器. 為何在I2C START時,要判斷SDA為LOW呢? 因為我們進行I2C START動作, 是將SDA=1 (而原本SCL若在High), 則會變成多產生一個I2C STOP的動作,才再產生I2C START的動作。






Each port has three registers for its operation. These registers are:
  • TRIS register (data direction register)
  • PORT register (reads the levels on the pins of the device)
  • LAT register (output latch)





2022年2月25日 星期五

PCB Layout 入門教學(八) ---PCBA 人工打件


PCB 佈線圖完成後,產生所謂Gerber File 給PCB 加工廠後,就可以生產出PCB 電路版了。接著就是照BOM表的電子零件清單備料。當然也會有統包的公司,包含PCB、備料、打件、樣品生產的服務。一個PCB空板經過SMT打件,或經過DIP插件的整個製程,簡稱PCBA (PCB Assembly)。

SMT 自動打件的流程為:製作鋼板、PCB板定位、上錫膏、貼裝機貼裝、過回焊爐、成品檢驗。但如果是原型樣品,或僅需小批量生產,如100~200片,想要試試看"人工打件",就是沒有SMD貼裝機啦,那你也可以自行DIY,本篇文章就是要分享人工打件的方法,適合Maker 族群。


(1) 製作鋼板: 為PCB 板製作一個鋼板,這是一次性的成本。鋼板上有洞的地方就是等等要上錫的位置。


 
 

(2)上錫膏:

 

將錫膏均勻抹平在鋼板的洞上,拿掉鋼板後如下圖所示。



(3.) 人工貼裝機: 依照Layout 圖,將元件正確擺放。在融錫前,錫膏的黏度剛好可以稍微黏住PCB表面的電子零件,所以有些微的晃動也不會使元件偏移。
 




(4.)  手工迴銲爐: 需要一個加熱台來加熱融錫,如此電子零件就被銲接在PCB上了。










(5.) 成品:
  
    大功告成! 每一個零件就像由機器自動定位來擺放一樣。好吧! 這就人工打樣的過程 ^_^ 





額外分享:
 
這是專業SMT機台的打件速度~



 
上錫膏也是自動化流程的一部份





2021年12月13日 星期一

[Linux 核心編譯] make menuconfig 無法開啓

 


Step1: 安裝ncurses 套件

sudo apt-get install libncurses5-dev libncursesw5-dev 
Step2:

     cd linux-raspberrypi-kernel_1.20190401-1/
     make menuconfig


kernel 選單就出現啦~