Circuito con PIC 16F628A. Funciona en Proteus pero no en protoboard

Pues creo que si esta bien.... hay muchas maneras de hacerlos y mientras funcione y no consuman muchos recursos cualquiera es bueno...

mira casi lo mismo que el tuyo pero de como lo haria yo...

Código:
DEFINE OSC 4

Define LCD_BITS 4              'Defino el tamaño del bus de datos
Define LCD_DREG PORTB          'Defino el puerto B como puerto de datos
Define LCD_DBIT 4              'Inicio los datos en el Bit 4 (B4 a B7)
Define LCD_RSREG PORTB         'Defino el puerto B como el conectado al RS del
Define LCD_RSBIT 1             'Defino que el pin 1 esta conectado al RS del LCD
Define LCD_EREG PORTB          'Defino el puerto B como el conectado al E del
Define LCD_EBIT 2              'Defino que el pin 2 esta conectado al E del LCD
define LCD_LINES 2             'Defino un LCD de 2x16

CMCON=7                        'Convierto todos los puertos como digitales
TRISA=%00000111                'Establezco el puerto A como entrada
TRISB=%00000000                'Establezco el puerto B como salida
FLAG VAR BYTE

PAUSE 500                      'Pausa de inicio del LCD
'Entradas BCD                  'A2 A1 A0
Main:
 IF PORTA=%00000000 and FLAG<>1 THEN 
  LCDOUT $FE,1    'Borra la pantalla del LCD. Si es 1 es porque el conmutador
  lcdout $FE,2,"DESCONECTADO" 'Escribe "Desconectado"
  FLAG = 1          'Pone la bandera a 1 y por tanto el conmutador esta en la
 ENDIF
 IF PORTA=%00000001 and flag<>2 then        '0  0  1
  LCDOUT $FE,1
  LCDOUT $FE,2,"MOTOR 1"
  lcdout $FE,$C0,"CONECTADO"
  FLAG = 2
 ENDIF
 IF PORTA=%00000010 and FLAG<>3 THEN        '0  1  0
  LCDOUT $FE,1
  LCDOUT $FE,2,"MOTOR 2"
  lcdout $FE,$C0,"CONECTADO"
  FLAG = 3
 ENDIF
 IF PORTA=%00000011 and Flag<>4 THEN        '0  1  1
  LCDOUT $FE,1
  LCDOUT $FE,2,"MOTOR 3"
  lcdout $FE,$C0,"CONECTADO"
  FLAG = 4
 ENDIF
 IF PORTA=%00000100 and flag<>5 THEN        
  LCDOUT $FE,1   
  lcdout $FE,2,"DESCONECTADO" 
  FLAG = 5         
 ENDIF
 IF PORTA=%00000101 and flag<>6 THEN        '1  0  1
  LCDOUT $FE,1    'Borra la pantalla del LCD. Si es 1 es porque el conmutador
  lcdout $FE,2,"DESCONECTADO" 'Escribe "Desconectado"
  FLAG = 6          'Pone la bandera a 1 y por tanto el conmutador esta en la
 ENDIF
 IF PORTA=%00000110 and flag<>7 THEN        '1  1  0
  LCDOUT $FE,1    'Borra la pantalla del LCD. Si es 1 es porque el conmutador
  lcdout $FE,2,"DESCONECTADO" 'Escribe "Desconectado"
  FLAG = 7          'Pone la bandera a 1 y por tanto el conmutador esta en la
 ENDIF
 IF PORTA=%00000111 and flag<>8 THEN        '1  1  1
  LCDOUT $FE,1    'Borra la pantalla del LCD. Si es 1 es porque el conmutador
  lcdout $FE,2,"DESCONECTADO" 'Escribe "Desconectado"
  FLAG = 8          'Pone la bandera a 1 y por tanto el conmutador esta en la
 ENDIF
Goto Main
END

la unica diferencia es que en el tuyo esta refrescando la pantalla constantemente, y en el mio la refresca solo cuando es necesario... y en teoria es mas rapido lo que no importa porque estamos hablando de nanosegundos :LOL:

*no lo probe en el simulador espero que no haya cometido ningun error...
 
Última edición:
Bueno lubeck, un 10 para ti :aplauso:. He modificado mi codigo y lo he hecho como el tuyo. Son menos lineas y al simular en proteus, funciona mucho mejor, los ceros y unos son mas estables. Lo he llevado al protoboard y funciona perfecto.

Te estoy muy agradecido por la ayuda que me has ofrecido, asi como a todos los demas que han aportado su granito de arena para que este, mi primer circuito!!!!!, este funcionando :apreton:.

Saludos.:):):)
 
Atrás
Arriba