|
33
|
Informática / Electrónica / Re: Hacer un capturador de datos (Data Logger) con PIC
|
en: 7 Enero 2011, 03:16 am
|
Estimado Meta:
Me encuentro en estos momentos desarrollando un proyecto para mi titulación y tiene que ver con lo que estás comentando.
Se trata de diseñar e implementar un sistema de control y monitoreo de un plantel mediante la PC.
El protocolo que decidí utilizar es el RS485 debido a su gran inmunidad a las interferencias, ya que funciona con señales diferenciales (las interferencias se cancelan).
El microcontrolador que estoy utilizando es el PIC16F877A, pero sin memoria externa. El sistema siempre estará activo, pero sólo se capturarán datos cuando la PC así lo requiera.
Por supuesto que estoy dispuesto a colaborar con tu propuesta. Espero que podamos aclarar muchas dudas y hacer algo muy educativo.
Hasta la próxima.
|
|
|
34
|
Programación / Programación Visual Basic / Re: [Reto] Zip Zag
|
en: 3 Enero 2011, 00:11 am
|
¡Mil disculpas!:
Llámenme ignorante si quieren, pero entendí absolutamente nada sobre el reto. ¿Me lo pueden explicar con peras y manzanas, por favor?
Gracias por su atención.
P.D: ¿Por qué se llama zig-zag?
|
|
|
35
|
Programación / Programación Visual Basic / Re: [RETO] Alternativa a Instr()
|
en: 1 Enero 2011, 04:29 am
|
Saludos: Aquí les dejo una mejora (creo) del código de raul338. La he llamado Ratok338InStr: Private Function RaTok338InStr(ByVal Start As Long, ByVal s1 As String, ByVal s2 As String) As Long Dim pos1 As Long, long1 As Long, long2 As Long, lim As Long, c As String
If Start And &H80000000 Then Start = -Start long1 = Len(s1) long2 = Len(s2) If long1 = 0 Or long2 = 0 Or Start > long1 Or Start = 0 Or long2 > long1 Then RaTok338InStr = -1 Exit Function End If lim = long1 - long2 + 1 c = Mid(s2, 1, 1) For pos1 = Start To lim If Mid(s1, pos1, 1) = c Then If Mid(s1, pos1, long2) = s2 Then RaTok338InStr = pos1 Exit Function End If End If Next End Function Hasta la próxima.
|
|
|
36
|
Programación / Programación Visual Basic / Re: [RETO] Alternativa a Instr()
|
en: 1 Enero 2011, 00:34 am
|
Hola, gente: Aquí dejo mi aporte: Private Function strinstr(ByVal start As Long, ByVal s1 As String, ByVal s2 As String) As Long Dim pos1 As Long, pos2 As Long, long1 As Long, long2 As Long
long1 = Len(s1) long2 = Len(s2) pos2 = 1 For pos1 = start To long1 If Mid(s1, pos1, 1) = Mid(s2, pos2, 1) Then pos2 = pos2 + 1 If pos2 > long2 Then strinstr = pos1 - long2 + 1 Exit Function End If Else pos2 = 1 End If Next End Function ¡Feliz Año!
|
|
|
37
|
Informática / Electrónica / Re: Introduccion a la programacion de PICS en lenguaje C (CCS)
|
en: 31 Diciembre 2010, 23:00 pm
|
vetealdemonio: La verdad me da flojera revisar la librería del teclado de CCS. Mejor te pongo una que me elaboré para no tener problemas a la hora de modificar. /***************** teclado.h ******************/ #byte PORTA = getenv("sfr:PORTA") #byte TRISA = getenv("sfr:TRISA")
#byte PORTB = getenv("sfr:PORTB") #byte TRISB = getenv("sfr:TRISB")
#byte PORTC = getenv("sfr:PORTC") #byte TRISC = getenv("sfr:TRISC")
#byte PORTD = getenv("sfr:PORTD") #byte TRISD = getenv("sfr:TRISD")
#byte PORTE = getenv("sfr:PORTE") #byte TRISE = getenv("sfr:TRISE")
/***************************************/ #define PORT_fila0 PORTC #define TRIS_fila0 TRISC #define fila0 0
#define PORT_fila1 PORTC #define TRIS_fila1 TRISC #define fila1 1
#define PORT_fila2 PORTC #define TRIS_fila2 TRISC #define fila2 2
#define PORT_fila3 PORTC #define TRIS_fila3 TRISC #define fila3 3
#define PORT_columna0 PORTC #define TRIS_columna0 TRISC #define columna0 4
#define PORT_columna1 PORTC #define TRIS_columna1 TRISC #define columna1 5
#define PORT_columna2 PORTC #define TRIS_columna2 TRISC #define columna2 6
#define PORT_columna3 PORTC #define TRIS_columna3 TRISC #define columna3 7
/*************************************************/ #ifdef teclado_activoalto #define es_activo(r,b) bit_test(r,b) #define activar(r,b) bit_set(r,b) #define desactivar(r,b) bit_clear(r,b) #else #ifdef teclado_activobajo #define es_activo(r,b) !bit_test(r,b) #define activar(r,b) bit_clear(r,b) #define desactivar(r,b) bit_set(r,b) #else #error "Debe declarar la lógica del teclado: activo alto o activo bajo" #endif #endif
/***************************************************/ void teclado_inicializa(void) { // Inicializa los latches de salida para las filas. activar(PORT_fila0,fila0); activar(PORT_fila1,fila1); activar(PORT_fila2,fila2); activar(PORT_fila3,fila3); // Configura las filas como salidas. bit_clear(TRIS_fila0,fila0); bit_clear(TRIS_fila1,fila1); bit_clear(TRIS_fila2,fila2); bit_clear(TRIS_fila3,fila3); // Configura las columnas como entradas bit_set(TRIS_columna0,columna0); bit_set(TRIS_columna1,columna1); bit_set(TRIS_columna2,columna2); bit_set(TRIS_columna3,columna3); }
void teclado_activafilas(void) { activar(PORT_fila0,fila0); activar(PORT_fila1,fila1); activar(PORT_fila2,fila2); activar(PORT_fila3,fila3); }
int8 teclado_examinacolumnas(void) { if(es_activo(PORT_columna0,columna0)) return 0; if(es_activo(PORT_columna1,columna1)) return 1; if(es_activo(PORT_columna2,columna2)) return 2; if(es_activo(PORT_columna3,columna3)) return 3; return 4; }
char teclado_lee(void) { const char teclas[16]={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; int8 i; teclado_activafilas(); for(i=0; i<20; i++) { if(teclado_examinacolumnas()>3) return 0; delay_ms(1); } desactivar(PORT_fila3,fila3); desactivar(PORT_fila2,fila2); desactivar(PORT_fila1,fila1); if((i=teclado_examinacolumnas())<4) return(teclas[i]); desactivar(PORT_fila0,fila0); activar(PORT_fila1,fila1); if((i=teclado_examinacolumnas())<4) return(teclas[i+4]); desactivar(PORT_fila1,fila1); activar(PORT_fila2,fila2); if((i=teclado_examinacolumnas())<4) return(teclas[i+8]); desactivar(PORT_fila2,fila2); activar(PORT_fila3,fila3); if((i=teclado_examinacolumnas())<4) return(teclas[i+12]); desactivar(PORT_fila3,fila3); return 0; }
void teclado_esperalibere(void) { teclado_activafilas(); while(teclado_examinacolumnas()<4); } Antes de incluir la librería debes declarar: También debes declarar previamente la lógica del teclado, por ejemplo: #define teclado_activoalto o el otro caso: #define teclado_activobajo Si en las columnas colocas resistencias de pullup (hacia Vcc) la lógica debe ser activo bajo. Si en las columnas colocas resistencias de pulldown (hacia GND) la lógica debe ser activo alto. Todas y cada una de las filas y columnas son colocables en cualquier terminal de cualquier puerto. Así, si colocas la fila 0 del teclado en la terminal RA5, la declaración debe quedar así: #define PORT_fila0 PORTA #define TRIS_fila0 TRISA #define fila0 5 Para leer una tecla debes invocar a la función teclado_lee(). Esta función retornará un 0 binario (caracter nulo) si no hay tecla pulsada. En caso contrario retornará el código ASCII de la tecla pulsada. Debes invocar la función teclado_esperalibere() para esperar que se libere la tecla y evitar leer varias veces la misma tecla. Te dejo el siguiente programa de ejemplo: #include "16f877a.h" #use delay(clock=20M) #define teclado_activobajo #include "teclado.h" #define use_portb_lcd #include "lcd.c"
int main(void) { char tecla; teclado_inicializa(); lcd_init(); while(1) { if(tecla=teclado_lee()) { lcd_putc(tecla); teclado_esperalibere(); } } } Nos vemos...
|
|
|
38
|
Informática / Electrónica / Re: Introduccion a la programacion de PICS en lenguaje C (CCS)
|
en: 31 Diciembre 2010, 00:14 am
|
Una pregunta, mi amigo: ¿La librería lcd.c que incluyes es la que viene por defecto con el compilador? Si es así, para cambiar los pines (enable, rs, rw, etc.) no debes usar #define. Lo que debes hacer es modificar la librería lcd.c. Esta librería puede operar con el PORTB o con el PORTD. Por defecto es el PORTD. Si quieres utilizar el PORTB debes definir en tu programa principal, antes de incluir la librería, lo siguiente: #define use_portb_lcd Si quieres cambiar la configuración de los pines debes alterar la librería. En ella se declara una estructura que define la posición de los pines de control y de datos del lcd dentro del puerto seleccionado. struct lcd_pin_map { // This structure is overlayed BOOLEAN enable; // on to an I/O port to gain BOOLEAN rs; // access to the LCD pins. BOOLEAN rw; // The bits are allocated from BOOLEAN unused; // low order up. ENABLE will int data : 4; // be pin B0. } lcd; Lo anterior quiere decir que el pin enable ocupa el bit 0 del PORT seleccionado. El pin RS ocupa el bit 1; el pin RW, el bit 2; el bit 3 no se usa, y los bits 4, 5, 6 y 7 son los pines de datos. Espero haberte ayudado. Hasta la próxima.
|
|
|
39
|
Programación / Programación Visual Basic / Re: Problema al ejecutar programa, no funciona
|
en: 30 Diciembre 2010, 23:52 pm
|
Mis estimados compañeros del foro:
Agradezco las respuestas de cada uno de ustedes. Esta vez escribo para comunicarles que el problema está casi resuelto, aunque de una manera un poco extraña. Verán:
El programa del cual les comenté lo ejecuté en 3 computadoras que tienen SO Windows XP y en ninguna funcionó completamente, es como si el procesador se brincara las instrucciones, pero en fín. La verdadera cuestión es que el programa terminó ejecutándose correctamente en una laptop con SO Windows 7 de 64 bits. Me sorprendió mucho, ya que, según lo que yo sé, Visual Basic 6.0 fue hecho para SO de 32 bits (si estoy equivocado, corríjanme por favor). De hecho, al instalar Visual Basic 6 en la laptop me arrojaba un mensaje de incompatibilidad, pero aún así lo instalé y ¡Funcionó!
Entonces, si VB6 es compatible con Windows XP e incompatible con Windows 7 ¿Tiene esto alguna explicación?
|
|
|
40
|
Programación / Programación Visual Basic / Problema al ejecutar programa, no funciona
|
en: 29 Diciembre 2010, 22:28 pm
|
Buen día a todos:
Hoy los vengo a molestar con una super pregunta. Verán:
Estoy tratando de realizar una comunicación mediante el puerto serie COM.
El problema está en que al ejecutar el código se deben enviar caracteres por el puerto al dar click en determinados botones, pero no lo hace.
Al ejecutar el código instrucción por instrucción sí lo realiza correctamente. Pero al correrlo no lo hace. ¿Qué le pasa a mi visual basic?
Por su atención, muchas gracias.
|
|
|
|
|
|
|