pic 16f877A comunicacion serial

hola soy nuevo, soy estudiante de ing electronica y debo presentar un proyecto asi: dos pics 16f877a con comunicacion serial el primer pic debe tener 4 variables de ADC, el segundo pic tiene un teclado matricial el cual selecciona una de las variables del primer pic y esto debe ser mostrado en el lcd conectado al segundo pic. esto debe ser configurado mediante la usart mi problema es que no se como diseñar los programas para cada uno de los pics seria de gran ayuda si alguien sabe de algun link o tenga un programa con estas caracteristicas, uso el mplab el compilador es el CC5X muchas gracias por su colaboracion.
 
HOLA

En ingenieria Electronica, cuando se diseña, es mas facil hacerlo sin tratar de copiar que hacerlo uno solo realmente !!! creeme !


Por donde tienes empezar es no tratar de encontrarlo hecho en el internet, sino que puedes planear sobre papel cual de tus microcontroladores va a ser el maestro y cual el esclavo.

Tambien vas a escoger cual protocolo inventas tu mismo ! para darle la orden al otro micro que muestre o envie el valor de determinado canal analogo.

cuando ya tengas eso claro sobre papel, entonces inicias programando un micro y lo ensayas con el hyperterminal de tu PC, y simulas que tu puerto serial de tu PC es el otro micro !! y asi cuando le escribas y envias una determinada combinacion de numeros , entonces el otro micro te tiene que responder con otro codigo, acorde a lo que hayas planeado en tu protocolo.

una vez este respondiendo segun lo planeado, entonces programas el otro y lo ensayas con el PC por hyperterminal, cuando ya estes seguro que cada uno recibe y responde bien, entonces ahi si los pones a que charlen elllos dos .

disculpa una pregunta de que universidad eres y en q semestre estas ??? yo tambien soy de colombia , solo es por curiosidad. vas a controlar alguna variable ?

Espero te sirva lo que te escribi.
 
que bueno no se si podras regalarme tu msn o otro tipo de comunicacion lo que pasa es que no hemos aprendido lo del hyperterminal y tengo demasiadas dudas con lo que me estas respondiendo y estudio en la universidad cooperativa de colombia bogota.
gracias
 
yo tambien soy nuevo en este ramo de comunicación serial con PIC's; ya he realizado algunos proyectos con el PIC 16F877 y 877A, pero ahora que tengo que interactuar con la computadora y el puerto serial me enfrento a un nuevom problema.

Ya he intentado hacre puebas con un max 232; y ocurre algo extraño; y es que al conectar los pines del db 9 en los pines de entrada y salida de circuito; me realiza un especie de Loop(entre los pines 2 y 3 del DB9) , aun sin haber conectado el voltaje de la fuente (5V), he realizado varias pruebas y no he tenido exito. Otra cosa rara es que al conectar la tierra comun(pin 5 DB9 a -) (ya no hace el Loop); yningun tipo de comunicación.

La prueba que intento hacer es con un Boot loader que baje desde internet pero aun no puedo pasar al pic sin antes haber solucionado este problema.

Lo que intento hacer es "simple"; solo quiero enviar datos al PIC, que este los muestre por algun puerto cualquiera, y que los devuelva a la computadora.

Algun diagrama me serviria; de preferencia interconexión del max232 y el puerto serie(DB9)
Y al igualalgún codigo fuente para el PIC.

Por su ayuda gracias.
 
Hola!!

Tengo que hacer algo similar a la duda anterior

Resulta que debo hacer una interfaz con el computador en la cual yo envìe una direccion desde un PIC y el PC me arroje un dato. El dato que me envia el pc es una frase, por ejemplo, digito desde el pic mediante un teclado matricial (parte que ya tengo hecha) el código de un disco, y el pc me debe arrojar en nombre del mismo, así, si digito por ejemplo: 256, en esa dirección está ubicado "Nevermind, Nirvana), esa información debe ser arrojada al mircro y este debe mostrarlo en una pantalla LCD.

