Desde 1994 en la Red. La pagina de los aficionados a la electronica, informatica y otras curiosidades de la vida. No dudes en visitarnos.
Ahora 4 visitas.| 2799656 Visitas (desde Dic. 2011), hoy: 620 Visitas 1833 Pag. Vistas , ultimos 36 dias: 22375 Visitas. 134739 Pag. Vistas. Tu IP: 34.238.248.103
Que ando curioseando:
AutosuficienciaCosas de casaElectronicaEn InternetInformáticaMundo MisticoSin categoríaSociedadTe lo recomiendo

AUTOENCENDIDO DE FUENTE ATX, DESPUES DE CORTE ELECTRICO CON PIC 12C509A

Para los que se hayan adelantado, la BIOS de mi equipo no dispone de esta opción).

El problema:
Tengo un equipo, el cual quiero que se encienda automáticamente después de un corte de luz, o si estando apagado (de forma correcta) recibe alimentación.

Despues de toda una tarde buscando soluciones por internet, no encontre nada, asi que me decidi a implementar algun sistema haciendo algo que se me da bien: Programar.

Me baje el manual de unos microcontroladores, y le eche un vistazo a otros cuantos manuales para crear un sencillo programa que hiciese lo siguiente:

  • 1.- Al alimentarse el circuito ESPERAR 20sg.
  • 2.- Dar un pulso de 1sg de duración
  • 3.- Esperar un impulso externo (y si llega, ir a 2)

Va, el programa esta chupao, lo complicao’ (no tengo ni idea de electrónica, bueno algo tengo), es el diseño, asi que ojee otros tantos ejemplillos y coji mi protoboard, lo monte y parece que no se ha cascao’ na’.

Asi que fui al ordenador en cuestion, y lo solde (a lo bruto en la propia placa base), y de momento funciona bastante bien.

Realmente no hace falta soldarlo a la placa base (solo al conector de la fuente ATX), entre los pines de GND y +5vSB de mantenimiento, pero OJO ¡¡ +5VSB mantenimiento es el pin 6 del conector de la fuente ATX!!.

Aqui va el circuito:

+5vo-------------------------------------o--
                                          |
+5v o---o-----------------------o--       |            |  |
        |       12c509          |         |      :¨¨¨¨¨|¨¨|¨¨:
        |       .---------------·-.       o--------.   |  |  :
        |       |             VDD |       |      : w   o  o  :
        |       |                (        T D1   : w   \     :
        |       | GP2 GP1 GP0 VSS |       |      : w    \    :
        |        ------.----.---.-        o--------·     o   :
        |              |    |   |         |      :       |   :
        ·--{R10K}------·|_  |   |  2,2K| / BC468 :       |   : 
                       .|   ·-o | o-R--|<        ¨¨¨¨¨¨¨¨|¨¨¨¨
                       |  P     |      | \->|      
GND o------------------o--------o-----------o

P = Pulsador Manual, para poder encenderlo como siempre (Mi equipo tiene un encendido un tanto raro por eso lo puse) Y aqui el programa para el pic

12c509-autoboot.asm
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

	Title	"AutoBoot Fuente ATX"
	LIST P=PIC12C509A

#INCLUDE 					; Libreria de definiciones
;__CONFIG _CP_OFF & _WDT_OFF & _IntRC_OSC & _MSTCLR_OFF		; CFG Fuses

;--------------
;- JDsoft 
;-  Mi primer programa para los pic, usado para resolver el problema
;-  del encendido automático de un ordenador con fuente ATX, al 
conectarse
;-  la alimentación despues de un fallo de la misma.
;-------------------------------------

GPIO	  equ 0x06

f	EQU 	1			; Destino de operación = 
registro

DelayL equ 0x11 ; delay register LOW byte
DelayM equ 0x12 ; delay register MID byte
DelayH equ 0x13 ; delay register HIGH byte

		ORG 0
		goto main

    	ORG 0x05
main	
		movwf OSCCAL
		movlw b'00000110' 
		TRIS GPIO 		

		movlw 0x78 			; set DelayH to 20 seg
		call Delay1000		; Execute a 20000ms delay

inicio	BSF	GPIO,0

		movlw 6h 			; set DelayH to 6
		call Delay1000		; Execute a 1000ms delay

		BCF GPIO,0
							; Esperamos un 
pulso 'Manual'
manual	btfsc GPIO,1		; 
		goto  manual		; Loop mientras no se active 
PortA1

		goto  inicio		; Ejecutamos el pulso

;
; --------------------------------
; SUBROUTINE: waste time for [REG_W] mS
; --------------------------------
;
;		movlw 6h 	; set DelayH to 3

Delay1000 	
        clrf DelayL 	; /R clear DelayL to 0
		clrf DelayM 	; clear DelayM to 0
		movwf DelayH
Wait1 	decfsz DelayL,f 		; subtract 1 from DelayL
		goto Wait1 	; if not 0, goto Wait1
		decfsz DelayM,f 	; subtract 1 from DelayM
		goto Wait1 	; if not 0, goto Wait1
		decfsz DelayH,f 	; subtract 1 from DelayH
		goto Wait1 	; if not 0, goto Wait1
		return 		; finished the delay

	end

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<

Y pa’ que no tengas que compilarlo, hay va el HEX
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

:020000040000FA
:04000000010AC00A27
:100050006C0C2500060C0600780C35090605060C0C
:10006000350906042606320A2E0A71007200330092
:0E007000F102380AF202380AF302380A0008D8
:02018000280A4B
:00000001FF

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


Escribe un comentario

Tu comentario