2024年1月28日 星期日

電子電路_MCU_通訊介面

MCU單片機

微控制器(Microcontroller Unit, MCU),等同一顆小電腦(麻雀雖小五臟俱全),內含CPU、記憶體以及基本周邊單元。

ATMEL

ATMEL被microchip合併

  • ATtiny85:最陽春的MCU,也可以用UNO來寫程式(連結)
  • AVR:使用過ATUC64L3U、ATxmega64A1U、AT90S8515(KIM)
  • SAMS:這兩年大量使用SAM4S8B(連結)

ST : STM32XXX

ARM 32bit Cortex-M3CPU  72MHz,1.25DMIPS/MHz   32-512KB Flash  6-64KB SRAM
STM32F4介紹(連結) 記憶體管理(連結) ,還記得以前拿到開發板,覺得好複雜的感覺,現在卻是常常接觸。
自己有用過這個組裝一個包含列印機,MCU,相機三者的東西,不過現在仔細看看若用OpenMV,相機部分可以直接省略呢。
延伸OpenMV(連結):屬於功能整合型MCU,網站。手邊有好幾代。

忘記哪裡來的開發板
忘記哪裡來的開發板

TI : MSP430

低工耗,16bit,過去專案使用到,為了安全起見和SAM4S做對手。

ARC

架構類似ARM但不需給付授權費,工作上用了許多年(專案層次)

Arduino

使用過多種版本,例如MINI、UNO

UNO
MEGA(連結 IDE設定,處理器選1280 價格約140元)

MEGA

Arduino & Android

類似於Mega 加上一個可以連接到安卓手機的USB 主機接口。當初購買約800元(貴),連結

相較於WIFI或是藍芽,自己很喜愛單純線控的概念,只是似乎沒有後續發展。Arduino那邊使用USB CLASS,與ANDROID進行溝通,同時Android程式也要有另外的程式,才能溝通。

Arduino Mega ADK Rev3 連結  連結 Arduino Mega ADK 有一片

Freaduino ADK  連結1 有一片   Arduino Mega ADK 連結2   連結3 

XADOW

依序是RTC 擴展 藍芽 MAIN 類似振動器 電池

硬體

供電 連結 5V的USB行動電源可使用,供電孔為9V至12V,使用9V原因( 連結 )

FTDI當做連結,DRIVER是C:\Program Files (x86)\Arduino\drivers\FTDI USB Drivers 找到,用COMXX對應使用

使用上產生所謂SHIELD,將許多線路延伸出來,SHIELD各式各樣。


安裝和軟體

安裝檔(1.8.8版 下載)

void setup() {

   pinMode(LED_BUILTIN, OUTPUT);

}

void loop() {

   digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)

   delay(100);                       // wait for a second

   digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW

   delay(100);                       // wait for a second

}

沒有main的結構,檔案名稱為XXX.ino,系統也會自動以XXX建立同名目錄

使用第三方專案,專案位置在 C:\Program Files (x86)\Arduino\libraries 每個專案都是一個個單獨的目錄

#include “xyz.h”


複雜專案

在相同目錄下,將x.h x.c(cpp) 檔案放在同一目錄

#include “xyz.h”

就可以完成編譯

參考連結


製作屬於自己專案

參考連結

找到每個IDE設定的專案位置,位置在

IDE's File > Preferences > Sketchbook location

這裡就會看到目前的位置,資料是 C:\Users\kayjean\Documents\Arduino

在這個目錄下建立自己專案的目錄名稱PwmLed

把三個檔案放進去

libraries/PwmLed底下還可以放個examples目錄,存放範例(也就是現在正在做的事情)

Arduino OS

PORT簡單OS 超瘋狂,可當成OS學習教材(連結)

顯示TTF文字

控制相機拍照

連結

小型LED

PIN13有內建電組,可實驗LED,也可以用電路板接出(注意,長腳為正)。小功率的LED都是屬於直插式,一般都是按直徑分型號3mm 4mm 5mm 8mm 10mm 12mm。不論直徑大小,其工作電壓和工作電流都是一樣約15mA。電壓以常見的5MM來看,紅光 黃光 1.7--2.1V。白光 藍光 暖白光 粉紅光 紫色光 2.8--3.6V。綠光2.6--3.4V。

藍芽

藍芽模組

抽屜裡

ESP

ESP8266

2014上海樂鑫,內部含WIFI天線。Ai-Thinker生產的ESP-01。連結,有micropython的開發機制。ESP-12E WiFi module is developed by Ai-thinker Team. core processor ESP8266 in smaller sizes of the module encapsulates Tensilica L106 integrates industry-leading ultra low power 32-bit MCU micro, with the 16-bit short mode, Clock speed support 80 MHz, 160 MHz, supports the RTOS, integrated Wi-Fi MAC/BB/RF/PA/LNA, on-board antenna.