No he visto cómo hacer interfaces entre el PIC y el PC, así que me encuentro bastante confundida pues no sé como hacer que el pc me arroje el dato cuando yo se lo indique desde el PIC....

Cualquier guìa me puede ayudar demasiado...

Gracias.
 
Si te urge mucho; puedes intentar lo que quieres hacer con el puerto paralelo; que es mucho más sencillo, pero esta más limitado.
Puedes investigar acerca del puerto paralelo; y si te ineteresa usarlo; sí te puedo ayudar con este tema.

Por la necesidad de mi proyecto yo por mi parte; tengo que usar comunicación serial.


Y por lo que puedo ver tenemos un problema similar; así, que si encuentras a alguien que nos pueda ayudar con la comunicación serial lo agradeceré muchísimo.
 
uds tiene que comenzar a entender el puerto serial, es decir lo que yo les recomendaria inicialmente es estudiar la interconexion de dos computadorsa entre si
ambos
conectados por el puerto serial (investiguen interconexion asincrona )

y programan los hyperterminales de cada computdora para ver que envia uno y que recibe el otro. uds pueden enviar facilmente datos , los escriben y van saliendo en la pantalla del otro computador en tiempo real es decir al mismo instanet que oprimen el numero 3 sale el 3 en la pantalla del otro.

cuando uds jueguen un buen rato y experimenten con eso van a poder seguir con el siguiente paso, antes, es dificil porque necesito que comprendan que existen datos ascii, binarios, hexadecimales, que se pueden enviar.
 
Sucede que si necesito el puerto serial... puesto que los pines del 16f877a ya estan bastante limitados en mi montaje, pues tengo conectada la LCD y el teclado matricial... igual, al parecer el complique no está tanto en sacar los datos desde el PC hasta mi PIC, sino lo contrario, del PIC al PC, nadie ha sabido como responder a esa inquietud y la verdad me encuentro bastante colgada de tiempo...
 
"ElChavo" gracias por los consejos, la verdad es que no podiamos comenzar desde cero, por el tiempo limitado, pero nuestro proyecto se basa mas que nada en lograr la interaccion de un sistema informaciónrmatico con uno electronico, y pues como ya la mencioné, el tiempo nos obligo a presentarlo con el puerto serial, los resultados fueron buenisimos, pero el puerto paralelo no satisface todas nuestras necesidades y por tal motivo, seguiremos adelante con la comunicación serial, pero ahora comenzaremos desde cero, tomaremos en cuenta tus consejos y si nos encontramos con nuevos problemas, se los comunicaremos.


"Rockerita09" pues con la parte electronica no te puedo ayudar, pero con la programación si. Por el momento no tengo la información que te puede servir, pero nosotros ya escribimos un programa en C para enviar datos del PIC al PC y viceversa, el problema que tenemos es que la comunicación no es la adecuada, ya que aunque el circuito sobre el que estaba montado el PIC estaba apagado, el puerto serie seguia recibiendo datos. Trataré de buscar el codigo que utilizamos como referencia y el codigo que desarrollamos, tan pronto encuentre la información la voy a adjuntar.

Tengo tambien el programa en Visual Basic (VB), y espero poder enviartelo, tambien espero tengas VB 6.0.

Como ya lo mencione, si logras la comunicación entre el PIC y PC te puedo ayudar a desarrollar el software en VB, en general todo lo que tenga que ver con programación en VB y en C, tepuedo ayudar un poco.
 
Pues les comento que al final, no pude presentar mi comunicación PIC-PC... mi profesor me había dicho que por ahora sólo hiciera una comunicación PIC-PC por medio de Hyperterminal, de tal manera que cuando tecleara un número en el teclado matricial, éste apareciera en la patalla del PC... por más que tratamos no fué posible, teníamos que hacerlo en discreto, no con el protocolo USART del PIC, y estaba bien programado, con su start y su stop bien hecho... pues lo probamos visualizando el dato con un retardo de 1 segundo, para verlo bien... pero al parecer no pudimos sincronizar de manera correcta los tiempos... aún si medíamos los 104 us exactos que se necesitan en el PIC para que el PC reciba a 9600 bps... no fué posible... el MAX232 estaba bien montado, todo perfecto, pero no funcionó...

