Todo lo que proporciona un MAX232 es traducción de nivel .
"Tradicional" RS-232 usa altos voltajes para hacer su señalización, generalmente ~ + 10V para indicar un "0" lógico, y ~ -10V para indicar un "1" lógico (aunque la especificación técnicamente dice cualquier cosa > 3V = 0, y < -3V = 1. En las aplicaciones del mundo real, puede ver un rango de niveles de señalización representados como "RS232").
Sin embargo, la mayoría de los dispositivos modernos no tienen las instalaciones a bordo para generar o manejar estos (relativamente) altos voltajes. Como tal, cosas como su PIC utilizarán 0V y VCC para sus niveles de señalización, que representan el "0" lógico y el "1" respectivamente.
Lo que hace el MAX-232 es convertir un nivel de entrada de 0V a una salida de ~ + 10V, y una entrada de VCC a ~ -10V. Eso es todo lo que hace. No hará ninguna conversión de velocidad de transmisión en absoluto.
En su caso, la hoja de datos del sensor Atlas Scientific PH dice:
La velocidad en baudios es: 38400, 8 bits, sin paridad, con un bit de parada.
La variación de voltaje 0-VCC, no +/- 12 voltios
Si el nivel de tensión estándar RS232
Si lo desea, conecte un convertidor RS232 como MAX232.
Por lo tanto, no necesita un MAX232, ya que no quiere ni necesita los niveles de señalización de ~ + -10V. Suponiendo que esté utilizando la misma fuente de alimentación para el sensor de pH y su MCU, simplemente puede conectar los dos dispositivos directamente.
Como nota aparte, recomendaría colocar una resistencia de 1K entre la salida serial del sensor de pH y la entrada serial de su MCU. De esta manera, si configura accidentalmente la entrada serial como un pin de salida, no causará que las salidas de los dos dispositivos luchen entre sí, y posiblemente dañen una de ellas.
Deberá cambiar la velocidad en baudios del sensor Atlas o calcular sus propios valores de generador de velocidad en baudios para que el PIC funcione a 38400 baudios que necesita.
Si no puede alcanzar la velocidad en baudios deseada con el reloj de su sistema, debe agregar un cristal externo o un resonador, y aumentar el reloj del sistema para que pueda hacerlo.
Aparte de eso, creo que estás haciendo algo mal con tus cálculos si obtienes números negativos para SPBRGH:SPBRG
.
Dicho esto, 38400 baudios es bastante alto para un reloj del sistema de 1 Mhz. Vas a estar a la derecha en el borde del extremo superior en el que puedes ejecutar el EUSART en.
De la hoja de datos:
Suponiendo:
-
SYNC
= 0
-
BRG16
= 1
-
BRGH
= 1
n = valor de SPBRGH, par de registro SPBRG
$$ BaudRate = \ frac {F_ {OSC}} {4 * (n + 1)} $$
$$ BaudRate * 4 * (n + 1) = F_ {OSC} $$
$$ (n + 1) = \ frac {F_ {OSC}} {4 * BaudRate} $$
$$ (n + 1) = \ frac {1,000,000} {4 * 38400} $$
$$ (n + 1) = \ frac {1,000,000} {153,800} $$
$$ (n + 1) = 6.51041666666667 $$
$$ n = 5.51041666666667 $$
por lo que el valor SPBRGH, SPBRG
disponible más cercano sería 6 o 5.
Luego, calculamos el error de la velocidad en baudios, que probablemente sea muy alto, ya que estamos abajo en valores de SPBRGH, SPBRG
tan pequeños.
$$ BaudRate = \ frac {F_ {OSC}} {4 * (n + 1)} $$
$$ BaudRate _ {SPBRGH = 6} = \ frac {1e6} {4 * (6 + 1)}, BaudRate _ {SPBRGH = 5} = \ frac {1e6} {4 * (5 + 1)} $$
$$ BaudRate _ {SPBRGH = 6} = 35714, BaudRate _ {SPBRGH = 5} = 41666 $$
Así que las dos tasas de baudios disponibles son:
-
SPBRGH=6
: 35714, -6.9% Error
-
SPBRGH=5
: 41666, 8.5% de error
Ambos están muy lejos de su velocidad de transmisión de destino para que funcione, por lo que debe cambiar la velocidad de reloj del sistema.