【雕爺學編程】Arduino動手做(59)---RS232轉TTL串口模塊


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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM