Está en la página 1de 18

Proyecto final

Manejo del módulo USART:


Comunicación Asíncrona (Tx & Rx) entre PIC16F887 y MATLAB
para controlar la temperatura de una estufa usando un SSR.

Objetivos

Durante el desarrollo y al término de esta práctica, el estudiante de ingeniería podrá:

• Entender el concepto de “USART”, y sus aplicaciones en la electrónica digital

• Desarrollar códigos de programación para poder realizar una comunicación serial del PIC con la
computadora.

• Desarrollar códigos de programación para poder utilizar un puerto serial.

• Implementar un sistema en tiempo real con tiempos de ejecución precisos para cada transmisión
y recepción de datos.

• Uso de PWM para controlar el dispositivo SSR


Introducción
En este reporte se expondrá cómo se puede transmitir datos del PIC16F887 a una computadora y poder
recibirlos de ella a través de una conexión serial gracias a un cable USB-Serial y un modulo CP2102

Marco Teórico
MATLAB (abreviatura de MATrix LABoratory, "laboratorio de matrices") es un software matemático que
ofrece un entorno de desarrollo integrado (IDE) con un lenguaje de programación propio (lenguaje M). Está
disponible para las plataformas Unix, Windows y Apple Mac OS X.

Entre sus prestaciones básicas se hallan: la manipulación de matrices, la representación de datos y


funciones, la implementación de algoritmos, la creación de interfaces de usuario (GUI) y la comunicación
con programas en otros lenguajes y con otros dispositivos hardware. El paquete MATLAB dispone de dos
herramientas adicionales que expanden sus prestaciones, a saber, Simulink (plataforma de simulación
multidominio) y GUIDE (editor de interfaces de usuario - GUI). Además, se pueden ampliar las capacidades
de MATLAB con las cajas de herramientas (toolboxes); y las de Simulink con los paquetes de bloques
(blocksets).

Es un software muy usado en universidades y centros de investigación y desarrollo. En los últimos años ha
aumentado el número de prestaciones, como la de programar directamente procesadores digitales de señal
o crear código VHDL.

La comunicación serial consiste en el envío de un bit de información de manera secuencial, esto es, un
bit a la vez y a un ritmo acordado entre el emisor y el receptor.
La comunicación serial en computadores ha seguido los estándares definidos en 1969 por el RS-232
(Recommended Standard 232) que establece niveles de voltaje, velocidad de transmisión de los datos, etc.
Por ejemplo, este protocolo establece un nivel de -12v como un uno lógico y un nivel de voltaje de +12v
como un cero lógico (por su parte, los microcontroladores emplean por lo general 5v como un uno lógico y
0v como un cero lógico).

Existen en la actualidad diferentes ejemplos de puertos que comunican información de manera serial (un
bit a la vez). El conocido como “puerto serial” ha sido gradualmente reemplazado por el puerto USB
(Universal Serial Bus) que permite mayor versatilidad en la conexión de múltiples dispositivos. Aunque en
naturaleza serial, no suele referenciarse de esta manera ya que sigue sus propios estándares y no los
establecidos por el RS-232.

El Universal Serial Bus (bus universal en serie) o Conductor Universal en Serie (CUS), abreviado
comúnmente USB, es un puerto que sirve para conectar periféricos a un ordenador. Fue creado en 1996
por siete empresas: IBM, Intel, Northern Telecom, Compaq, Microsoft, Digital Equipment
Corporation y NEC[cita requerida].
El diseño del USB tenía en mente eliminar la necesidad de adquirir tarjetas separadas para poner en los
puertos bus ISA o PCI, y mejorar las capacidades plug-and-play permitiendo a esos dispositivos ser
conectados o desconectados al sistema sin necesidad de reiniciar. Sin embargo, en aplicaciones donde se
necesita ancho de banda para grandes transferencias de datos, o si se necesita una latencia baja, los buses
PCI o PCIe salen ganando. Igualmente sucede si la aplicación requiere de robustez industrial. A favor del
bus USB, cabe decir que cuando se conecta un nuevo dispositivo, el servidor lo enumera y agrega el
software necesario para que pueda funcionar (esto dependerá ciertamente del sistema operativo que esté
usando el ordenador).

El USB no puede conectar los periféricos porque sólo puede ser dirigido por el drive central así como:
ratones, teclados, escáneres, cámaras digitales, teléfonos móviles, reproductores multimedia, impresoras,
discos duros externos entre otros ejemplos, tarjetas de sonido, sistemas de adquisición de datos y
componentes de red. Para dispositivos multimedia como escáneres y cámaras digitales, el USB se ha
convertido en el método estándar de conexión. Para impresoras, el USB ha crecido tanto en popularidad
que ha desplazado a un segundo plano a los puertos paralelos porque el USB hace mucho más sencillo el
poder agregar más de una impresora a un ordenador.

