37款傳感器與執行器的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒於本人手頭積累了一些傳感器和執行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里准備逐一動手嘗試系列實驗,不管成功(程序走通)與否,都會記錄下來---小小的進步或是搞不掂的問題,希望能夠拋磚引玉。
【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
實驗五十九: RS232轉TTL2代串口模塊刷機板模塊(MAX3232芯片)

MAX3232芯片
采用專有低壓差發送器輸出級,利用雙電荷泵在3.0V至5.5V電源供電時能夠實現真正的RS-232性能,器件僅需四個0.1uF的外部小尺寸電荷泵電容。max3232確保在120kbps數據速率,同時保持RS-232輸出電平。max3232具有二路接收器和二路驅動器,提供1uA關斷模式,有效降低功效並延遲便攜式產品的電池使用壽命。關斷模式下,接收器保持有效狀態,對外部設備進行監測,僅消耗1uA電源電流,max3232的引腳、封裝和功能分別與工業標准MAX242和MAX232兼容。即使工作在高數據速率下,max3232仍然能保持RS-232標准要求的正負5.0V最小發送器輸出電壓。


MAX3232是MAXIM公司生產的一款 232通訊的芯片,他可以將單片機的邏輯信號的電平轉成RS232的電平。因為RS232是用,正負電平來表示0和1的信號,所以MAX3232要產生相應的正負電壓。在使用MAX3232時,先確定一下系統接供的電壓,因為此芯片,對不同的工作電壓,要給不同的電容來產生電壓。通電后,先檢測一下2腳是否有+5.4V以上的電壓,6腳有-5.4V以上的電壓,16腳是否有電壓, 如沒有則要檢查相應的電容。注意在16腳一定要有電容,要不然就可能不能產生相應的電壓。


RS232轉TTL2代串口模塊刷機板模塊(MAX3232芯片)

DB9串口


DB9管腳功能
1 、DCD( Data Carrier Detect) :載波檢測。主要用於Modem通知計算機其處於在線狀態,即Modem檢測到撥號音,處於在線狀態。
2 、RXD(Receive(rx) Data):此引腳用於接收外部設備送來的數據;在你使用Modem時,你會發現RXD指示燈在閃爍,說明RXD引腳上有數據進入(電腦的2接MAX232的RS232端TOUT(如PIN7))。
3 、TXD(Transmit(tx) Data):此引腳將計算機的數據發送給外部設備;在你使用Modem時,你會發現TXD指示燈在閃爍,說明計算機正在通過TXD引腳發送數據。
4 、DTR( Data Terminal Ready ):數據終端就緒;當此引腳高電平時,通知Modem可以進行數據傳輸,計算機已經准備好。
5 、GND(Ground):邏輯地。
6 、DSR(data set ready):數據設置就緒;此引腳高電平時,通知計算機Modem已經准備好,可以進行數據通訊了。
7 、RTS(Request To Send):請求發送;此腳由計算機來控制,用以通知Modem馬上傳送數據至計算機;否則,Modem將收到的數據暫時放入緩沖區中。
8 、CTS(Clear to send): 清除發送;此腳由Modem控制,用以通知計算機將欲傳的數據送至Modem。
9 、RI ( Ring Indicator): Modem通知計算機有呼叫進來,是否接聽呼叫由計算機決定。
要想實現串口間通信,至少需要三個引腳,即:RXD,TXD,GND,RXD與其他串口線TXD相連,TXD與RXD相連,GND與GND相連,這樣就實現了串口間通信。該通信是全雙工的,即可以同時發送/接收數據,雖然說是串行的,但是因為發送/接收不是用的一個通道,所以可以實現全雙工。

DB9與MAX3232的連接電路圖



模塊電原理圖



實驗開源代碼
/*
【Arduino】168種傳感器模塊系列實驗(59)
實驗五十九: RS232轉TTL2代串口模塊刷機板模塊(MAX3232芯片)
程序之一,讀取緩存中的串口數據
注意這里的接線方法,軟串口RX接RS232轉接板的RX口,
TX接RS232轉接板的TX口
*/
#include <SoftwareSerial.h>
SoftwareSerial DLSerial(6, 7); // 軟串口 RX(D6), TX(D7)
void setup() {
DLSerial.begin(9600); //設備波特率9600
}
void loop() {
DLSerial.write(1); //發送字節數據
DLSerial.write(3);
delay(500);
while (DLSerial.available()>0) //如果緩存中有接收到的數據
{
DLSerial.read(); //讀取緩存中的串口數據
delay(2);
}
delay(500);
}


/*
【Arduino】168種傳感器模塊系列實驗(59)
實驗五十九: RS232轉TTL2代串口模塊刷機板(MAX3232芯片)
程序之二,接收串口數據
rx = 6
tx = 7
*/
#include <ctype.h>
#define bit9600Delay 100
#define halfBit9600Delay 50
#define bit4800Delay 188
#define halfBit4800Delay 94
byte rx = 6;
byte tx = 7;
byte SWval;
void setup() {
pinMode(rx,INPUT);
pinMode(tx,OUTPUT);
digitalWrite(tx,HIGH);
delay(2);
digitalWrite(13,HIGH);
SWprint('o');
SWprint('k');
SWprint(10);
}
void SWprint(int data)
{
byte mask;
digitalWrite(tx,LOW);
delayMicroseconds(bit9600Delay);
for (mask = 0x01; mask>0; mask <<= 1) {
if (data & mask){
digitalWrite(tx,HIGH);
}
else{
digitalWrite(tx,LOW);
}
delayMicroseconds(bit9600Delay);
}
digitalWrite(tx, HIGH);
delayMicroseconds(bit9600Delay);
}
int SWread()
{
byte val = 0;
while (digitalRead(rx));
if (digitalRead(rx) == LOW) {
delayMicroseconds(halfBit9600Delay);
for (int offset = 0; offset < 8; offset++) {
delayMicroseconds(bit9600Delay);
val |= digitalRead(rx) << offset;
}
delayMicroseconds(bit9600Delay);
delayMicroseconds(bit9600Delay);
return val;
}
}
void loop()
{
SWval = SWread();
SWprint(toupper(SWval));
}

實驗仿真編程(linkboy)


