Autor Tema: Dimmer 12f675 ConMando  (Leído 2831 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado flacomaida

  • PIC10
  • *
  • Mensajes: 17
Dimmer 12f675 ConMando
« en: 28 de Abril de 2009, 21:50:12 »
Hola a todos por acá, favor si me pueden ayudar con este proyecto que ya me quemo horas y también la única neurona que me queda.
Estoy tratando de adaptar este código para un dimmer con mando, en un micro 12f675. el mismo lo tengo adaptado en un 16f628 y funciona de maravillas en una placa de ensayos que tengo. pero al pasarlo al 12f675 no funciona la parte del dimmer, como que no interrumpe el Tmr1, el mando si funciona por q lo veo en los led. cambie los fuses y solo parpadea algunas veces. el micro no es por que hice un dimmer sesillo con retardos pauseus y funciona de maravillas.
Tendrá que ver los dos pines que tengo flotante sin conexión??? recuerdo que el 16f628 hace lo mismo en esta placa que es la definitiva.
Favor si pueden ayudar este novato!!! les dejo un pedazo del código para que lo Revisen.-
Gracias.

Gracias de todos modos, ya lo hice funcionar y con dos salidas, una para  el ventilador y otra para la lámpara. Las dos con Dimmer utilizando los dos Timer, 0 y 1. Pero fracase con la fuente sin Trafo. Queme 5 Pic.
DEVICE 12F675
CONFIG INTRC_OSC_NOCLKOUT, WDT_On, PWRTE_ON, BODEN_on, CP_OFF, MCLRE_OFF

ALL_DIGITAL = TRUE
; 76543210
TRISIO = %00011110 ;1-entrada, 0-salida

CMCON = 7 ;comparator off
;************************************************* ******************************




SYMBOL Venti        = GPIO.0 ; ventilador (Dimmer)
              ;       GPIO.1 ; Libre, flotante
syMBOL CruceXCero   = GPIO.2 ;Deteccion de cruce por cero
                      GPIO.3 ; Libre, flotante
SYSYMBOL IRR        = GPIO.4 ;Receptor infrarrojo
SYMBOL Luz          = GPIO.5 ;Luz del ventilador




   Symbol GIE  INTCON.7      ' Habilitacion de interrupcion global

'------------RBO INTERRUPT-------------------
   Symbol INTEDG OPTION_REG.6
   Symbol INTE INTCON.4
   Symbol INTF INTCON.1
'--------TIMER1 INTERRUPT-----------------
   Symbol TMR1IE PIE1.0
   Symbol TMR1IF PIR1.0      
   Symbol PEIE INTCON.6


Symbol Glitch      = 52         
Symbol LED_Tijd      = 500         
Symbol OFF      = 0
Symbol Ok      = 50         
Symbol On      = 1



Dim ComByte         As Byte
Dim ComByteOud      As Byte
Dim SysByte         As Byte
Dim SysByteOud      As Byte
Dim ToggBit         As Bit
Dim LAST_TOGGBIT    As Bit
Dim ToggBitOud      As Bit
Dim Waarde         As Bit
Dim z            As Bit
Dim z1            As Byte
Dim TIMER1 As TMR1L.Word


Dim ANGULO As Word
Dim ANGULO1 As Word

Dim VentOn As Bit

 
Dim Luz_Venti_On As Bit

Clear
TMR1IE=0
TMR1IF=0

INTE=0
INTF=0
T1CON=%01000000
TIMER1=0

DelayMS 100
ON_INTERRUPT FIREFAN
GoTo START


FIREFAN:

           IF INTF=1 THEN
                INTEDG=INTEDG ^1          
        IF ANGULO < 1000 THEN
                IF vention=1 THEN
                  VENTI=1
                   INTF=0
                    TMR1IF=0
                 GOTO ESCAPE
          ENDIF
        ENDIF   
        TIMER1=65500-ANGULO
        T1CON=%01000001
INTF=0
ENDIF                                          

IF    TMR1IF =1 THEN
T1CON=%01000000
     IF VENTION=1 THEN
        VENTI=1
      DelayUS 10
      DelayUS 10
      DelayUS 10
      DelayUS 10
      DelayUS 10
      VENTI=0
     ENDIF   
      TMR1IF=0
ENDIF      


ESCAPE:

CONTEXT RESTORE
BitOphalen:
   Waarde = 0
   If IRR = 1 Then Waarde = 1
   z = IRR
   z1 = 0
   While IRR = z And z1 < Ok
      Inc z1
   Wend
   If Ok = z1 Then GoTo ErrorOntvangst 'Niet binnen de tijd een niveau-verandering
   DelayUS 1000 '1600 '800 '900
Return

Start:
     ANGULO=1000
     VENTION=1
      While GIE=1                             ' make sure to disable the Global interrupt
             GIE=0                                      ' Disable Global interrupt
        Wend

   
   
   INTEDG =1    ' INTERRUPT ON RISING EDGE  ' RB0 INTERRUPT
   INTE =1
   TMR1IE =1
   PEIE=1
   GIE = 1          ' Enable global interrupts
   INTF=0
'   T0IE = 0          ' Enable TMR0 overflow interrupt
   'T0IF=0

   TMR1IF =0

MAIN:
z1 = 0
While IRR = 1 : Wend   

While IRR = 0 And z1 < Glitch
   Inc z1
Wend
If z1 < Glitch Then


GoTo MAIN
EndIf

ComByteOud = ComByte               
SysByteOud = SysByte
ToggBitOud   = ToggBit

DelayUS 600

GoSub BitOphalen
ComByte.6 = Waarde ^ 1            

GoSub BitOphalen
ToggBit = Waarde

GoSub BitOphalen
ComByte.0 = Waarde


; Etc, Etc hasta completar los 12 bit, borrados por espacio

If ToggBit <> LAST_TOGGBIT Then
LAST_TOGGBIT=ToggBit



SELECT COMBYTE   ' cheQUEO DE LA TECLA PRESIONADA

         CASE 2
      TOGGLE Luz

     
     
      CASE 16             ' VOLUMEN +
      ANGULO=ANGULO-1000
      IF ANGLE < 0 THEN
           ANGULO=0
      ENDIF     
     
      CASE 17                     ' VOLUMEN -
     ANGULO=ANGULO+1000
      IF ANGLE > 8000 THEN
           ANGULO=8000
      ENDIF  

      CASE 13                ' MUDO
      VENTION=VENTION^1
      LUZ=0

      CASE 12                   ' POWER ON/OFF
      IF Luz_Venti_On =0 THEN
         Luz_Venti_On =1
         VENTI=1
        
         VENTION=1
        
         GOTO LABEL1
      ENDIF
      IF Luz_Venti_On =1 THEN
                 
         VENTI=0
         Luz_Venti_On =0
      ENDIF  
LABEL1:      
END SELECT

ENDIF


GOTO MAIN



ErrorOntvangst:
   ComByte = ComByteOud
   SysByte = SysByteOud
   ToggBit = ToggBitOud

GOTO MAIN
« Última modificación: 08 de Agosto de 2009, 16:44:19 por flacomaida »


 

anything