Algunos dispositivos requieren una potencia mínima, así que se pueden conectar varios sin necesitar
fuentes de alimentación extra. La gran mayoría de los concentradores incluyen fuentes de alimentación que
brindan energía a los dispositivos conectados a ellos, pero algunos dispositivos consumen tanta energía
que necesitan su propia fuente de alimentación. Los concentradores con fuente de alimentación pueden
proporcionarle corriente eléctrica a otros dispositivos sin quitarle corriente al resto de la conexión (dentro
de ciertos límites).

Los convertidores Edgeport de USB a serie constituyen una sencilla solución de conexión directa (plug-
and-play) para la expansión de puertos COM. Los Edgeport son una alternativa independiente (externa) a
las tarjetas PCI, y se conectan por USB a un PC o servidor, de modo que ya no es necesario abrir el chasis,
reconfigurar y reiniciar el equipo. Basta con conectar el Edgeport y en cuestión de minutos dispondrá de
hasta 16 puertos serie para conectar lectores de códigos de barras, impresoras o cualquier dispositivo serie
periférico.
Un puerto serie o puerto serial es una interfaz de comunicaciones de datos digitales, frecuentemente
utilizado por computadoras y periféricos, en donde la información es transmitida bit a bit enviando un solo
bit a la vez, en contraste con el puerto paralelo que envía varios bits simultáneamente. La comparación
entre la transmisión en serie y en paralelo se puede explicar usando una analogía con las carreteras. Una
carretera tradicional de un sólo carril por sentido sería como la transmisión en serie y una autovía con varios
carriles por sentido sería la transmisión en paralelo, siendo los vehículos los bits que circulan por el cable.
Material

1 PIC16F887
1 Capacitores Cerámicos de 22 pF.

8 Resistencias 330 Ω a ½ watt.


10 Resistencias 10 KΩ a ½ watt.
1 Conector DB9 hembra.
1 Cable de interfaz USB-RS232.
2 Protoboards.
Alambres.
Fuente de Voltaje de 5 VCD.
Computadora Portátil

Desarrollo
El PIC16F887 mandara un numero de tipo flotante al programa Matlab de la computadora el cual
corresponde al valor analógico que retorna el sensor de temperatura LM35, al recibir el numero Matlab se
encarga de hacer la conversión a temperatura.
Matlab mandara una cadena de caracteres que contiene
{[0XXXX],[0YYY],[ZZZ.ZZZ]}
XXXX: Configuración que contiene el ciclo útil para el PWM
YYY: Dato que contiene el ciclo útil del PWM , est6e se muestra en una pantalla LCD
ZZZ.ZZZ: dato que contiene la temperatura exacta , este dato se muestra en una pantalla LCD

1. Se procedió a armar el siguiente circuito. El cual también se muestra en las siguientes fig. 7.1 – 7.3
Descripción del programa

La función principal del programa es de transmitir un numero elegido por el programador hacia Matlab vía
USB-Serial, éste al recibirlo lo mostrara en pantalla, le sumara 5 y lo regresara al PIC el cual lo mostrara en
una barra de Let´s en formato Hexadecimal.

A continuación se muestra el código utilizado en el PIC:

function varargout = Estufa(varargin)


