Visual Basic Foro

Electrónica => Interfaces PC y Electronica => Mensaje iniciado por: rcortes en Marzo 28, 2012, 01:24:07 pm

Título: Automatizacion de luces a travez de una interfaz Vbasic con el pic 16f84a
Publicado por: rcortes en Marzo 28, 2012, 01:24:07 pm
buenas gente, soy nuevo y tengo unas grandes preguntas a ver si me colaboran, ando organizando un proyecto de activacion de luces a travez de una interfaz en Vbasic, ps la interfaz es muy sencilla, anexo unos pantallazos de esta.

se que necesito un control de potencia con reles, ahi no hay problemas ...

los problema vienen a continuacion

tengo problemas con la programacion en mplab del pic 16f84a 
como puedo hacer la comunicacion Vbasic - Proteus, por puerto paralelo o usb
la parte de programación es la que mas me esta dando dificil ya que no tengo idea de como hacerla ...

:S ps no se ando enfrascado en eso y mirando a ver como puedo empezar a organizar todo .

bueno aca mas o menos de como esta la interfaz, eso si no tengo ni idea de Vbasic pero la parte de la interfaz esta casi terminada.


(http://s14.postimage.org/g9kqy1x8t/ventana_de_ingreso.jpg) (http://postimage.org/image/g9kqy1x8t/)

(http://s14.postimage.org/f60mm3clp/Interfaz.jpg) (http://postimage.org/image/f60mm3clp/)

muchisimas gracias por cualquier ayuda, o sugerencia ...

Título: Re:Automatizacion de luces a travez de una interfaz Vbasic con el pic 16f84a
Publicado por: coco en Abril 30, 2012, 06:29:45 pm
Hola, vamos por partes:
* el 16F84 es muy limitado (es el mas viejo de la 16F), poca memoria de codigo, y poca ram
* no tiene un periferico UART

Visto y considerando que hoy en dia es casi imposible usar el puerto paralelo (muchas computadoras no lo tienen; ademas yo lo descartaria), y el serie esta casi extinto tambien (EXCEPTO si se usan adaptadores usb-serie), te recomiendo 3 posibles soluciones:

Nos quedamos con la 3º opcion, y usamos CCS.
Para empezar, del pinout tenemos:
(http://i.minus.com/jc3pcK2v9Ixej.png) (http://minus.com/lc3pcK2v9Ixej)

Vamos a suponer que el RA0 y RA1 los usamos para el serie, y los demas quedan a disposicion como salidas.

Código: (cpp-qt) [Seleccionar]
#include <16F84A.h>
/* XT, sin WDT, sin CODE PROTECT */
#fuses XT, NOWDT, NOPROTECT

/* clock XT a 4MHz */
#use delay(clock=4000000)

/* nosotros configuramos el TRIS de cada puerto */
#use fast_io(A)
#use fast_io(B)

#define SERIAL_TX PIN_A1 // PORT A, pin 1 (RA1)
#define SERIAL_RX PIN_A0 // PORTA A, pin 0  (RA0)
#define SERIAL_BAUDS 9600 // 9600bps

#use rs232(baud=SERIAL_BAUDS, xmit=SERIAL_TX, rcv=SERIAL_RX)


void main (void)
{
   char temp; 
   
   /* ambos puertos como salida */
   set_tris_b(0x00);
   set_tris_a(0x00);

   while(1)
   {
      /* aqui hay que notar que, los 2 primeros bits, irian a parar a RA1 y RA0, los cuales estan en uso para el serie.
          con un simple bitmask se borran de la data enviada desde la pc, pero en el puerto deben quedar iguales. */
      temp = getc() & 0xFC;         // al cuerno esos 2 bits
      temp |= input_a() & 0x3;      // aca se hace OR entre el byte leido, y SOLO los 2 bits del puerto A
      output_a(temp);               // aca se escriben derecho al puerto A
      putc(input_a() & 0xFC);       // se hace eco de lo que quedo en el puerto A (excepto los 2 ultimos bits)
      output_b(getc());             // se lee y escribe al puerto B
      putc(input_b());              // eco de lo que esta en puerto B
   }
}

No lo probe, pero compila bien.

Bueno, entonces desde VB6 lo que necesitas hacer es enviar solo 2 bytes:
el 1º va al puerto A y el siguiente al B. esto se repite infinitas veces.
Una vez que envias algo, te deberia aparecer un "eco" de lo que se escribio a cada puerto.

el byte se envia binariamiente, no en modo ASCII.

Saludos!