Haz una pregunta
  Foros de Electrónica » Temas de Interés » Telemática y Comunicaciones
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

16/03/2016 #121
Moderador

Avatar de D@rkbytes

alejjandro dijo: Ver Mensaje
buenas amigos, estoy aprendiendo a manejar el virtual terminal con el pic 16f877a, conecte el tx del modulo al rx del pic y rx al tx del pic respectivamente como debe ser, hice el programa para que encendiera y apagara un led con valores de 100 para encender y 200 para apagarlo, pero al momento de simularlo en proteus no hace nada el led, copio los valores en la ventana del virtual terminal pero no hace nada, no se si sera un error del simulador o tengo mala la programacion... mas abajo dejo el programa para que me digan si algo esta mal, si me pueden ayudar es para un proyecto de la universidad y se trata sobre domotica

el programa lo realice en proton ide
¿Y cómo envías desde el Virtual Terminal, los números 100 y 200?
Porque no es lo mismo enviar el número 100 como cadena, que como un número entero.

Si desde la terminal RS-232 escribes el número 100, lo envía como tres bytes. "1","0","0"
Y si en el receptor quieres recibir el número 100 como un entero, de esa forma jamás lo identificará.
Todo lo que envías va en ASCII, pero los números enteros se deben procesar de forma diferente.

Y tampoco los puedes recibir de esa forma como cadenas.
O sea que no puedes escribir: If Cadena = "100" Then... Porque sólo se puede recibir y comparar un Byte.

Prueba enviando y comparando una sola letra o símbolo. Por ejemplo "$" o "&"
Y si se pueden recibir cadenas, pero el proceso se realiza de otra forma.
16/03/2016 #122

Avatar de Scooter

Depende del terminal, hay algunos que no envían nada hasta que pulsas un botón. Hay otros que van tecla a tecla.
Luego es cuestión de programar adecuadamente el puerto serie. No es tan difícil aceptar que funcione tecla a tecla o por cadenas
16/03/2016 #123

Avatar de Nuyel

Termite tiene una función para enviar hexadecimal, si al inicio escribes el "0x" el resto de los números los toma como hexadecimal en lugar de caracteres, así que para enviar 100 será 0x64 y para 200 el 0xC8, yo lo uso para esas veces en las que programo comandos en lugar cadenas de caracteres, es bastante útil para pruebas rápidas en lo que programas la interfaz.
16/03/2016 #124


Virtual terminal
ya lo consegui lo que hice fue cambiarle una parte, le puse un valor mayor como si fuera el rango que tiene permitido no entiendo muy bien esa parte pero le cambie esa parte y funciono puse "250" en ves de "50" que tenia antes
Lazo:
HSerIn ""250"",Lazo,[dec LED]

no se como ponerlo para que acepte datos en letras, creo que cambiandole (DEC) pero no se como.

y al momento de mandar los valores por el virtual terminal lo que hago es abrir su ventana durante la simulacion, darle click derecho, pongo las opciones de "echo type charaters" y "hex display mode" este ultimo escribe los datos que introduzco en ASCII, luego introduzco los valores que son (100) seguido de enter y enciende luego (200) y se apaga, a veces se queda pegado pero al transcurrir un rato vuelve a responder

yo la verdad soy nuevo en la programacion, lo que he aprendido lo he sacado de aqui y de otras paginas de internet yo solo, y de ahi veo como agrupo todo el conocimiento pero he aprendido mas asi, que en otro lado
23/03/2016 #125


solicitar dato a traves del modulo bluetooth
hola amigos, necesito ayuda otra ves jeje, sigo con el proyecto de domotica y lo que necesito ahora es solicitar datos a traves del modulo bluetooth, para que asi aparezca en mi telefono la informacion, como por ejemplo leer la temperatura cada ves que lo solicito o en tiempo real.

por favor si me pueden ayudar con esto, si hay algun comando en el que se me pida cierta informacion este la mande o como se pueda, abajo dejo mi programacion, por los momentos es sencillo luego le agrego mas cosas

PROTON IDE
device 16f877a
xtal = 20
all_digital = 1
cmcon = 7
trisb = %00000000
declare hserial_baud = 9600

dim LED as byte
delayms 100
portb = low

Lazo:
hserin 250,lazo,[dec led]

if led = 100 then
portb.0 = 1
end if
if led = 200 then
portb.0 = 0
end if

goto lazo
end
23/03/2016 #126
Moderador

Avatar de D@rkbytes

Saludos.
Cuando usas el modificador "DEC", se convierte la cadena a un número entero, pero la cadena enviada debe contener un espacio en blanco al final.
O sea que en el terminal debes escribir; "100 "
Sin ese espacio al final, la instrucción "HSerIn" omite la recepción, regresando a la etiqueta designada.
23/03/2016 #127