% ESTUFA MATLAB code for Estufa.fig
% ESTUFA, by itself, creates a new ESTUFA or raises the existing
% singleton*.
%
% H = ESTUFA returns the handle to a new ESTUFA or the handle to
% the existing singleton*.
%
% ESTUFA('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in ESTUFA.M with the given input arguments.
%
% ESTUFA('Property','Value',...) creates a new ESTUFA or raises the
% existing singleton*. Starting from the left, property value pairs
are
% applied to the GUI before Estufa_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property
application
% stop. All inputs are passed to Estufa_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only
one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Estufa

% Last Modified by GUIDE v2.5 06-Dec-2018 00:04:20

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Estufa_OpeningFcn, ...
'gui_OutputFcn', @Estufa_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before Estufa is made visible.


function Estufa_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Estufa (see VARARGIN)

% Choose default command line output for Estufa


handles.output = hObject;

% Update handles structure


guidata(hObject, handles);

% UIWAIT makes Estufa wait for user response (see UIRESUME)


% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = Estufa_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure


varargout{1} = handles.output;

% --- Executes on button press in pushbutton1.


function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

close all;
clc;
muestras=480;
voltaje=0; %Declara variable en la cual se van a guardar los valores
voltaje1=0;
duty_pwm=200;
porc=0;
Tmedio=50;
%Borra datos que se encuentren previos y vuelve a declarar el puerto y la
%velocidad de transmisión
delete(instrfind({'port'},{'COM5'}));
puerto=serial('COM5');
instrfind
fopen(puerto);%abre el puerto a utilizar

puerto.BaudRate=9600;

contador=1;

%configura la ventana donde se va a mostrar la grafica


% figure('Name','Grafica Temperatura')
% title('GRAFICA TEMPERATURAADC-SERIAL');
% xlabel('Numero de Muestras');
% ylabel('TEMPERATURA (°C)');
% grid off;
% hold on;

%Ciclo para ir realizando la grafica paso a paso


while contador<=muestras
%ylim([0 110]); %Limites del eje y
%ylim([0 contador+50]);
xlim([0 contador+50]); %Limites del eje x

porc=duty_pwm*100/1023;
porc=round(porc);
chr_duty = int2str (duty_pwm);
chr_porc = int2str (porc);

chr_temp = num2str (voltaje1,'%3.2f');

if duty_pwm<10
chr_duty=strcat('0000',chr_duty);
elseif duty_pwm>=10 & duty_pwm<100
chr_duty=strcat('000',chr_duty);
elseif duty_pwm>=100 & duty_pwm<1000
chr_duty=strcat('00',chr_duty);
else
chr_duty=strcat('0',chr_duty);
end

if porc<10
chr_porc=strcat('00',chr_porc);
elseif porc>=10 & porc<100
chr_porc=strcat('0',chr_porc);
else
chr_porc=chr_porc;
end

config=strcat(chr_duty,chr_porc,chr_temp)

fprintf(puerto,'%s\r',config)

pause(0.24)

valorADC=fscanf(puerto,'%d') %Toma el valor recibido por el puerto y


lo guarda en la variable
voltaje(contador)=(valorADC(1)*150/1024)-6; %Hace la conversión a
voltaje

voltaje1=voltaje(contador);
plot(voltaje); %Grafica el voltaje

if(voltaje<Tmedio)
if (duty_pwm<1023)
duty_pwm=duty_pwm+1;
end
end

if(voltaje>Tmedio)
if(duty_pwm>0)
duty_pwm=duty_pwm-1;
end
end

drawnow
contador=contador+1;
end
%cierra y borra el puerto utilizado, borra todas las variables utilizadas
fclose(puerto);
delete(puerto);

% --- Executes on button press in pushbutton2.


function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close all;
clc;
muestras=1640;
voltaje=0; %Declara variable en la cual se van a guardar los valores
voltaje1=0;
duty_pwm=340;
porc=0;
Tmedio=65;
%Borra datos que se encuentren previos y vuelve a declarar el puerto y la
%velocidad de transmisión
delete(instrfind({'port'},{'COM5'}));
puerto=serial('COM5');
instrfind
fopen(puerto);%abre el puerto a utilizar

puerto.BaudRate=9600;

contador=1;

%configura la ventana donde se va a mostrar la grafica


% figure('Name','Grafica Temperatura')
% title('GRAFICA TEMPERATURAADC-SERIAL');
% xlabel('Numero de Muestras');
% ylabel('TEMPERATURA (°C)');
% grid off;
% hold on;

%Ciclo para ir realizando la grafica paso a paso


while contador<=muestras
%ylim([0 110]); %Limites del eje y
%ylim([0 contador+50]);
xlim([0 contador+50]); %Limites del eje x

porc=duty_pwm*100/1023;
porc=round(porc);

chr_duty = int2str (duty_pwm);


chr_porc = int2str (porc);

chr_temp = num2str (voltaje1,'%3.2f');

if duty_pwm<10
chr_duty=strcat('0000',chr_duty);
elseif duty_pwm>=10 & duty_pwm<100
chr_duty=strcat('000',chr_duty);
elseif duty_pwm>=100 & duty_pwm<1000
chr_duty=strcat('00',chr_duty);
else
chr_duty=strcat('0',chr_duty);
end

if porc<10
chr_porc=strcat('00',chr_porc);
elseif porc>=10 & porc<100
chr_porc=strcat('0',chr_porc);
else
chr_porc=chr_porc;
end

config=strcat(chr_duty,chr_porc,chr_temp)

fprintf(puerto,'%s\r',config)

pause(0.24)

valorADC=fscanf(puerto,'%d') %Toma el valor recibido por el puerto y


lo guarda en la variable
voltaje(contador)=(valorADC(1)*150/1024)-6; %Hace la conversión a
voltaje

voltaje1=voltaje(contador);
plot(voltaje); %Grafica el voltaje

if(voltaje<Tmedio)
if (duty_pwm<1023)
duty_pwm=duty_pwm+1;
end
end

if(voltaje>Tmedio)
if(duty_pwm>0)
duty_pwm=duty_pwm-1;
end
end

drawnow
contador=contador+1;
end
%cierra y borra el puerto utilizado, borra todas las variables utilizadas
fclose(puerto);
delete(puerto);

% --- Executes on button press in pushbutton3.


function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close all;
clc;
muestras=1240;
voltaje=0; %Declara variable en la cual se van a guardar los valores
voltaje1=0;
duty_pwm=250;
porc=0;
Tmedio=65;
%Borra datos que se encuentren previos y vuelve a declarar el puerto y la
%velocidad de transmisión
delete(instrfind({'port'},{'COM5'}));
puerto=serial('COM5');
instrfind
fopen(puerto);%abre el puerto a utilizar

puerto.BaudRate=9600;

contador=1;

%configura la ventana donde se va a mostrar la grafica


% figure('Name','Grafica Temperatura')
% title('GRAFICA TEMPERATURAADC-SERIAL');
% xlabel('Numero de Muestras');
% ylabel('TEMPERATURA (°C)');
% grid off;
% hold on;

%Ciclo para ir realizando la grafica paso a paso


while contador<=muestras
%ylim([0 110]); %Limites del eje y
%ylim([0 contador+50]);
xlim([0 contador+50]); %Limites del eje x

porc=duty_pwm*100/1023;
porc=round(porc);

chr_duty = int2str (duty_pwm);


chr_porc = int2str (porc);

chr_temp = num2str (voltaje1,'%3.2f');

if duty_pwm<10
chr_duty=strcat('0000',chr_duty);
elseif duty_pwm>=10 & duty_pwm<100
chr_duty=strcat('000',chr_duty);
elseif duty_pwm>=100 & duty_pwm<1000
chr_duty=strcat('00',chr_duty);
else
chr_duty=strcat('0',chr_duty);
end

if porc<10
chr_porc=strcat('00',chr_porc);
elseif porc>=10 & porc<100
chr_porc=strcat('0',chr_porc);
else
chr_porc=chr_porc;
end

config=strcat(chr_duty,chr_porc,chr_temp)

fprintf(puerto,'%s\r',config)

pause(0.24)

valorADC=fscanf(puerto,'%d') %Toma el valor recibido por el puerto y


lo guarda en la variable
voltaje(contador)=(valorADC(1)*150/1024)-6; %Hace la conversión a
voltaje

voltaje1=voltaje(contador);
plot(voltaje); %Grafica el voltaje

if(voltaje<Tmedio)
if (duty_pwm<1023)
duty_pwm=duty_pwm+1;
end
end

if(voltaje>Tmedio)
if(duty_pwm>0)
duty_pwm=duty_pwm-1;
end
end

drawnow
contador=contador+1;
end
%cierra y borra el puerto utilizado, borra todas las variables utilizadas
fclose(puerto);
delete(puerto);

% --- Executes on button press in pushbutton4.


function pushbutton4_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

close all;
clc;
muestras=1200;
voltaje=0; %Declara variable en la cual se van a guardar los valores
voltaje1=0;
duty_pwm=819;
porc=0;
% Tmedio=50;
%Borra datos que se encuentren previos y vuelve a declarar el puerto y la
%velocidad de transmisión
delete(instrfind({'port'},{'COM5'}));
puerto=serial('COM5');
instrfind
fopen(puerto);%abre el puerto a utilizar

puerto.BaudRate=9600;

contador=1;

%configura la ventana donde se va a mostrar la grafica


% figure('Name','Grafica Temperatura')
% title('GRAFICA TEMPERATURAADC-SERIAL');
% xlabel('Numero de Muestras');
% ylabel('TEMPERATURA (°C)');
% grid off;
% hold on;

%Ciclo para ir realizando la grafica paso a paso


while contador<=muestras
%ylim([0 110]); %Limites del eje y
%ylim([0 contador+50]);
xlim([0 contador+50]); %Limites del eje x

porc=duty_pwm*100/1023;
porc=round(porc);

chr_duty = int2str (duty_pwm);


chr_porc = int2str (porc);

chr_temp = num2str (voltaje1,'%3.2f');

if duty_pwm<10
chr_duty=strcat('0000',chr_duty);
elseif duty_pwm>=10 & duty_pwm<100
chr_duty=strcat('000',chr_duty);
elseif duty_pwm>=100 & duty_pwm<1000
chr_duty=strcat('00',chr_duty);
else
chr_duty=strcat('0',chr_duty);
end

if porc<10
chr_porc=strcat('00',chr_porc);
elseif porc>=10 & porc<100
chr_porc=strcat('0',chr_porc);
else
chr_porc=chr_porc;
end
config=strcat(chr_duty,chr_porc,chr_temp)

fprintf(puerto,'%s\r',config)

pause(0.24)

valorADC=fscanf(puerto,'%d') %Toma el valor recibido por el puerto y


lo guarda en la variable
voltaje(contador)=(valorADC(1)*150/1024)-6; %Hace la conversión a
voltaje

voltaje1=voltaje(contador);
plot(voltaje); %Grafica el voltaje

% if(voltaje<Tmedio)
% if (duty_pwm<1023)
% duty_pwm=duty_pwm+1;
% end
% end
%
% if(voltaje>Tmedio)
% if(duty_pwm>0)
% duty_pwm=duty_pwm-1;
% end
% end

drawnow
contador=contador+1;
end
%cierra y borra el puerto utilizado, borra todas las variables utilizadas
fclose(puerto);
delete(puerto);

function edit1_Callback(hObject, eventdata, handles)


% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text


% str2double(get(hObject,'String')) returns contents of edit1 as a
double

% --- Executes during object creation, after setting all properties.


function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit2_Callback(hObject, eventdata, handles)


% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit2 as text


% str2double(get(hObject,'String')) returns contents of edit2 as a
double

% --- Executes during object creation, after setting all properties.


function edit2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.


% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
#INCLUDE <16f887.h>
#device adc=10
#USE DELAY(CLOCK=4000000)
#FUSES HS,NOWDT,NOPROTECT,NOLVP
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8)