De todas maneras tengo que presentar lo que dije al principio, pero si me quedó grande esto... no me quiero imaginar cómo será el resto...

Igual agradezco demasiaaado su ayuda, espero me puedan seguir colaborando, sé que esto es más fácil para ustedes....

:D
 
chavos pongan ce a pensar en ves de copiar que hubiera sido de la humanidad si los grandes genios estuvieran esperando a copiar los conocimientos que nos heredaron no es por presumir pero yo tampoco conocia de microprocesadores especial mente en la comunicación serial entre pc y pic y ahora ya estoy haciendo mis primeras pruebas con éxito solo es cuestión se dedicación tengo 3 meses aprendiendo a programar en mi tiempo libre ya que trabajo en una compañía en el área de mantenimiento soy ing. electromecánico. suerte échenle ganas :LOL:
 
Que tal hockenhaim. Para la programación de los pic's te recomiendo mucho la aplicación MicroCodeStudio, en donde trabajas en lenguaje PicBasic Pro. Esto te va a ser de mucha ayuda, ya que te reduce el´número de lineas de código, y hay muchas instrucciones predefinidas que te ayudan con la programación. Ejemplo: LCDOUT "hola". Esta instrucción te envía la cadena de caracteres "hola" a un lcd, que tu con unas cuantas línes de código configuras (número de líneas, puertos para utilizar rs, datos, etc.....). Te recomiendo tambien dos programas muy buenos para simular tus programas de los pics. El primero es el Picsimulator que puedes conseguir en su página como prueba de 30 días, te permite simular con bastas herramientas muchas cosas de variados tipos de pics (te incluye una simulaición de un LCD, etc....). El segundo programa es el proteus de Ares, que entre otras muchas herramientas, te permite simular programas (hex) de pics, armando un circuito como cualquier simulador convencional de circuitos.
Espero y esto te sea de ayuda. Estudio Mecatrónica y ando en el asunto de los pics y la comunicación serial bien a raya. =)
 
Si basicamente es importante crear la programacion a medida de las necesidades yo he realizados bastantes conexiones entre pc pic, pic16f877 programando con PICc y es bastante facil no se si alguna ve programaron con PIC C pero si no pedne intenatr por hay, lo que les recomiendo es generar codigo y probarlo con hiperterminal es la forma mas facil de saber que lo que se esta haciendo funciona o simularlo con proteus un buena herramienta... Ya cambiando d etema tengo una consultica tengo la siguinete situacion: voy a iniciar un proyecto donde una estacion metereologica se conecta a un pc mediante el puerto serial donde esta el software de adminsitracion de los datos, resulta que ellos quieren implementar una comunicacion inalambrica, inicialmente pense en comunicar dos pic mediante un modulo de comunicacion TLP434 y de los micros comunicarlos con max 232 tanto en la base como en el PC, pero me surge la siguiente duda, como conecto en un micro comunicacion serial max232 y modulo de comunicacion si ambos utilizan el puerto TX/RX y los micros que conozco solo tienen un modulo de etos.... grcaias por la ayuda o sugerencias de implementacion que me puedan brindar
 
Estudie Tecnico Electricista hace 22 años. Mis primeras pruebas para entender la comunicación serial fue con la hiperterminal uniendo los pins 2 y 3, lo que tecleas en tu PC se regresa y lo visualizas en pantalla.
Segundo paso escuchas la misma comunicación con un PIC conectando un CI RS232 por supuesto en la union de los pins 2 y 3 que tenia.
Tercero agregar un LCD 2x16 caracteres o similar al PIC para visualizar lo tecleado en el PC.
Cuarto, Quinto, Sesto, Ect, Ect. Y pude comprender el funcionamiento.
*Para ser un buen Ingeniero hay que INGENIAR*
 
