Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

01/11/2012 #41
Moderador

Avatar de D@rkbytes

Saludos willyfv
willyfv dijo: Ver Mensaje
Saludos, gracias por el gran aporte que has hecho
De nada. Espero que te sea de utilidad.
willyfv dijo: Ver Mensaje
tengo varias dudas:
* ¿es posible trabajar el asm del primer ejemplo que has colocado a 8 mhz?
En ese ejemplo se uso un PIC16F628A usando el oscilador interno a 4MHz, que es su frecuencia de trabajo.
Nota que se usaron los pines predeterminados del oscilador como salidas.

Para trabajar el mismo ejemplo a 8MHz. Tendrías que cambiar el PIC por un PIC16F88
Solo que cambia la configuración de pines.
Este PIC si puede trabajar con oscilador interno a 8MHz ó puedes utilizar otro PIC.
También tienes que hacer cambios en la configuración del registro SPBRG cambiando...
movlw 0x19 ; 9600bps a 4MHz.
movwf SPBRG
Por...
movlw 0x33 ; 9600bps a 8MHz.
movwf SPBRG
Y modificar la rutina de retardo de 100Ms. Que esta calculada para funcionar a 4MHz. Para que funcione a 8MHz.
Para la configuración de los registros del módulo USART puedes usar el programa SPBRG Calculator

willyfv dijo: Ver Mensaje
* ¿los datos enviados en formato hexadecimal desde visual basic lo puedo grabar en una eeprom 24lc256?
Los números no son enviados al PIC en formato hexadecimal sino en formato ASCII
Si yo le quiero mandar el número 128 al PIC, lo que se le debe mandar es el caracter
Ó Para enviarle el número 255, lo que se le manda es el caracter ÿ
willyfv dijo: Ver Mensaje
¿como puedo hacer que esos datos en hexadecimal se graben en la eeprom?
Para eso necesitas establecer comunicación con la EEPROM 24LC256 utilizando el protocolo I²C
Esto ya se sale del tema, pero ejemplos para trabajar con PIC y memorias EEPROM I²C hay muchos.

Espero te sirva la información.

Suerte.
01/11/2012 #42


gracias por tu respuestas


la idea es usar el mismo 16f628a ya que tengo varios disponible

*******************
movlw 0x19 ; 9600bps a 4MHz.
movwf SPBRG

Por...
movlw 0x33
; 9600bps a 8MHz.
movwf
SPBRG

aclarado,gracias


**************


Los números no son enviados al PIC en formato hexadecimal sino en formato ASCII Si yo le quiero mandar el número 128 al PIC, lo que se le debe mandar es el caracter Ó Para enviarle el número 255, lo que se le manda es el caracter ÿ

ya esta parte de aqui ya la domine

***************

para la eeprom ya estoy estudiando

*******



gracias por aclararme las dudas
17/01/2013 #43


un saludo a todos, tengo un problema, ojala alguien me pueda ayudar. recién estoy aprendiendo a utilizar el puerto serial, tal vez me salga un poco del tema por que estoy usando CCS. mi problema es al momento de simular en proteus y el hyperterminal (eh usado Virtual Serial Port Driver), al momento de darle play a la simulación me sale el pantallazo azul y se reinicia. les dejo el archivo, y gracias de antemano por ayuda. me base en esta ejemplo http://robotypic.blogspot.com/2010/0...pc-por-el.html
Archivos Adjuntos
Tipo de Archivo: rar pruebas.rar (44,5 KB (Kilobytes), 56 visitas)
18/01/2013 #44
Moderador

Avatar de D@rkbytes