D@rkbytes pero esa parte ya lo lee, cuando mando el 100 y el 200 lee la informacion que entra, lo que yo quiero es enviar información desde el pic al teléfono para que en el teléfono me aparezca la información

Use el comando hserout pero no se usarlo bien soy nuevo en eso
Esa parte de la programacion la puse así:

If dato = 150 then
Hserout [temp]
End if

Esa parte se lo añadí pero no se como es el comando correcto
23/03/2016 #128
Moderador

Avatar de D@rkbytes

Bueno, eso ya es otra historia.
Necesitas crear una aplicación para el teléfono, y que reciba los datos que envías por Bluetooth.
No es nada complicado. Yo uso B4A (Basic For Android)

Y dependiendo de como envíes la información, es como la debes procesar en la aplicación.
Recuerda que no es lo mismo procesar cadenas que números enteros, aunque ambos se envíen en ASCII.
12/05/2016 #129


problemas con conexion bluetooth y pic 16f628a
Justiciero24, hermano, oye no me deja el código, mi pic esta un poco raro en otro foro vi que tenian el mismo problema de conexion con el pic, el mio dejo de funcionar y alguien subió un archivo Hex para que funcione y efectivamente si parpadea mi led con ese .HEX (lo adjunto) pero si yo lo programo con mi microcode y mi quemador "pic master 2"(tableta) y el (software) del pic master es el "pic kit2" no me hace parpadear mi led

me podrías ayudar de favor?

