TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: xbyte en 27 de Agosto de 2015, 02:42:37
-
Buenas noches a todos, soy nuevo en el foro , el programa que estoy haciendo es un control de arranque, paro, inversion de giro, con corriente trifasica con el PIC16F88 mediante la comunicacion RS232 y una interfaz en labview estuve obligando a que mis librerias ocuparan memoria de otros bancos pero sin remedio de solucionar mi problema en proteus sobre desbordamiento de memoria y unos warnings que de mplab que les adjuntare, les agradeceria si me pudieran guiar , gracias.
Empezare con los Warnings y errores de desbordamiento y finalmente colocare el codigo y librerias.
WARNING!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Release build of project `C:\Users\candi\Desktop\comunicacionserialPIC-PC\Pic16f88\RS232.disposable_mcp' started.
Language tool versions: MPASMWIN.exe v5.35, mplink.exe v4.35
Thu Aug 27 00:25:50 2015
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F88 "RS232.ASM" /l"RS232.lst" /e"RS232.err"
Message[302] C:\USERS\CANDI\DESKTOP\COMUNICACIONSERIALPIC-PC\PIC16F88\LCD_4BIT.INC 105 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\USERS\CANDI\DESKTOP\COMUNICACIONSERIALPIC-PC\PIC16F88\LCD_4BIT.INC 117 : Register in operand not in bank 0. Ensure that bank bits are correct.
Warning[219] C:\USERS\CANDI\DESKTOP\COMUNICACIONSERIALPIC-PC\PIC16F88\RETARDOS.INC 63 : Invalid RAM location specified.
Warning[219] C:\USERS\CANDI\DESKTOP\COMUNICACIONSERIALPIC-PC\PIC16F88\RETARDOS.INC 65 : Invalid RAM location specified.
Warning[219] C:\USERS\CANDI\DESKTOP\COMUNICACIONSERIALPIC-PC\PIC16F88\RETARDOS.INC 107 : Invalid RAM location specified.
Warning[219] C:\USERS\CANDI\DESKTOP\COMUNICACIONSERIALPIC-PC\PIC16F88\RETARDOS.INC 110 : Invalid RAM location specified.
Warning[219] C:\USERS\CANDI\DESKTOP\COMUNICACIONSERIALPIC-PC\PIC16F88\RETARDOS.INC 113 : Invalid RAM location specified.
Warning[219] C:\USERS\CANDI\DESKTOP\COMUNICACIONSERIALPIC-PC\PIC16F88\RETARDOS.INC 115 : Invalid RAM location specified.
Warning[219] C:\USERS\CANDI\DESKTOP\COMUNICACIONSERIALPIC-PC\PIC16F88\RETARDOS.INC 155 : Invalid RAM location specified.
Warning[219] C:\USERS\CANDI\DESKTOP\COMUNICACIONSERIALPIC-PC\PIC16F88\RETARDOS.INC 158 : Invalid RAM location specified.
Warning[219] C:\USERS\CANDI\DESKTOP\COMUNICACIONSERIALPIC-PC\PIC16F88\RETARDOS.INC 161 : Invalid RAM location specified.
Warning[219] C:\USERS\CANDI\DESKTOP\COMUNICACIONSERIALPIC-PC\PIC16F88\RETARDOS.INC 164 : Invalid RAM location specified.
Warning[219] C:\USERS\CANDI\DESKTOP\COMUNICACIONSERIALPIC-PC\PIC16F88\RETARDOS.INC 166 : Invalid RAM location specified.
Warning[219] C:\USERS\CANDI\DESKTOP\COMUNICACIONSERIALPIC-PC\PIC16F88\RETARDOS.INC 168 : Invalid RAM location specified.
Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\mplink.exe" /p16F88 "RS232.o" /z__MPLAB_BUILD=1 /o"RS232.cof" /M"RS232.map" /W /x
MPLINK 4.35, Linker
Copyright (c) 2009 Microchip Technology Inc.
Errors : 0
Loaded C:\Users\candi\Desktop\comunicacionserialPIC-PC\Pic16f88\RS232.cof.
----------------------------------------------------------------------
Release build of project `C:\Users\candi\Desktop\comunicacionserialPIC-PC\Pic16f88\RS232.disposable_mcp' succeeded.
Language tool versions: MPASMWIN.exe v5.35, mplink.exe v4.35
Thu Aug 27 00:25:51 2015
----------------------------------------------------------------------
BUILD SUCCEEDED
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ERRORES PROTEUS
[PIC16 MEMORY] PC= 0x1AF. Attempt to write unimplemente memory location 0x001C with 0x15 ignored
[PIC16 MEMORY] PC= 0x1B1. Attempt to write unimplemente memory location 0x001B with 0xF9 ignored
[PIC16 MEMORY] PC= 0x1B3. Attempt to write unimplemente memory location 0x001B ignored
.......
..............
.................. Y asi sucesivamente
----------------------------------------------------------------------------------------------
CODIGO
; PROGRAMA PARA ARRANCAR,PARO, INVERSION DE GIRO DE UN MOTOR TRIFASICO CON INTERFAZ EN LABVIEW
LIST P=16F88
INCLUDE <P16f88.INC>
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
CBLOCK 0x0C
TeclaPulsada ; Va a guardar el contenido de la tecla pulsada.
MensajeApuntado ; Va a guarda la dirección del mensaje apuntado.
ENDC
#DEFINE EnciendeMotor PORTB,3 ; Define dónde se sitúan las salidas.
#DEFINE ApagaMotor PORTB,2
#DEFINE Cambiodegiro PORTB,1
#DEFINE ArranqueInv PORTB,0
TeclaEmotor EQU 'e' ; Enciende el motor.
TeclaAmotor EQU 'a' ; Apaga el motor
TeclaIgiro EQU 'g' ; Invierte el giro
TeclaAinverso EQU 'r' ; Vuelve arrancar en sentido contrario
TeclaParada EQU ' ' ; Para el sistema.
; ZONA DE CÓDIGOS ********************************************************************
ORG 0
Inicio
call LCD_Inicializa
call RS232_Inicializa
bsf STATUS,RP0 ; Configura como salidas las 4 líneas del
bcf EnciendeMotor ; del Puerto B respetando la configuración del
bcf ApagaMotor ; resto de las líneas.
bcf Cambiodegiro
bcf ArranqueInv
bcf STATUS,RP0
call Parado ; En principio todas las salidas deben estar
Principal ; apagadas.
call RS232_LeeDato ; Espera a recibir un carácter.
call TesteaTeclado
goto Principal
; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
MensajeParado
DT " SISTEMA PARADO", 0x00
MensajeEncendido
DT " MOTOR ENCENDIDO", 0x00
MensajeApagado
DT " MOTOR APAGADO", 0x00
MensajeArranque
DT " ARRANQUE DELTA", 0x00
MensajeCambio
DT " CAMBIO DE GIRO", 0x00
; Subrutina "TesteaTeclado" -------------------------------------------------------------
; Testea el teclado y actúa en consecuencia.
TesteaTeclado
movwf TeclaPulsada ; Guarda el contenido de la tecla pulsada.
xorlw TeclaEmotor ; ¿Es la tecla para encender el motor?
btfsc STATUS,Z
goto Adelante ; Sí, se desea encender el motor.
movf TeclaPulsada,W ; Recupera el contenido de la tecla pulsada.
xorlw TeclaAmotor ; ¿Es la tecla del movimiento para apagar el motor?
btfsc STATUS,Z
goto Atras ; Sí, se desea apagar el motor.
movf TeclaPulsada,W ; Recupera el contenido de la tecla pulsada.
xorlw TeclaIgiro ; ¿Es la tecla del movimiento para invertir el giro?
btfsc STATUS,Z
goto Izquierda ; Sí, se desea girar el motor.
movf TeclaPulsada,W ; Recupera el contenido de la tecla pulsada.
xorlw TeclaAinverso ; ¿Es tecla del movimiento arrancar con el giro invertido?
btfsc STATUS,Z
goto Derecha ; Sí, se desea arrancar en ese sentido.
movf TeclaPulsada,W ; Recupera el contenido de la tecla pulsada.
xorlw TeclaParada ; ¿Es la tecla para parar el sistema?.
btfss STATUS,Z
goto Fin ; No es ninguna tecla de movimiento. Sale.
Parado
bcf EnciendeMotor ; Como se ha pulsado la tecla de parada se
bcf ApagaMotor ; desactivan todas las salidas.
bcf Cambiodegiro
bcf ArranqueInv
movlw MensajeParado
goto Visualiza
Adelante
bcf ApagaMotor
bsf EnciendeMotor
bcf Cambiodegiro
bcf ArranqueInv
movlw MensajeEncendido
goto Visualiza
Atras
bcf EnciendeMotor
bsf ApagaMotor
bcf Cambiodegiro
bcf ArranqueInv
movlw MensajeApagado
goto Visualiza
Izquierda
bcf EnciendeMotor
bcf ApagaMotor
bsf Cambiodegiro
bcf ArranqueInv
movlw MensajeArranque
goto Visualiza
Derecha
bcf EnciendeMotor
bcf ApagaMotor
bcf Cambiodegiro
bsf ArranqueInv
movlw MensajeCambio
; Según el estado de las salidas visualiza el estado del sistema en el visualizador LCD y en
; el monitor del ordenador.
Visualiza
movwf MensajeApuntado ; Guarda la posición del mensaje.
call LCD_Borra ; Borra la pantalla del modulo LCD.
movf MensajeApuntado,W ; Visualiza el mensaje en la pantalla
call LCD_Mensaje ; del visualizador LCD.
call RS232_LineasBlanco ; Borra la pantalla del ordenador.
movf MensajeApuntado,W
call RS232_Mensaje ; Lo visualiza en el HyperTerminal.
call RS232_LineasBlanco
Fin return
INCLUDE <RS232.INC>
INCLUDE <RS232MEN.INC>
INCLUDE <LCD_4BIT.INC>
INCLUDE <LCD_MENS.INC>
INCLUDE <RETARDOS.INC>
END
LIBRERÍAS
Se las dejo todas en un link para que si van a probar, incluido el código.
www.mediafire.com/download/appechb5cp08e6j/Codigo+Librerias.rar
-
Imagino que es por que no estas definiendo las constantes en los CBLOCK.
El CBLOCK simplemente asigna constantes. Te doy 2 ejemplos (al lado en comentario pongo el valor asignado):
CBLOCK 0x0C
TeclaPulsada ;0x0C
MensajeApuntado ;0x0D
ENDC
CBLOCK
TeclaPulsada ;0x00
MensajeApuntado ;0x01
ENDC
Si no definis un valor comienza de 0x00. Ahora si miras tus librerias cada una posee un CBLOCK. entonces por ejemplo utilizando el de Retardos.inc y el de LCD_4bits.inc
;Retardos.inc
CBLOCK
R_ContA ;0x00
R_ContB ;0x01
R_ContC ;0x02
ENDC
;LCD_4BITS.INC
CBLOCK
LCD_Dato ;0x00
LCD_GuardaDato ;0x01
LCD_GuardaTRISB ;0x02
LCD_Auxiliar1 ;0x03
LCD_Auxiliar2 ;0x04
ENDC
Entonces ocurre algo muy bueno. Si haces un
MOVLW 0x10
MOVWF LCD_Dato
Estas intentando poner ese 0x10 en el registro con la direccion 0x00, es decir el registro INDF ( que es el de acceso indirecto )
Pero aun mas lindo es que R_ContA y LCD_Dato estan apuntando al mismo registro.
Veo 2 soluciones a esto.
1- Utilizar las directivas del linker para ubicar datos y que sea el linker quien diga donde debe ubicarse. Esto requiere modificar las librerias quitandoles el CBLOCK y poniendo la directiva udata, + poner directivas como CODE, etc. Tal ves es la solucion mas compleja, pero que evita estos problemas.
udata
Var1 res 1
Double res 2
Var2 res 1
2- La otra es que le pongas la direccion a cada uno de los CBLOCK.
la del archivo .ASM incluso esta mal.
Los registros de proposito general comienzan en 0x20 y vos tenes puesto 0x0C
Bueno en ese registro tenes 2 variables que ocuparian las posiciones 0x20 y 0x21
Podes poner a retardos que comienze desde 0x22, tiene 3 registros por lo cual usaria 0x22 0x23 0x24
Y asi con todos los demas. es algo bastante engorroso y haria que si tenes que agregar una variable mas tengas que cambiar todo.
O podes comenzar desde 0x40 para todas las liberias y eso te dejaria espacio para 32 variables de tu programa principal (el cual comenzaria por 0x20) Ejemplo:
;RS232.asm
CBLOCK 0x20
TeclaPulsada ;0x20
MensajeApuntado ;0x21
ENDC
;Retardos.inc
CBLOCK 0x40
R_ContA ;0x40
R_ContB ;0x41
R_ContC ;0x42
ENDC
;LCD_4BITS.INC
CBLOCK 0x43
LCD_Dato ;0x43
LCD_GuardaDato ;0x44
LCD_GuardaTRISB ;0x45
LCD_Auxiliar1 ;0x46
LCD_Auxiliar2 ;0x47
ENDC
Vos elegiras cual es la mas adecuada
-
Ante todo KILLERJC gracias por compartir tu conocimiento y tiempo, si tenias razón era las direcciones del CBLOCK, no obte la otra solución por mi desconocimiento , se han corregido los warnings memoria invalida , arregle algunas cosas pero otras no ,al final les expongo mis soluciones, mis inconvenientes, y mi simulacion.
CAMBIOS HECHOS
------------------------------------------------------------------------------------------
RS232.ASM
CBLOCK 0x21
TeclaPulsada ; Va a guardar el contenido de la tecla pulsada.
MensajeApuntado ; Va a guarda la dirección del mensaje apuntado.
ENDC
------------------------------------------------------------------------------------------
LCD_4BIT.INC
CBLOCK 0x24
LCD_Dato
LCD_GuardaDato
LCD_GuardaTRISB
LCD_Auxiliar1
LCD_Auxiliar2
ENDC
LCD_MENS.INC
-----------------------------------------------------------------------------------------
CBLOCK 0x30
LCD_ApuntaCaracter ; Indica la posición del carácter a visualizar
; respecto del comienzo de todos los mensajes,
; (posición de la etiqueta "Mensajes").
LCD_ValorCaracter ; Código ASCII del carácter a
ENDC ; visualizar.
-----------------------------------------------------------------------------------------
RETARDOS.INC
CBLOCK 0x33
R_ContA ; Contadores para los retardos.
R_ContB
R_ContC
ENDC
-----------------------------------------------------------------------------------------
RS232.INC
CBLOCK 0x37
RS232_ContadorBits
RS232_Dato
ENDC
-----------------------------------------------------------------------------------------
RS232MEN.INC
CBLOCK 0x40
RS232_ApuntaCaracter ; Apunta al carácter a visualizar.
RS232_ValorCaracter ; Valor ASCII del carácter a visualizar.
ENDC
--------------------------------------------------------------------------------------------------------------------------------------------
AL COMPILARLO
----------------------------------------------------------------------
Release build of project `C:\Users\candi\Desktop\Codigo+simulacion+fotos\Codigo+Librerias\RS232.disposable_mcp' started.
Language tool versions: MPASMWIN.exe v5.35, mplink.exe v4.35
Thu Aug 27 12:15:36 2015
----------------------------------------------------------------------
Clean: Deleting intermediary and output files.
Clean: Deleted file "C:\Users\candi\Desktop\Codigo+simulacion+fotos\Codigo+Librerias\RS232.mcs".
Clean: Done.
Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F88 "RS232.ASM" /l"RS232.lst" /e"RS232.err"
Message[302] C:\USERS\CANDI\DESKTOP\CODIGO+SIMULACION+FOTOS\CODIGO+LIBRERIAS\LCD_4BIT.INC 105 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\USERS\CANDI\DESKTOP\CODIGO+SIMULACION+FOTOS\CODIGO+LIBRERIAS\LCD_4BIT.INC 117 : Register in operand not in bank 0. Ensure that bank bits are correct.
Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\mplink.exe" /p16F88 "RS232.o" /z__MPLAB_BUILD=1 /o"RS232.cof" /M"RS232.map" /W /x
MPLINK 4.35, Linker
Copyright (c) 2009 Microchip Technology Inc.
Errors : 0
Loaded C:\Users\candi\Desktop\Codigo+simulacion+fotos\Codigo+Librerias\RS232.cof.
----------------------------------------------------------------------
Release build of project `C:\Users\candi\Desktop\Codigo+simulacion+fotos\Codigo+Librerias\RS232.disposable_mcp' succeeded.
Language tool versions: MPASMWIN.exe v5.35, mplink.exe v4.35
Thu Aug 27 12:15:37 2015
----------------------------------------------------------------------
BUILD SUCCEEDED
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
INCONVENIENTES PROTEUS, Se uso la version 7.7, primero comenzo a salir unos mensajes al simular stack overflow executing call instruction (asi que supuse que se refería a que no estaba poniendo return despues de cada call que hacia , y luego lo volvi a recargar el codigo , dejo de salir estos mensajes , corre la simulacion pero cuando me fijo en los bits que se envian entre el pic y el lcd el RS esta en 0 es en estado control/instruccion cuando este deberia estar en 1 registro de datos , y en el virtual terminal salen muchos caracteres cuando deberia empezar con la palabra Sistema parado, por lo mismo que explique antes. A continuacion les subo en un link la simulacion y codigo + librerias, y fotos de como es que deberia salir y como es que me sale a mi donde les explicare mas
detallado.
LINK :
http://www.mediafire.com/download/bkyc37uvv17xj48/Codigo+simulacion+fotos.rar
-
Bueno, al menos se corrigieron todos los "errores" quedo solo:
Message[302] C:\USERS\CANDI\DESKTOP\CODIGO+SIMULACION+FOTOS\CODIGO+LIBRERIAS\LCD_4BIT.INC 105 : Register in operand not in bank 0. Ensure that bank bits are correct.
Message[302] C:\USERS\CANDI\DESKTOP\CODIGO+SIMULACION+FOTOS\CODIGO+LIBRERIAS\LCD_4BIT.INC 117 : Register in operand not in bank 0. Ensure that bank bits are correct.
Esto es un simple recordatorio que ahi estas modicando registros que estan fuera del banco 0
Eso lo podes quitar poniendole un
errorlevel -302
Esto ya te dice que esta bien escrito. pero no que funcione como deberia
stack overflow executing call instruction (asi que supuse que se refería a que no estaba poniendo return despues de cada call que hacia
Exactamente, ese era el problema.
Te sugiero por ahora es que vayas incstruccion por instruccion en el Proteus, cargando el .cof, de esa forma ver si es que algun valor esta fuera de lugar o se esta cargando/enviando mal.
Yo no tengo el Proteus por el cual no puedo probarlo.
Por otro lado ahora intenta probar solo una libreria por 1. Es decir, proba la del LCD solo, si tenes que recibir datos desde el RS232 directamente ponele unas constantes, es decir rellena al inicio con valores constantes.
La idea es que probes como te dije uno por uno, de esa forma ir eliminando las causas del problema. Sino todo junto es bastante complicado.
EDIT:
Recien acabo de ver algunas cosas mas y tenes mas problemas todavia :), tu RS232 esta realizado por software, esto significa que puede perder muchisimos datos que le lleguen desde la computadora. es algo que vas a tner que cambiar y hacerlo por interrupcion con el modulo de la UART, es decir reformar el codigo de la UART. Al menos no te sirve para algo como lo que estas haciendo.
Hay MAS errores.
TeclaPulsada es un registro, pero que nunca se le asigna un valor, luego lo comparas sin sentido ya que siempre va a valer 0 ( si es que en el reset es 0 ).
Las demas cosas no me fije. Pero en ASM mejor ir probando parte por parte que hacer todo junto. es una Recomendacion que te doy.
-
nuevamente muy agradecido, killerjc, con tu guia, y las increíbles herramientas de seguimiento paso a paso de código que tiene el proteus (ref: libro compilador c y simulador proteus para microcontroladores) , vi que estaba equivocado en los pines de recepción y transmisión , ademas de eso vi otro error como decias el uart se debe reformar ya que cambia de pic a pic. estoy muy agradecido, por todo su conocimiento y ayuda , en lo que pueda compartir con este gran foro estoy dispuesto, si me equivoque en alguna forma de publicar solo les pido que me corrijan soy nuevo, ahora hacer la interfaz y implementar, gracias.
-
No hay problema, cualquier duda que tengas alguien va a tratar de solucionartela en lo posible
-
Gracias por todo el conocimiento, es el foro mas completo sobre micro controladores , ya he terminado mi código 100% sin errores en compilación y también en solucionan corre perfecto, ahora lo estuve haciendo en físico, pero en el lcd no se muestra que haya una comunicación entre la pc y el pic, en los libros micro controladores pic de omar enrique , compilar c de eduardo garcia y el desarrollo de proyectos me dicen que debe haber un voltaje de -12 volts cuando es un alto(1) y un 12+ cuando es un bajo(0) en transmisión,recepcion , o cuando esta en reposo debe haber un voltaje en los pines, lo he medido con mi multitester pero en ninguno de los casos antes mencionados hay voltaje, le he dado muchas vueltas y no doy con la solucion
usb serial macho que les dejo para que lo vean a ver si alguien uso uno de estos para una implementacion o algo similar
LINK DE EL USB-SERIAL QUE ME COMPRE
___________________________________________________________________________________________________________________________________________________________________________________________________
https://www.google.com.pe/search?q=usb+serial+rs232&espv=2&biw=1536&bih=713&source=lnms&tbm=isch&sa=X&ved=0CAYQ_AUoAWoVChMI_8b0uPrPxwIVx6GACh0o9gwG#imgdii=SCqKF2lQfbvX1M%3A%3BSCqKF2lQfbvX1M%3A%3Bno-6KJuIzN1y8M%3A&imgrc=SCqKF2lQfbvX1M%3A ,
Nota : Ya he revisado las conexiones de mi lcd y he probado con otros programas que no tienen comunicacion rs232 y todo esta bien, ademas revise pin por pin los voltajes y mi codigo e interfaz.
-
No creo que tengas mas de 5V a la salida de ese RS232 por que el USB tiene una tension de 5V ( a no ser que exista un elevador de tension el cual no creo ).
Por otro lado vas a tener que verlo con un osciloscopio que permita un captura de disparo unico. o un analizador logico. sino no creo que lo puedas medir con el tester y poder asegurarte.
Tambien debes tener que tener el HW para convertir ese RS232 para que entre en la UART (El circuito mas popular usa un MAX232), con buscar PIC RS232 te van a salir unos cuantos ejemplos/circuitos
-
gracias por responder, Si como dices deberia tener al menos 5 volts como pensaba, que es lo logico para que envie los datos, pero nada 0v, entre tierra y los demas pines, la ultima opción como dices es ir al osciloscopio , lo que no te entendi es hw para converitr ese rs232
para que entre a la uart, estoy usando el integrado RS232 para comunicarlo con mi pic, y de mi cable usb serial que tiene salida macho, le adapte un cable rs232 hembra-hembra, le puse unos cables para ver que la transimision se hiciese pero nada, de ahi solo le deje al cable usb-serial macho conectado a una hembra y de la hembra solde tres cables y lo conecte al rs232, no se si este bien asi la conexion o me estoy equivocando, talvez tiene que ser una conexion rs232 hembra-macho.
Video de donde contrui mi cable rs232 hembra-hembra
-
Lo unico que te interesa son los pines RX / TX y GND , lo que no se si tu conversor USB/RS232 cuando lo convierte usara las señales de -5/+5V o directamente se movera desde 0 a 5V, pero esto es por si el micro necesita algun integrado que convierat los niveles.
Por lo otro que no tenes señal, puede ser por que no se esta enviando nada. Deberias usar un osciloscopio como dije. conectarlo al pin que transmite la PC y observar si esta la señal.
Pienso que es un error de HW (Hardware) o en la conexcion, ya que el programa corre bien en el proteus dijiste. Por ahi suele funcionar mal en fisico cuando estan mal puestos los fuses, pero si decis que lo unico que esta mal es el tema de la recepcion de los datos hay que concentrarse en eso.
-
si estuve revisando bien mi conexión, y es la que estaba fallando, desarme el adaptador usb-rs232 y tenia 7v entre pin de transimision y tierra y 4 aprox entre recepción y tierra, ya lo he solucionado mejorando la soldadura ya que por 1 o 2 dolares para el estaño que le colocan, funciona todo correctamente, gracias por todo igual me sirvió bastante tu guía, ahora bueno solo a hacer la etapa de potencia, y si por ahí les gustaría que dejara mi informe como lo fui construyendo la etapa de potencia, me avisan que con gusto se los subiré. :)