Hey!
Saludos Kamaradas!
Aqui solicitando su ayuda, resulta que quiero aprender a usar la comunicación serial con el PIC16F877, ya he investigado bastante, he leido el datasheet del PIC y ya he podido recibir datos del PC al PIC, pero no he podido enviar satisfactoriamente datos del PIC al PC. Estoy haciendo pruebas basicas para envia datos al PC, como el siguiente código el cual según yo envía el dato presente en PORTA al PC cada 1 segundo:

Código:
;---------------------------------------------
List P=16F877
#include<p16f877.inc>
__CONFIG	0X3F71

			org	    0x00
			goto       inicio
			org	    0x05
inicio:		      bsf	   STATUS,RP0
			movlw    0x06		    ; PORTA como entrada
			movwf    ADCON1		; digital
			clrf	      TRISB		; PORTB = 'ssss ssss'

			movlw	  0x0C		; BaudRate a 19200 (Fosc=4MHz)
			movwf	  SPBRG
			movlw	  0x24
			movwf	  TXSTA		; BRGH=1
			bcf	      STATUS,RP0
			bsf	      RCSTA,SPEN

enviar:		    movf	PORTA,W
			movwf	  TXREG
			call	       delay
			goto	    enviar

; Subrutina de tiempo de aproximadamente 1s
delay:		    movlw	0x255
			movwf	    0x20
carga:		    movlw	0x255
			movwf	    0x21
decre:		    nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			decfsz		0x20,F
			goto		decre
			decfsz		0x21,F
			goto		carga
			return

			end

Cuando pruebo el circuito con la hyperterminal (o MatLab) no funciona correctamente, solo me envía datos cada vez que oprimo el Reset, por lo que me da la impresión de que debo limpiar una bandera pero en el datasheet no encuentro nada de eso (sera porque mi nivel de ingles es muy bajo). Así que si alguien me puede echar un cable y revisara mi código y me dijera donde esta la falla se los agradecería mucho, o con alguna pista me conformo. Mientras seguiré buscando/experimentando!
Gracias por leer mi mensaje. Buena Vibra!
 
Soy nuevo en el foro y necesito de la ayuda posible que puedan darme. El problema es lo siguiente: necesito realizar la comunicación pic a pc, estoy manejando el pic 16f877a, sé que tiene un puerto para transmisión serial, que son los pines c7 para RX y c6 para TX, estoy programando en PIC C compiler y aparentemente no hay nada de difícil en la programación, de hecho uso una función llamada fprintf para sacar datos por el puerto, he configurado el puerto serial y le he puesto un "stream", le puse COM1, sin embargo cuando grabo el .HEX en el pic no sale lo que debería, este es mi código, no sé si hay algo mal con ello:

#include "C:\Documents and Settings\Luis Alberto\Mis documentos\Pic 16f877a\Ejemplo 1 Pic C\Ejemplo10.h"

void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=COM1)

// TODO: USER CODE!!
delay_ms(10);
fprintf(COM1,"Instituto tecnologico de Tuxtla Gutierrez");
delay_ms(50);
fprintf(COM1,"Prueba de comunicación");
delay_ms(50);
}

Había probado utilizando la función kbhit, la cual la tenía dentro de un if, y cuando recibiera la primera tecla, mandaba un mensaje, y ahí si funcionó pero el mensaje salía incompleto muchas veces, el código es el siguiente:

while(1)
{
if(kbhit(COM1))
{
fprintf(COM1,"Hola mundo");
delay_ms(1);
}
}

aquí después de que presionaba una tecla, aparecía en el hyperterminal de windows la frase "hola mundo" muchas veces pero a veces la letra "a" no salía, y en su lugar salía otro caracter como "%". Por favor necesito saber que pasa, si hay algo más que deba de configurarse en el puerto serial o tiene que ver el "delay" que le pongo.
 