Ya intenté con tu código y efectivamente SI indica que el pic vive con su led pero de ahí en fuera NO HACE NADA MAS. :(
en mi app que hice para android (la adjunto) envío 1byte number "1" para encender y otro bytenumber para apagar "2" y en tu programa le modifique el 100 a 1 y el 200 a 2

Saludos!

Justiciero24 dijo: Ver Mensaje
Haber intenta esto a ver que pasa:

Código:
*******************************************************************************
' DEFINICIÓN DE FUSES Y OSILADOR
DEFINE OSC 4
'*******************************************************************************
CMCON = 7                     
TRISA = %00000000
TRISB = %00000010
'*******************************************************************************
' INICIALIZANDO USART
DEFINE HSER_BAUD 9600
DEFINE HSER_RCSTA 90h
DEFINE HSER_TCSTA 20h
DEFINE HSER_SPBRG 25
led var byte
'*******************************************************************************
PORTA = %00000000
PORTB = %00000000
'******************************************************************************
pause 200
inicio:
Hserin 80,continuar,[led]
continuar:
if led = 100 then
PORTB.0 = 1
pause 500
endif
if led = 200 then
PORTB.0 = 0
pause 500
endif
goto inicio
END
A lo que entiendo Hserin esta estructurado asi: Hserin tiempo en ms antes de saltar a, etiqueta del salto, (variable donde se guarda lo recibido)

Y otra cosa en lugar de usar valores, usa las letras cuando envies los datos ya que aveces se envian en ascii y no en decimal lo que provoca que no responda el pic. Si no me equivoco el 100 equivale a una "d" y el 200 a un "È" tambien puedes poner letras en los if, por ejemplo: if led = "A" then....

Saludos, espero haberte ayudado
Archivos Adjuntos
Tipo de Archivo: rar TEST1.rar (262 Bytes, 13 visitas)
Tipo de Archivo: rar domotica(1).rar (1,33 MB (Megabytes), 12 visitas)
01/12/2016 #130

Avatar de ruben90

Acudo a ustedes por una duda. Como enviar 4 bytes (32 bits) consecutivos sin utilizar librerías por el PIC? osea, como puedo enviar la palabra "HOLA" sin librerías? y en lenguaje C? No se si pido mucho

En mikroC se utiliza la librería UART1_Write_Text("HOLA"), pero sin ella como sería? Como lo harían en CCS o ensamblador?

Yo puedo enviar 1 byte a la vez sin librerías utilizando el TMR0 y los registros del modulo UART. Algo así,

Código:
while (1) {
numero=25; 
if(TRMT==1 && segundo>=1) { //Si el registro de envió esta vació, cada segundo
TXREG=numero;               //cargar y enviar el numero,
while(!TRMT);               //espera que se vacié el registro para
segundo=0;                  //salir de la sentencia...
}
}
01/12/2016 #131

Avatar de Nuyel

Lee la hoja de datos, enviar un byte solo es escribirlo en el registro de salida del USART, claro, previamente tener configurado el puerto, luego, de la forma fácil hacer polling en el bit de estado para saber cuando esta libre el registro y escribir el siguiente dato.
01/12/2016 #132

Avatar de Scooter

Mejor usar las interrupciones que se inventaron para eso
01/12/2016 #133

Avatar de TRILO-BYTE

pues digamos que tenemos un ARRAY o STRING

char *cadena="pajaro";

la cadena mide la longitud mas el caracter nulo

yo diria que si haces una funcion de enviar un caracter digo CCS envia un caracter con putc();

lo que debes hacer es meterlo dentro de un while cuando encuentre nulo

while(cadena[i]!='\0')
{
//funcion para enviar 1 byte
//podria ser putc(); o enviar directamente con el registro UART
i++;
}
01/12/2016 #134

Avatar de ruben90

Nuyel, mi código hace exactamente eso. Comprueba que el bit TRMT esté vacío para poder cargar el nuevo dato. Scooter, eh probado de las dos formas, con la librería delay, con el Timer0 como temporizador, con y sin interrupciones y el resultado es el mismo, un byte a la vez.

Trilo-byte, eh leído sobre lo que comentas, de hecho utilizó la función strncan() para unir dos o más variables del tipo string y guardarlas en otra variable independiente pero el resultado es el mismo. Lo que aún no entiendo es cómo descomponer esa variable para enviarla byte por byte.

Algo como,
1. Variable tipo char[]="HOLA";
2. Identificar byte por byte, "H", "O", "L", "A".
3. Aplicar una sentencia FOR o WHILE para enviar byte por byte por el puerto serial.
4. No hay más caracteres.
5. Fin de la sentencia, deshabilita envío de datos.
6. Espera nuevo carácter...
01/12/2016 #135
Moderador

Avatar de D@rkbytes

ruben90 dijo: Ver Mensaje
Lo que aún no entiendo es cómo descomponer esa variable para enviarla byte por byte.

Algo como:
1. Variable tipo char[]="HOLA";
2. Identificar byte por byte, "H", "O", "L", "A".
3. Aplicar una sentencia FOR o WHILE para enviar byte por byte por el puerto serial.
4. No hay más caracteres.
5. Fin de la sentencia, deshabilita envío de datos.
6. Espera nuevo carácter...
Seguramente esta rutina te puede servir: entero_a_bcd
01/12/2016 #136

Avatar de TRILO-BYTE

no se que quieres hacer exactamente.

como dije tenemos una cadena "string" y lo queremos mandar byte a byte.

char *cadena="David Castillo 123";


y lo que quiero hacer es eviar letra a letra recuerda que los numeros son tambien letras.

para eso como dije en mi ejemplo anterior:


i=0; iniciamos i en 0
while(cadena[i]!='\0') // '\0' es caracter nulo es decir cuando llegue a caracter nulo
{
putc(cadena[i]); // enviara letra a letra
i++; //incrementamos i
}

terminado el bucle while puedes hacer lo que tienes que hacer, muy simple
02/12/2016 #137


D@rkbytes, hermano me puedes apoyar de favor? programo en Microcode, pero al parecer no me deja activar los fuses, me dice que es ilegal la declaración de fuses. Desconozco si es mi Programa que le faltan librerias, el punto es que antes si podía programar sin nigun problema, después intenté agregarle fuses y desde ahí se desconfiguró todo, el pic que más ocupo es el PIC16F628A y mi programador es un pic master 2, que es exactamente lo mismo que el pic kit2 de microchip.
Ahora que quiero programar mi pic 16F628A si se escribe el programa pero no hace absolutamente nada.
probé con un pic 12F508 y 509 y si se programa, ya compré otro 16F628A y nada :( :( :( :(

Me podrías ayudar por favor? en serio es mi dolor de cabeza
02/12/2016 #138
Moderador

Avatar de D@rkbytes

Si publicas tu programa, probablemente encontremos el problema.
03/12/2016 #139


D@rkbytes Claro! te adjunto ambas imagenes, la primera es mi version y el programa que le grabo al pic, y la segunda es el error de fuses, ambas si se las grabo al pic, hace exactamente lo mismo, NADA :(
Imágenes Adjuntas
Tipo de Archivo: jpg micro.jpg (38,7 KB (Kilobytes), 8 visitas)
Tipo de Archivo: jpg u2.jpg (44,2 KB (Kilobytes), 8 visitas)
03/12/2016 #140
Moderador

Avatar de D@rkbytes

Usa esta parte cómo base para tu programa:
Código PHP:
;*******************************************************************************
Device PIC16F628A    Microcontrolador utilizado
Palabra de configuración:
Device INTRC_OSC_NOCLKOUTWDT_OFFPWRT_ONBOD_OFFLVP_OFF
;*******************************************************************************
Define OSC 4                Definir que se trabajará con 4MHz.

Inicio:
    
CMCON 7                Comparadores analógicos OFF

Programa
:
    ; 
Aquí va tu programa...

    GoTo    
Programa


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

Buscar más temas sobre:
Lupa Telemática y Comunicaciones

Todo lo relacionado con los Sistemas de Telecomunicación, la Transmisión de Datos y las Redes de Computadores.

Cerrar
Foros de Electrónica » Temas de Interés » Telemática y Comunicaciones

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