oscarintintin dijo: Ver Mensaje
un saludo a todos, tengo un problema, ojala alguien me pueda ayudar. recién estoy aprendiendo a utilizar el puerto serial, tal vez me salga un poco del tema por que estoy usando CCS. mi problema es al momento de simular en proteus y el hyperterminal (eh usado Virtual Serial Port Driver), al momento de darle play a la simulación me sale el pantallazo azul y se reinicia. les dejo el archivo, y gracias de antemano por ayuda. me base en esta ejemplo http://robotypic.blogspot.com/2010/0...pc-por-el.html
Saludos.
Revise tu programa y no encontré problemas, solo lo adapte un poco para probarlo con la interfaz que diseñe.
También lo probe con el HyperTerminal, y funciono bien.
El único detalle que encontré, fue en el diseño de la simulación.
En el programa estableces una velocidad de reloj de 20MHz. Pero al PIC de la simulación lo dejaste en 1MHz.
También agregue unos Switch's y cambie el puerto del COMPIM al puerto COM2,
para utilizar el puerto virtual COM3 en las pruebas con la interfaz y el HyperTerminal.

Así que no sé a que se deba lo del pantallazo azul que mencionas. A mi me funciono sin problemas.
No mencionas que es lo que se reinicia, me supongo ha de ser tu computadora.

Adjunto los gráficos durante las pruebas y el programa con las modificaciones como lo adapte.
Para visualizar la información con el HT, solo es cuestión de acomodar espacios entre palabras.

PD. Dentro de la carpeta se encuentra el archivo *.HT de la prueba con el HyperTerminal.

Suerte.
Imágenes Adjuntas
Tipo de Archivo: gif HT_Prueba_001.gif (18,6 KB (Kilobytes), 42 visitas)
Tipo de Archivo: gif SPCTRL_Prueba_001.gif (20,3 KB (Kilobytes), 51 visitas)
Archivos Adjuntos
Tipo de Archivo: rar prueba II.rar (45,5 KB (Kilobytes), 117 visitas)
18/01/2013 #45

Avatar de digito

oscarintintin dijo: Ver Mensaje
un saludo a todos, tengo un problema, ojala alguien me pueda ayudar. recién estoy aprendiendo a utilizar el puerto serial, tal vez me salga un poco del tema por que estoy usando CCS. mi problema es al momento de simular en proteus y el hyperterminal (eh usado Virtual Serial Port Driver), al momento de darle play a la simulación me sale el pantallazo azul y se reinicia. les dejo el archivo, y gracias de antemano por ayuda. me base en esta ejemplo http://robotypic.blogspot.com/2010/0...pc-por-el.html
Hola he comprobado todo y funciona perfectamente, la pregunta es que Versiòn de Proteus utilizas para
tus pruebas ?
20/01/2013 #46


utilizo la versión 7.7 SP2 de proteus.He probado ahora en una maquina virtual XP, pensando que el error podría ser que tengo windows 7 de 64 bits, y al igual que en la maquina normal me bota el pantallaso azul y se reinicia el equipo. gracias por su colaboracion.
21/01/2013 #47

Avatar de digito

Respuesta a Versiòn de Proteus (Visual Basic)
Entonces los problemas pueden ser DOS(2), esto sucede cuando se generan los puertos virtuales con ELTIMA los cuales uno de los puerto virtual ocupa la misma direcciòn de un puerto fisico real (verificar en la gestiòn de dispositivo), y la otra sì el sistema operativo que deberìa ser a 32bit no totalmente compatible con Proteus 7.7 sp2 (la versiòn de este ultimo es correcta).


*** Atenciòn con Virus *** Muchos Saludos y espero che la informaciòn te sirva.

---------- Actualizado después de 2 minutos ----------

Aquì està un ejemplo de conflicto de puerto Serial "COM"
Imágenes Adjuntas
Tipo de Archivo: jpg FE_2013.jpg (55,5 KB (Kilobytes), 26 visitas)
23/01/2013 #48


Sigo sin poder solucionar el problema, lo que me indico Digito, no están ocupando la misma dirección (imagen error1).
El error que me arroja el pantallazo azul es : ATTEMPTED_SWITCH_FROM_DPC USBPORT.SYS les dejo la foto de la pantalla azul tal vez puedan brindarme una mano. Gracias¡
Imágenes Adjuntas
Tipo de Archivo: jpg error.jpg (168,3 KB (Kilobytes), 15 visitas)
Tipo de Archivo: jpg error2.jpg (90,0 KB (Kilobytes), 9 visitas)
23/01/2013 #49

Avatar de digito