#include<lcd.c>
#BYTE PORTA= 5
#BYTE PORTD= 8
#INCLUDE <stdlib.h>
unsigned int16 bits,porcentaje; //Variable almacena los
bits
float tem,temp_float; //Almacena la temperatura
char ch;
char string [17];
char duty_pwm [6];
char porc [6];
char temperatura [9];
int i;
void main()
{
set_tris_b(0x00);
lcd_init(); //inicializa lcd

set_tris_a(0b00000001); //Pongo el RA0 como entrada


setup_adc_ports(ALL_ANALOG); //Pongo todo el puerto a
analogo
setup_adc(adc_clock_internal); //Selecciono reloj interno
para conversion

setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16, 255, 1);

LCD_INIT(); //Inicializa el LCD


LCD_PUTC("\f"); //Borrar el contenido del LCD

while(1)
{
set_adc_channel(0); //Selecciono el canal 0 (RA0)
delay_ms(1); //llamo retardo de 1 ms
tem=read_adc(); //Guarde el dato del LM en tempe
printf("\r%.0f\r\n",tem);
set_pwm1_duty(bits);
delay_ms(15);

gets(string);
for(i=0;i<5;i++){
duty_pwm[i]=string[i];
}
bits=atol(duty_pwm);
for(i=5;i<8;i++){
porc[0]='0';
porc[1]='0';
porc[i-3]=string[i];
}
porcentaje=atol(porc);
for(i=8;i<15;i++){
temperatura[i-8]=string[i];
}
temp_float=atof(temperatura);

LCD_GOTOXY(1,1); //Se ubica En la columna 5 fila 1


LCD_PUTC("PWM:"); //Muestre el mensaje "Control"
LCD_GOTOXY(5,1); //Ubicarse en la columna 3 fila 2
printf(lcd_putc,"%3Lu",porcentaje);
LCD_GOTOXY(8,1); //Ubicarse en la columna 3 fila 2
LCD_PUTC("%"); //
LCD_GOTOXY(1,2); //Se ubica En la columna 5 fila 1
LCD_PUTC("Temp:");
LCD_GOTOXY(7,2);
printf(lcd_putc,"%3.2f °C",temp_float);

Conclusión:
Al termino de esta práctica lo que se puede concluir es que la conexión serial es muy
importante ya que si no se cuenta con un puerto USB será de mucha ayuda el puerto serial o
en serie; una de las desventajas es que la conexión es algo lenta si uno de los pines esta
defectuosos o roto por eso estos puertos están siendo sustituidos por puertos USB los cuales
son más rápidos y confiables. Esta práctica será de mucha ayuda en el futuro cuando
tengamos que hacer proyectos más complicados que necesiten comunicación con una PC ya
que estaremos encaminados en el tema.

Referencias:

También podría gustarte