Me respondo a mi mismo, el detalle de los caracteres raros era que no usaba una misma tierra para los circuitos que estaba usando. Lo que pasa es que ya tenía hecha una tarjeta con un max232 y las conexiones necesarias para el serial de la PC, y tenía aparte en un protoboard el pic y todas las conexiones, pero no compartía la tierra que yo pasaba en el protoboard con la tierra que trae la pc, que es el pin 5 del db9. El código está bien, puedo simular otros puertos seriales y funciona de igual forma. :D
 
Hola, lo que pasa es que nunca sale de la rutina de delay porque se carga la posicion de memoria 0x21 forever. asi que debierashacer estos cambios:
-Donde dice:
; Subrutina de tiempo de aproximadamente 1s
delay: movlw 0x255
movwf 0x20
carga: movlw 0x255
movwf 0x21

cambiar por:
; Subrutina de tiempo de aproximadamente 1s
delay: movlw 0x255
movwf 0x21
carga: movlw 0x255
movwf 0x20

Espero te resulte saludos


Hey!
Saludos Kamaradas!
Aqui solicitando su ayuda, resulta que quiero aprender a usar la comunicación serial con el PIC16F877, ya he investigado bastante, he leido el datasheet del PIC y ya he podido recibir datos del PC al PIC, pero no he podido enviar satisfactoriamente datos del PIC al PC. Estoy haciendo pruebas basicas para envia datos al PC, como el siguiente código el cual según yo envía el dato presente en PORTA al PC cada 1 segundo:

Código:
;---------------------------------------------
List P=16F877
#include<p16f877.inc>
__CONFIG	0X3F71

			org	    0x00
			goto       inicio
			org	    0x05
inicio:		      bsf	   STATUS,RP0
			movlw    0x06		    ; PORTA como entrada
			movwf    ADCON1		; digital
			clrf	      TRISB		; PORTB = 'ssss ssss'

			movlw	  0x0C		; BaudRate a 19200 (Fosc=4MHz)
			movwf	  SPBRG
			movlw	  0x24
			movwf	  TXSTA		; BRGH=1
			bcf	      STATUS,RP0
			bsf	      RCSTA,SPEN

enviar:		    movf	PORTA,W
			movwf	  TXREG
			call	       delay
			goto	    enviar

; Subrutina de tiempo de aproximadamente 1s
delay:		    movlw	0x255
			movwf	    0x20
carga:		    movlw	0x255
			movwf	    0x21
decre:		    nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			nop
			decfsz		0x20,F
			goto		decre
			decfsz		0x21,F
			goto		carga
			return

			end

Cuando pruebo el circuito con la hyperterminal (o MatLab) no funciona correctamente, solo me envía datos cada vez que oprimo el Reset, por lo que me da la impresión de que debo limpiar una bandera pero en el datasheet no encuentro nada de eso (sera porque mi nivel de ingles es muy bajo). Así que si alguien me puede echar un cable y revisara mi código y me dijera donde esta la falla se los agradecería mucho, o con alguna pista me conformo. Mientras seguiré buscando/experimentando!
Gracias por leer mi mensaje. Buena Vibra!
 
Private Sub MSComm1_OnComm()
Dim Com1 As Variant
Dim Contador_A As Integer
Dim Contador_B As Integer
Contador_A = 0
Contador_B = 0
If MSComm1.CommEvent = comEvReceive Then
Com1 = Com1 + MSComm1.Input
Text1.Text = Com1
Select Case Com1
Case "A"
Contador_A = Contador_A + 1
Label20.Caption = Contador_A

Case "B"
Contador_B = Contador_B + uno
Label21.Caption = Time
End Select
End If
End Sub

En el case B puedo ver la hora cada vez que el pic envia un caracter B, si se actualiza, pero cuando recibe "A" no he conseguido incrementar mi contdor y verlo en en label20. Alguin puede apoyarme

GRacias de antemano
 
Atrás
Arriba