Hola, tenès una periferica USB (MODEM) instalada que te da ese problema, en general ese tipo de problema aparecìa en XP SP1, sin embargo es incompatible con el sistema operativo que tenes.

Consejo: Si podes instalar un S.O. a 32Bit mejor (no hay muchos driver todavia compatibles a 64Bit),
Actualizar los Driver Chipset de la placa madre... !!! Atenciòn a la periferica USB utilizada y su Driver (sobre todo Modem). Muchos Saludos, tenemos Horarios diferentes (almeno 4 o 5 Horas adelante aquì).

BUONA FORTUNA
24/01/2013 #50


solo para informales, eh instalado otro SO (XP sp3), dicho sea de paso a dado algunos problemillas en la instalacion debido a que mi disco es sata. Resultados, los mismos pantallaso azul, tal vez el error este al momento de crear los puertos virtuales o sera el proteus(7.7)?

---------- Actualizado después de 36 minutos ----------

Listo, la falla era el virtual serial port drive7, eh utilizado virtual serial port drive 6 para XP y funciona correctamente, la 6.9 debe funcionar en win7-64bits, pero no lo eh podido probar ya que se me vencio el tiempo del demo; pero e utilizado Advanced virtual com port wn win7-64bits y todo okey. gracias por su colaboracion
25/01/2013 #51

Avatar de digito

Hasta la Proxima y muchas suerte, un gracias a D@rkbytes y a toda esta gran Comunidad.
19/11/2013 #52


Buenas tardes, tengo una consulta que hacerles, estoy modificando el programa para crear una interfaces de comunicación con el PIC en VB6, omití mucha parte del código solo me quede con el menú de conexiones del los puertos COM, el menú del conector DB9 el acerca de y el Ontop (casi todo jaja), bueno lo que quiero hacer es monitorear 12 datos constantes que son enviados por un PIC 16f887 provenientes de sus puertos ADC, los cuales ocultaran unas imagenes dependiendo si el rango sobrepasa al establecido. aca pongo imagenes para ver si se entiende mejor el problema !

Este es mi codigo.

Código PHP:
#include <16F887.h>
#device *=16                    // Mejora el uso de memoria ROM
#Fuses XT, NOWDT
//#device ADC=10
#Use Delay(Clock=4 000 000)
#include <lcd.c>
#Use rs232(baud=9600, xmit=pin_c0, rcv=pin_c1)
#byte puerto_b = 06

char  espacio=13;
long dato[12]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int i=0;

void main(){

   
delay_ms(200);

  while(
i<12){
       
setup_ADC_portsALL_ANALOG );   ///Todos los puertos analogos a0-e2
       
setup_ADC(ADC_Clock_Div_32);  ///Configuras la velocidad de muestreo
       
       
set_adc_channel(i);   //lee canal 1
       
delay_ms(10);
       
dato[i]=read_ADC();      
       
delay_ms(20);
       
printf("%x %c ",dato[i],espacio);
       
delay_ms(50);
       
i++;
if(
i>=12){
i=0;
}
}



lo que quiero hacer hacer algo asi.

led=com.input

if led >= 0xE1 then
img_r_01.visible = false
img_v_01.visible = true
else if led <= 0xD5 then
img_r_01.visible = true
img_v_01.visible = false
end if

pero asignarle una variable a cada dato leido por el puerto rs232 el problema es que no entiendo mucho de vb6 ni del manejo de este, estoy leyendo acerca del manejo de eventos para este puerto pero no e logrado nada.

de antemano gracias por su ayuda.
20/11/2013 #53
Moderador

Avatar de D@rkbytes

Saludos luis30.
Mira si el ejemplo que adjunto es más o menos lo que quieres hacer.
Si no es así, será necesario que adjuntes tu proyecto completo y nos expliques mejor que es lo que realmente deseas hacer.

Suerte.
Archivos Adjuntos
Tipo de Archivo: rar Programas VB6 y PICC.rar (117,6 KB (Kilobytes), 84 visitas)
21/11/2013 #54


Gracias por tu ayuda !, bueno no es exactamente lo que busco, pero mira ya avance algo el proyecto batalle mucho para lograrlo pero ya tengo mas o menos la idea de como funciona el puerto ahora lo que quiero hacer es reducir esto:

