Sending a voltage to RS232

后端 未结 3 430
[愿得一人]
[愿得一人] 2021-01-15 01:58

I know that we can use pin no.3 to send the data as a output in RS232. But I am just wondering that there is another way to send only the voltage 5v to the RS232 in a short

相关标签:
3条回答
  • 2021-01-15 02:41

    You could use the DTREnable (Data Terminal Ready) property of the SerialPort class to apply a positive voltage to those respective pins. This could be used to signal an MCU.

    Something along the lines of...

    serialPort.DtrEnable = true; //High
    currentThread.Sleep(1000);
    serialPort.DtrEnable = false; //Low
    currentThread.Sleep(1000);
    

    However! the voltage is likely to be incompatible as RS232 operates -25 to 25 volts for 1/0's. You will likely need an inline driver/receiver such as a MAX232 chip to operate between the MCU and computer, or dependant on your skill level you could build a receiver circuit.

    0 讨论(0)
  • 2021-01-15 02:50

    PIC Microcontroller with TTL interface used logic as follows:
    Logic 1 == 5 volt.
    Logic 0 == 0 volt.

    Computer with RS232 interface used logic as follows:
    Logic 1 == -3 volt until -25 volt.
    Logic 0 == 0 until 25 volt.

    For connecting device TTL logic to RS232 logic can used MAX232 IC. MAX232 will translate your TTL logic to RS232 Logic.

    Another options - cheaper and simple, used TRANSISTOR for convert TTL logic to RS232 logic vice versa, look at http://www.kmitl.ac.th/~kswichit/ap275/ap275.htm for details.

    If need send data without hardware handshaking, only need pin 2 (RX), pin 3(TX), pin 5(GND). If need handshaking, add pin 7(RTS) AND pin 8(CTS).
    Transmitte data as follows:

    serialPort1.Open();
    serialPort1.Write("your data in here");
    

    Receive data as dollows:

    public Form1()
    {
        InitializeComponent();
        this.serialPort1.DataReceived += new SerialDataReceivedEventHandler(this.serialPort1_DataReceived);
        serialPort1.Open();
    }
    
    void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        int i = 0;
        string[] DataReceived; 
    
        while (serialPort1.BytesToRead > 0) 
        {
            DataReceived[i] = Convert.ToByte(serialPort1.ReadByte()); // data already in here
            i++;         
    
            if (i == int.MaxValue-1)
              i = 0;            
        }
        // Parsing your data in here
    }
    

    If just need toggle output, used pin 4 (DTR) OR pint 7(RTS).
    serialPort1.DtrEnable = true;ORserialPort1.RtsEnable = true;

    0 讨论(0)
  • 2021-01-15 02:58

    you can use RTS or DTR as long as you aren't using them on the PIC side for flow control

    0 讨论(0)
提交回复
热议问题