TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: centiane en 06 de Marzo de 2007, 17:38:06
-
Lo dicho despues de buscar un dimmer para hacerlo por la web , lo unico que he encontrado a sido de una pagina rusa (creo) que te cobraban por el codigo fuente y otro de un compañero que tambien cobraba por el codigo.
Despues de esto me he puesto manos a la obra para conseguir uno que sea libre y que todo el personal lo pueda tener, ando por los inicios pero ya tengo bastante avanzado el tema.
He conseguido sincronizar el paso por cero y he conseguido el disparo del triac al tiempo que le pedi.
Estoy liado con la rutina de decodificacion de ir, pero no creo que sea muy chungo.
Un saludo desde la frontera de Huelva y Badajoz.
Centiane Forever.
-
:? ¿?
-
:? ¿?
Lo mismo digo.
???? centiane, es una pregunta o un comentario?
-
Hola centiane!
Tiene muy buena pinta tu proyecto! Ánimo que ya tienes hecho lo más complicado! por cierto, hay una página que está bastante bien de un tío que se hace llamar Nocturno y que tiene algo parecido a lo que comentas.
http://elrebujito.es/modules.php?name=Downloads&d_op=viewdownload&cid=18
Suerte!!
Un saludo desde Alicante.
-
Pues aqui ando con el proyecto en vias de desarrollo.
He pensado de implementarle un protocolo como el x-10 el cual monitorice en un pic aparte el nivel de todos los dimmer, esto no creo sea demasiado complicado, ya que el dato se puede enviar en el paso por cero, cuando la tension de red es 0.
Otra cosa: Creo que queda claro que este post no es una pregunta si no el inicio de un proyecto y que yo con la vuestra ayuda intentare de poder ofrecer gratis pa todo el personal.
Un saludo Centiane.
Comento tambien que si alguien dispone de rutinas para el reconocimieno del IR RC5 u otro protocolo que por favor me lo diga.
-
No quería salir por este hilo para que no se formen malentendidos, pero intentaré aclarar lo que centiane quiere decir.
Yo tengo dos Dimmers publicados en El Rebujito (http://www.elrebujito.es).
El primero fue el Dimmer con Mando (http://elrebujito.es/modules.php?name=News&file=article&sid=110&mode=&order=0&thold=0) cuyo esquema, PCB y código fuente es completamente libre y está a disposición de quien lo quiera en ese link.
El segundo fue el Minidimmer (http://elrebujito.es/modules.php?name=News&file=article&sid=180&mode=&order=0&thold=0) cuyo esquema y PCB son libres y están publicados en mi web. Sin embargo en este caso, el código fuente no es libre.
Espero haber aclarado el malentendido.
-
¿Con qué lenguaje lo vas a desarrollar Centiane?
-
He modificado el anterior post para que no haya malentendidos.
El lenguaje que estoy utilizando es el pbp, aunque estoy abierto a otros lenguajes.
Un saludo Centiane.
-
OK, Centiane.
Échale un ojo a esto http://www.picbasic.co.uk/forum/archive/index.php/t-308.html
-
Hola !
También puedes sacar de aquí (http://www.melabs.com/resources/samples.htm#submitted), que ya está hecho y en PBP, sólo debieras agragarle el mando.
Saludos
Mario
-
No he leido el post antes de que centiane lo modificara, en cualquier caso, sorry Manolo!
-
Aqui adjunto un poco de como llevo el proyecto.
-Problema de las interrupciones solventado en ASM
-Recepcion de los codigos RC5 mediante la siguiente rutina.( Modificada un poco pero con la misma extructura)
'// Philips RC5 IR decoder
DEFINE OSC 20
DEFINE LOADER_USED 1
DEFINE HSER_BAUD 2400
Y VAR WORD ' Holds 12-bit RC5 code
Loop VAR BYTE ' Loop variable
PIN VAR PORTB.0 ' RB.0 input pin reading data
TRISB.0=1 ' Set RB.0 direction to input
OPTION_REG.7 = 0 ' Internal pull-ups = on
Home:
IF PIN = 1 THEN Home ' Wait for low going pulse
PAUSEUS 100 ' Short delay
IF PIN = 1 THEN Home ' Was it noise?
PAUSEUS 1350 ' Pause to read 2nd half of 1st bit period
Y.0[13] = PIN ' Record 1st synch period bit value
FOR Loop = 12 to 0 STEP - 1 ' 13 pulses MSB to LSB
Y.0[Loop] = PIN ' Y.Bit.Loop = data bit
PAUSEUS 1800 ' Wait 1.8mS to read next RC5 bit
NEXT Loop ' in middle of 2nd bit period
IF Y.LowByte = $FF THEN Home ' Was it noise?
Y = ~Y & $003F ' Mask upper 10-bits to return 6-bit data
' in lower 6-bits of word result
HSEROUT ["Key Pressed = ",DEC Y,13,10]
Y=0 ' Clear key codes
PAUSE 250 ' Used for testing only
GOTO Home ' Return Home
- Por ultimo deciros que tengo algunos problemas de temporizacion en la rutina de recepcion debido a el tiempo que se pierde en ejecutar las interrupciones, pero esto creo que se solventara haciendo un ajuste mas fino de los pause de la rutina anterior.
Aqui os dejo el codigo fuente del proyecto asta el momento, espero que os guste.
DEFINE INTHAND Nucleo
@ device pic12F675, INTRC_OSC_NOCLKOUT, WDT_OFF, PWRT_ON, MCLR_OFF, protect_off
'
'
triac var gpio.5 ' Salida de disparo triac 0
mando var gpio.4 ' Entrada señal del mando 1
led var gpio.3 ' Salida led 0
cero var gpio.2 ' Entrada paso por cero 1
Verde var gpio.1 ' Salida led 0
Rojo var gpio.0 ' Salida led 0
symbol GIEN = INTCON.7
symbol PULSO = OPTION_REG.6
Ird VAR WORD ' Donde se guarda el dato de IR
Valor VAR BYTE ' Tiempo de disparo.
ciclo VAR BYTE
Retardo VAR BYTE ' Retardo para prueba
Temp0 VAR BYTE
Temp1 VAR BYTE
t var bit
' Variables para el restablecimiento del Pic
wsave VAR BYTE $20 system ' despues de producirse una interrupcion
ssave VAR BYTE bank0 system
psave VAR BYTE bank0 system
GOTO Inicializacion ' Saltamos las interrupciones
ASM ; Inicio del tratamiento de interrupciones
Nucleo bcf INTCON,GIE
movwf wsave ; Guarda W
swapf STATUS, W ; Swap STATUS to W
clrf STATUS ; Resetea STATUS
movwf ssave ; Guarda STATUS
movf PCLATH, W ; PCLATH to W
movwf psave ; Guarda PCLATH
btfsc INTCON,T0IF ; Salta si es paso por cero
goto Dispara ; Es elpaso por cero
movf _Valor,W ; Recargamos el valor de disparo
movwf TMR0 ; En el temporizador
btfss OPTION_REG,INTEDG ; Activa la int en el flando de
goto EsCero ; De subida
bcf OPTION_REG,INTEDG ; De bajada
Termina bcf INTCON,INTF ; Reseteamos INTF
goto Fin
EsCero bsf OPTION_REG,INTEDG
goto Termina
Dispara bsf _triac ; Disparamos el Triac
bsf _Rojo
bcf INTCON,T0IF ; Reseteamos el TMR0
movlw 30 ; Retardo para cebar el Triac
movwf _Retardo
Bucle decfsz _Retardo,1
goto Bucle
bcf _triac ; Fin del retardo
bcf _Rojo
Fin movf psave, W ; Dejar todo como estaba
movwf PCLATH
swapf ssave, W
movwf STATUS
swapf wsave, F
swapf wsave, W
bsf INTCON,GIE
retfie
ENDASM
Inicializacion:
TRISIO = %11010100 ' 1 = Entradas 0 = Salidas
OPTION_REG = %11000100 ' Phus pull desactivadas ,CLK interno, Preescaler CLK/32.
WPU = %00000000 ' Enable pull-ups on GP2
CMCON = %00000111 ' Disable analog comparator
ANSEL = %00000000 ' Disable analog converter
Valor = 100
' Configuramos las interrupciones
' ==============================
INTCON=%10110000 ' Habilitar interrupcion patilla INT y el TMR0
Inicio:
Temp0=0
IF mando = 1 THEN Inicio ' Esperamos a que llegue un pulso
PAUSEUS 100 ' Retardo de discriminacion
IF mando = 1 THEN Inicio ' Si cambio el pulso, es ruido
PAUSEUS 1350 ' Tiempo de espera para el siguiente bit
ird.0[13] = mando ' Guardamos el primer bit de recepcion
FOR ciclo = 12 to 0 STEP - 1 ' 13 pulsos MSB asta LSB
ird.0[ciclo] = mando ' Ird.Bit.ciclo = data bit
PAUSEUS 1800 ' Espera de 1.8mS para el siguiente RC5 bit
NEXT ciclo ' Siguiente bit
IF ird.LowByte = $FF THEN Inicio ' Es ruido
if ird.lowByte = 0 THEN Inicio ' Es ruido
Temp1=ird.LowByte ' Salvamos el dato recibido en Temp1
if ird.lowByte=Temp0 then
if t=0 then
GIEN=0
t=1
else
GIEN=1
t=0
endif
endif
GOTO Inicio ' Return Home
P.D. La temporizacion del disparo la realizo mediante la int del TMR0 configurado desde 0 uS asta 8100 uS que prcticamente es la semionda completa.
Un saludo centiane.
-
Hola Centiane, no sé cómo andará de avanzado tu proyecto, pero hoy me he topado con este dimmer sin transformador, controlado con mando a distancia y desarrollado en Pic Basic (http://www.picbasic.nl/indexes_uk.htm (http://www.picbasic.nl/indexes_uk.htm)).