Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

12/09/2013 #1


Necesito pasar codigo de un Dimmer 220 con triac de 16f84a a 16f877a
Hola chicos, alguien me podría echar una manito tengo un código de un Dimmer hecho por mi en un pic 16f84a y quiero pasarlo a un pic 16F877A para agregarle una entrada análoga para registrar un voltaje porque el pic 84 no tiene entradas análogas.

les pongo el código y así les pueda servir a alguien también.
El código esta hecho en proton ide.
Desde ya muchas gracias
Código:
 Device 16F84A
 XTAL=4
 EData 30
 ON_HARDWARE_INTERRUPT GoTo Interrupcion        \' Cuando ocurre la interrupcion salta a Interrupcion
 
 Symbol T0IE = INTCON.5                         \' Habilitacion TMR0
 Symbol T0IF = INTCON.2                         \' Flag TMR0
 Symbol GIE  = INTCON.7                         \' Interrupciones globales habilitadas 
 Symbol INTF = INTCON.1                         \' Flag rb0
 Symbol INTE = INTCON.4                         \' Habilitar interrupcion b0
 Symbol T0CS = OPTION_REG.5                     \' Timer0 reloj interno o externo
 Symbol INTEDG = OPTION_REG.6                   \' Flanco ascendente rb0
 
 Input PORTA
 Output PORTB                                   \' Puerto B como salida
 Input  PORTB.0                                 \' Puerto B.0 como entrada
 
 Symbol Triac = PORTB.1                        \' Simbolo triac 
 
 LCD_DTPIN  PORTB.4                             \' Puerto B salida datos B4 B5 B6 B7
 LCD_RSPIN  PORTB.2                             \' Puerto B1 pin rs del lcd 
 LCD_ENPIN  PORTB.3                             \' Puerto B2 pin Enable del LCD
 LCD_INTERFACE = 4                              \' Configuracion LCD
 LCD_LINES 2                                    \' Configuracion LCD
 LCD_TYPE 0                                     \' Configuracion LCD
 
 Dim Porcentaje As Byte
 Dim contador As Byte

 GoTo Inicio:                                   \' Ir a inicio 
                               
Interrupcion:                                   \' Interrupcion     
    If INTF = 1 Then                            \' Si se produjo la interrupcion de portb0
        Low    Triac                            \' Apago el triac
        INTE = 0                                \' Desabilito interrrupcion rb0
        INTF = 0                                \' Borro el flag de rb0
        contador = 100 - Porcentaje             \' Contador es una variable que se usa para 
                                                \'generar el retardo desde el punto cero hasta 
                                                \'el disparo es igual a porcentaje + 10 \'
                                                \'ya que 10 es 1ms demora del transistor antes de cero
        TMR0 = 165                              \' El timer deberia ser de 100 pulsos cada vez osea 
                                                \'255- 100 + algunas instrucciones  que ya pasaron
        T0CS = 0                                \' El timer cuenta con el reloj interno comienza a contar
        T0IE = 1                                \' Abilito la interrupcion del timer
    ElseIf  T0IF = 1 Then                       \' Si se desbordo el timer
        T0IF = 0                                \' Borro el flag del timer
        TMR0 = TMR0 + 150                       \' Cargo Timer con el valor actual mas 150 que serian 100 instrucciones de resto
        Dec contador                            \' Decremento contador 
        If contador = 0 Then                    \' Si contador = 0
           T0IE = 0                             \' Desabilito la interrupcion del timer
           INTE = 1                             \' Habilito la interrupcion RB0
           High   Triac                         \' Prendo el triac
        EndIf
     EndIf    
Context Restore                                 \' Restaurar variables y volver al lugar donde se detuvo

Inicio: 
    Porcentaje = ERead 0                         \' Leo posicion 0 de eeprom
    GIE  = 1                                     \' Habilito interrupcion general 
    INTE = 1                                     \' Habilito interrupcion RB0
    
programa:
 
   Print At 1,1, "Porcentaje " 
   Print At 1,14, @Porcentaje
   Print At 2,1, "lectura"
   Print At 2,14, @ERead 0
   DelayMS 100 
   
If PORTA.1 = 1 And  Porcentaje < 99 Then
    Inc Porcentaje
    EWrite 0, [Porcentaje ]    
ElseIf PORTA.0 = 1 And Porcentaje > 1 Then
    Dec Porcentaje
    EWrite 0, [Porcentaje ]
End If
GoTo programa
15/09/2013 #2


Ya lo solucione, pude pasar de de 16F84A a 16F877A .
Gracias
15/09/2013 #3


Y no podrias compartir el diagrama o todo el proyecto completo por favor?
16/09/2013 #4


El código que menciono arriba anda perfecto para el pic 16F84A no tiene errores.
Pero no tiene entradas análogas para registrar un voltaje o amperios .
La ultima parte del Print esta mal es asi lo pueden modificar a guto

Print At 1,1, "Porcentaje"
Print At 1,14, @Porcentaje
Print At 2,1, "lectura"
Print At 2,14, @ERead 0
DelayMS 100

Lo pase al otro pic el 877A porque puedo registrar vca, vcc y amp, este proyecto es para una fuente digital de 0 a 30v con un máximo de 15amp +/- dependiendo del trafo y me quedo perfecto.

yo me pase muchas horas con el tema de las interrupciones.
suerte con las pruebas se los aseguro anda vien
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.