Código PHP:
If (sNum "+"Then
 img_v_0
.Visible False
 img_r_0
.Visible True
 End 
If

 If (
sNum "-"Then
 img_r_0
.Visible True
 img_v_0
.Visible False
 End 
If

 If (
sNum "="Then
 img_r_0
.Visible False
 img_v_0
.Visible True
 End 
If

If (
sNum1 "+"Then
 img_v_1
.Visible False
 img_r_1
.Visible True
 End 
If

 If (
sNum1 "-"Then
 img_r_1
.Visible True
 img_v_1
.Visible False
 End 
If

 If (
sNum1 "="Then
 img_r_1
.Visible False
 img_v_1
.Visible True
 End 
If 
a algo como esto:
Código PHP:
For 0 To 11
If (sNum[i] = "+"Then
 img_v_ 
[i].Visible False
 img_r_ 
[i].Visible True
 End 
If

 If (
sNum[i] = "-"Then
 img_r_ 
[i].Visible True
 img_v_ 
[i].Visible False
 End 
If

 If (
sNum[i] = "="Then
 img_r_ 
[i].Visible False
 img_v_ 
[i].Visible True
 End 
If
 
Next i 
pero no funciona creo que mi lógica no es la correcta :/!, tratare de subir el proyecto, lo que pasa es que no tengo mi pc y me meto al foro desde el trabajo pero así resolví el problema bueno resolví a medias.

Código PHP:
Private Sub Prueba(com As MSComm)
Dim a As Long
Dim BufferIn 
As String
Dim sNum1
sNum3sNum5sNum7sNum9sNum11sNum13 As String
Dim sNum
sNum2sNum4sNum6sNum8sNum10sNum12conv As String
Dim Rc 
As String
Dim i 
As Byte


0
Rc 
Chr(13)
com.InBufferCount
BufferIn 
com.Input

sNum 
Mid(BufferIn11)
sNum1 Mid(BufferIn21)
sNum2 Mid(BufferIn31)
sNum3 Mid(BufferIn41)
sNum4 Mid(BufferIn51)
sNum5 Mid(BufferIn61)
sNum6 Mid(BufferIn71)
sNum7 Mid(BufferIn81)
sNum8 Mid(BufferIn91)
sNum9 Mid(BufferIn101)
sNum10 Mid(BufferIn111)
sNum11 Mid(BufferIn121)
'sNum12 = Mid(BufferIn, 13, 1)
'
sNum13 Mid(BufferIn141)
conv Mid(BufferIn112)

If (
conv "============"Then
img_v_0
.Visible True
img_v_1
.Visible True
img_v_2
.Visible True
img_v_3
.Visible True
img_v_4
.Visible True
img_v_5
.Visible True
img_v_6
.Visible True
img_v_7
.Visible True
img_v_8
.Visible True
img_v_9
.Visible True
img_v_10
.Visible True
img_v_11
.Visible True
End 
If

'Esto es lo que quiero resolver o acortar 
For i = 0 To 11
 If (sNum = "+") Then
 img_v_ [i].Visible = False
 img_r_ [i].Visible = True
 End If

 If (sNum = "-") Then
 img_r_ [i].Visible = True
 img_v_ [i].Visible = False
 End If

 If (sNum = "=") Then
 img_r_ [i].Visible = False
 img_v_ [i].Visible = True
 End If
 
Next i 
Espero que se entienda mejor con el código y gracias de antemano
21/11/2013 #55
Moderador

Avatar de D@rkbytes

Yo optaría por usar un Select Case como lo hice en el ejemplo del post #64.
Se me ocurre que es más fácil hacerlo de esa forma, y no comprendo para que usas un bucle.
Espero que cuando subas tu proyecto nos expliques bien que es lo que quieres hacer.

Saludos.
30/11/2013 #56

Avatar de oFRGOo

Gracias por el aporte
Hola y gracias a todos por los aportes y versiones que suben, yo tengo una duda que capas me puedan ayudar sobre la comunicación serial entre pic, en el archivo que les envió esta un pic enviando datos por todo un puerto, ¿se podría habilitar mas de un puerto de entrada para que me reciba mas que un puerto de salida?
Imágenes Adjuntas
Tipo de Archivo: jpg serial pic.jpg (295,8 KB (Kilobytes), 30 visitas)
Archivos Adjuntos
Tipo de Archivo: zip comuncacion serial pic.zip (27,3 KB (Kilobytes), 58 visitas)
30/11/2013 #57
Moderador

Avatar de D@rkbytes

oFRGOo dijo: Ver Mensaje
¿se podría habilitar mas de un puerto de entrada para que me reciba mas que un puerto de salida?
Busca en la ayuda de CCS sobre los parámetros de #USE RS232 (options)
Verás que existe un elemento llamado STREAM al cual se le dá un identificador para el puerto RS-232.
De esa forma puedes tener varios pines de entrada y salida serial por software.

Saludos.
01/12/2013 #58

Avatar de oFRGOo

Ok gracias, D@rkbytes ahora lo busco..a ver como me va.
10/12/2013 #59


oFRGOo dijo: Ver Mensaje
Hola y gracias a todos por los aportes y versiones que suben, yo tengo una duda que capas me puedan ayudar sobre la comunicación serial entre pic, en el archivo que les envió esta un pic enviando datos por todo un puerto, ¿se podría habilitar mas de un puerto de entrada para que me reciba mas que un puerto de salida?
Hola mira lo puedes manejar asi..

#use rs232(baud=9600, xmit=PIN_B1,rcv=PIN_B2, stream=CANAL1)
#use rs232(baud=9600, xmit=PIN_A2,rcv=PIN_A3, stream=CANAL2)
#use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7, stream=CANAL3)

fprintf(CANAL2,"Hola mundo");

Oviando que puedes imprimir por cualquiera de los canales seleccionados cambiando al canal que quieras, espero te sirva !.

D@rkbytes perdón por no contestar no había podido entrar y pues sigo en ratos con este proyecto, mira te adjunto mis avances para ver si me puedes tirar una mano, el problema que tengo es que manejo 13 datos, el puerto mscomm se activa hasta que los 13 datos son recibidos pero mi programa manda datos cada 50ms es decir que 50x12ms es el tiempo que tarda entre ciclo y ciclo por lo cual en ocasiones el programa me da lecturas erróneas al no saber como manejar la recepción de datos correctamente :/! e intentado de varias formas pero la que mejor me a funcionado es esta aun que lleva un poco de retrasos al tiempo real de medida me funciona 3 mediciones de 5, y en ocasiones el PIC no acepta la instrucción enviada.

Espero le puedas echar un vistazo xD!! gracias!!
Archivos Adjuntos
Tipo de Archivo: rar Tester.rar (717,7 KB (Kilobytes), 58 visitas)
11/12/2013 #60
Moderador

Avatar de D@rkbytes

luis30 dijo: Ver Mensaje
el problema que tengo es que manejo 13 datos, el puerto mscomm se activa hasta que los 13 datos son recibidos pero mi programa manda datos cada 50ms es decir que 50x12ms es el tiempo que tarda entre ciclo y ciclo por lo cual en ocasiones el programa me da lecturas erróneas al no saber como manejar la recepción de datos correctamente :/! e intentado de varias formas pero la que mejor me a funcionado es está, aunque lleva un poco de retrasos al tiempo real de medida me funciona 3 mediciones de 5, y en ocasiones el PIC no acepta la instrucción enviada.
Prueba cambiando la frecuencia de trabajo del microcontrolador, por ejemplo con los 8MHz del oscilador interno y si puedes utilizar un cristal de 20MHz también puedes aumentar la velocidad de transmisión.
Con 4MHz en ocasiones no es apto para trabajar a 9600bps y suelen enviarse datos erróneos.

luis30 dijo: Ver Mensaje
Espero le puedas echar un vistazo
Revisé tus programas para el PIC, pero como carecen de comentarios en la mayor parte de las rutinas, es muy difícil saber que es lo que hacen.
Tampoco se sabe de que se trata tu proyecto ni que es lo que quieres hacer.

Saludos.
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.