ESP32

2019,包含WIFI和藍芽,Tensilica Xtensa LX6微處理器。連結 RISC-V 32 位元單核心處理器

  • ESP32 有BLE功能範例(連結),因為量大所以價格最低
  • ESP32-S 主頻都到240
  • ESP32-C 主頻都到160
  • ESP32-H 主頻96 拔掉WIFI,能有單純BLE功能,較適合目前需要 連結 詳細介紹(連結)

Pixart(BLE)

主功能為BLE,可參考(連結)。僅列出呼叫系統功能寫法。

燒錄方式

JTAG (1/4)

JTAG標準協議,可以實現編程時在線調試和DEBUG。接口為電源線和復位引腳,TDI、TMS、TCK、TDO:

  • TDI-- 數據輸入,所有寫入寄存器的數據都是通過 TDI 接口串行輸入的;
  • TMS-- 模式選擇,Jlink 輸出給目標 CPU 的時鐘信號;
  • TCK-- 時鐘信號,所有數據的輸入輸出都是以該時鐘信號為基準的;
  • TDO-- 數據輸出,所有從寄存器讀出的數據都是通過 TDO 接口串行輸出的

設計電路時要選用上拉電阻。 JTAG 接口有多種形式,常用的 20 引腳、14 引腳和 10 引腳(不懂)。JTAG 接口燒錄方式常用的工具為 J-Link。

SWD (2/4)

SWD是JTAG的子集合,意法半導體的 ST-Link也支持SWD。只需要兩根線。

  • SWDIO-- 串行數據線,用於數據的讀出和寫入。
  • SWDCLK-- 串行時鐘線,提供所需要的時鐘信號。

UART (3/4) 和 燒錄方式SWIM單線 (4/4) (連結)


程式語言

一般都是C或是C++,但是多了個MicroPython

通訊介面

序列:非同步I2C

I2C的特點是只有兩條線,理論說明(連結)。(很多裝置同時支援I2C和SPI兩種介面,只要切換某個電路,就會切換)。

I2C的特色是,每種裝置會有自己特殊的代號(同型號內各個產品的代號都是相同,不像WIFI通訊裝置則是UUID每個都不同),這個代號是寫在data sheet中。比較特別的是,如果一個系統裡面有多個這種裝置怎麼辦呢?牠會用是否提供電壓,改變一些address資訊,但改來改去最多就是兩個。例如手邊的三軸感測器,LIS3DSH( 這和LIS3DH不一樣歐 ),根據datasheet(連結),所謂的位置又叫做SAD  slave address

The slave address (SAD) associated to the LIS3DSH is 00111xxb whereas the xx bits are modified by the SEL/SDO pin in order to modify the device address. If the SEL pin is connected to the voltage supply, the address is 0011101b, otherwise the address is 0011110b if the SEL pin is connected to ground. This solution permits to connect and address two different accelerometers to the same I2C lines.   0011101 : 1D   0011110 : 1E

從master角度看,配合clock的動作,將slave的位置丟到bus上,各個slave判斷位置訊號若是屬於我這個裝置,就會在最後面一個訊號結束後,將電位拉下(此時master是進入free的狀況),然後就開始一連串訊號串送過程。master的頻率可以從100k~400k範圍,而slave本身並沒有發送任何頻率的訊號,slave僅僅是在每次master的clock頻率拉起來時,進行相對應動作。(非常聰明的作法)。

系統功能,將資料寫入規定暫存器和記憶體內(透過C語言的結構功能),然後變更register就可以進行例如enable、送出資料、讀取資料等動作。

ARDINO寫I2C軟體方式(連結)。

I2C大量應用在專案中,好奇其內部究竟如何設計,找到一篇文章介紹(連結),

序列:非同步SPI

連結。SPI和I2C類似(連結),同樣可以連結多個裝置。如下圖。每個SLAVE裝置掛四條線。MASTER可掛多個裝置但會依照SS而逐漸增加,要與哪個裝置溝通,就改變對應的SSX即可。

通訊方式如下(連結),分成四種。
單工:線路上的訊號只能做單向傳送
半雙工:線路上的訊號可以雙向傳送 , 但是不能同時傳送
全雙工:線路上的訊號可以同時雙向傳送
同步:傳送端和接收端共用同一個CLOCK

SPI的速度遠高於I2C,目前只在少數螢幕上使用過。

其他的協定實在太多,可以先從這篇當作基礎。I2C、SPI、UART、RGB、LVDS,MIPI,EDP和DP。(連結)

其他

UART(MCU與MCU溝通)

LVDS和MIPI的區別連結

LVDS功耗比較低,適合長距離傳輸

藍芽(連結)

沒有留言:

張貼留言