torres.electronico
Well-known-Alfil
Solo me acuerdo que tenía dos versiones, con potenciómetro o con pulsadores; La idea es verlo y modificarlo para reciclar dos motores de portón que tiene un bta16-600
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
Simplicimo, me gustó; voy a migrar la idea, graciasEste es el que yo digo: [Aporte] Control de fase (Dimmer) con Arduino
Pero no usa botones...es solo con un pote
'****************************************************************
'* Name : Dimmer_16F84A.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2020 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 10/08/2014 *
'* Version : 2.0 *
'* Notes : Mod by RicBevi *
'* : *
'****************************************************************
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 ' Puerto A como entrada de pulsadores en A.0 y A.1
Output PORTB ' Puerto B como salida
Input PORTB.0 ' Puerto B.0 como entrada
Symbol Triac = PORTB.1 ' Salida triac en B.1
Declare LCD_DTPin PORTB.4 ' Puerto B salida datos B4 B5 B6 B7
Declare LCD_RSPin PORTB.2 ' Puerto B1 pin rs del lcd
Declare LCD_ENPin PORTB.3 ' Puerto B2 pin Enable del LCD
Declare LCD_Interface = 4 ' Configuracion LCD
Declare LCD_Lines 2 ' Configuracion LCD
Declare LCD_Type 0 ' Configuracion LCD
Dim Porcentaje As Byte
Dim contador As Byte
Dim PorcentajeV As Byte ' Valor antiguo de la variable para comparacion
GoTo Inicio: ' Ir a inicio
Context Save
Interrupcion:
' Context Save ' 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 "
program1:
If Porcentaje <> PorcentajeV Then
Print At 1,14, Dec2 Porcentaje
PorcentajeV = Porcentaje
EndIf
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 program1
End
Hace un tiempo alguien compartió en este tópico un dimmer. Lo estoy buscando y no lo encuentro. Alguien se acuerda quien lo compartió?
Buenas noches compañeros, despues de un largo tiempo de haber hecho este proyecto y que con la ayuda de Sr. D@rkbytes logre colocarlo a funcionar con visualizacion de una pantalla LCD 16x2, es un variador de velocidad para motores de 120V AC que es lo que se trabaja en colombia, tambien sirve para variar la luminosidad de una bombilla incandescente espero les sirva y si pueden mejorarlo mucho mejor y lo compartan, este proyecto tambien lo pueden hacer sin la pantalla LCD todo viene separado, ya que el pic principal trabaja independiente del pic que hace la visualizacion.
El archivo de simulacion esta en proteus 8.5 SP0.
Ya mi proximo reto es hacerlo para variar motores a 220V AC.
Cordial saludo.
Juan Camilo Cardona
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'tacometro LCD y pic 16f628a '
'****************************************************************
CMCON = 7 'Comparadores Apagados
TRISB = %00000000
PORTB = 0
'****************************************************************
@ DEVICE pic16F628A, LVP_OFF
@ DEVICE pic16F628A, PWRT_ON
@ DEVICE pic16F628A, BOD_ON
@ DEVICE pic16F628A, CPD_OFF
@ DEVICE pic16F628A, PROTECT_OFF
@ DEVICE pic16F628A, WDT_ON
@ DEVICE XT_OSC
define osc 4
' DEFINICIÓN DE REGISTROS PARA EL LCD
Define LCD_DREG PORTB
Define LCD_DBIT 4
Define LCD_RSREG PORTB
Define LCD_RSBIT 0
Define LCD_EREG PORTB
Define LCD_EBIT 1
TRISB=0
taco var word
PAUSE 100
tacometro:
count porta.1,1000,taco
taco=(taco*60)
lcdout $fe,1, " SPINDLE "
lcdout $fe,$c2,dec taco
lcdout $fe,$c9,"R.P.M."
pos var byte
cont var byte
servo1 var porta.1
potein var porta.0
pote:
Pot potein, 255,pos
for cont = 0 to 50
pulsout servo1,pos
pause 15
next cont
goto pote
GOTO tacometro
end
En este mismo tema compartieron hace un tiempo un ejemplo de contador con TOKIHola a todos. Muchísimo tiempo que no pasaba por aquí a molestar.
A ver, les cuento. Armé una CNC y ahora quiero controlar el SPINDLE que es un BRUSHLESS hecho por mí y quiero ponerle tacometro con LCD 2X16 pero no he podido lograr que un solo PIC16F628A haga las 2 funciones.
¿Será que definitivamente es imposible, o seré yo que no he podido escribir bien el programa?
Este es mi programa:
A ver si me pueden ayudar.Código:''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'tacometro LCD y pic 16f628a ' '**************************************************************** CMCON = 7 'Comparadores Apagados TRISB = %00000000 PORTB = 0 '**************************************************************** @ DEVICE pic16F628A, LVP_OFF @ DEVICE pic16F628A, PWRT_ON @ DEVICE pic16F628A, BOD_ON @ DEVICE pic16F628A, CPD_OFF @ DEVICE pic16F628A, PROTECT_OFF @ DEVICE pic16F628A, WDT_ON @ DEVICE XT_OSC define osc 4 ' DEFINICIÓN DE REGISTROS PARA EL LCD Define LCD_DREG PORTB Define LCD_DBIT 4 Define LCD_RSREG PORTB Define LCD_RSBIT 0 Define LCD_EREG PORTB Define LCD_EBIT 1 TRISB=0 taco var word PAUSE 100 tacometro: count porta.1,1000,taco taco=(taco*60) lcdout $fe,1, " SPINDLE " lcdout $fe,$c2,dec taco lcdout $fe,$c9,"R.P.M." pos var byte cont var byte servo1 var porta.1 potein var porta.0 pote: Pot potein, 255,pos for cont = 0 to 50 pulsout servo1,pos pause 15 next cont goto pote GOTO tacometro end
Les agradezco de antemano.
Puedes conectar una resistencia adicional como divisor de tension para que tu uC pueda leer el valor analógico.mi problema es que no se como hacer funcionar el de temperatura no se como va programado
Gracias, y en la programación como sería para que me de las lecturas en grados centígrados ?Puedes conectar una resistencia adicional como divisor de tension para que tu uC pueda leer el valor analógico.
Temperature(℃) | 0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 |
Resistance(kΩ) | 27.90 | 18.22 | 12.12 | 8.31 | 5.80 | 4.12 | 3.00 | 2.21 | 1.66 |
TRISA=255 ; DECLARAR TODO EL REGISTRO A COMO ENTRADA
TRISB=0 ; DECLARAR TODO EL REGISTRO B COMO SALIDA
TRISC=%00001111 ; DECLARAR RCO A RC3 COMO ENTRADA Y RC4 A RC7 COMO SALIDA
ADCON1=14 ; DECLARAR QUE LAS ENTRADA ra0 son analogico
SENSAR VAR word
DIGITAL VAR WORD
SENSAR=0
DIGITAL=0
PORTA=0
PORTB=0
PORTC=0
INICIO:
ADCIN 0,DIGITAL
SENSAR=150* DIGITAL
SENSAR=SENSAR/100
PAUSE 500
LCDOUT $FE,1
LCDOUT $FE,2,"Tem"
LCDOUT $FE,$C0,"=",#SENSAR,%11011111, "C"
PAUSE 500
GOTO INICIO
Disculpa pero así no se entiende nada.
No hay un comentario de las líneas de código ni por casualidad, no nos informas que microprocesador estas usando.
En la lógica de la matemática y sin entrar en mucho detalle multiplicas una variable por 150 y luego la divides por 100, pregunto no será mas rápido y eficiente que tú apliques algo de matemática básica y multipliques por 15 y dividas por 10 que no alterara el resultado?.
Si trabajas con sensores analógicos y sin respuesta lineal o de alguna formula estándar conocida, tienes dos alternativas que se me ocurre o trabajas con una tabla almacenada y comparas la entrada con la tabla o encuentras una formula matemática que defina la curva que represente a tu sensor en funcionamiento con la precisión que desees.
INCLUDE "MODEDEFS.BAS" ; LIBRERIA PARA OCUPAR LA COMUNICACIÓN SERIAL
define LOADER_USED 1
DEFINE OSC 20 ;DEFINIR EL OSCILADOR EN 20 MHz (HS)
DEFINE ADC_BIST 10 ;DEFINE LA RESOLUCION DEL ADC
DEFINE ADC_CLOCK 3 ;1-LP 2-XT 3-HS
DEFINE ADC_SAMPLEUS 50 ;TIEMPO QUE TARDA LA SEÑAL EN CONVERTIR LA SEÑAL ANALOGICA A DIGITAL
DEFINE LCD_DREG PORTC
DEFINE LCD_BITS 4
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTC
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTC
DEFINE LCD_EBIT 5
DEFINE LCD_LINES 2
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 50
TRISA=255 ; DECLARAR TODO EL REGISTRO A COMO ENTRADA
TRISB=0 ; DECLARAR TODO EL REGISTRO B COMO SALIDA
TRISC=%00001111 ; DECLARAR RCO A RC3 COMO ENTRADA Y RC4 A RC7 COMO SALIDA
ADCON1=14
SENSAR VAR word
DIGITAL VAR WORD
SENSAR=0
DIGITAL=0
PORTA=0
PORTB=0
PORTC=0
INICIO:
ADCIN 0,DIGITAL
SENSAR=299*DIGITAL ; los 250 es sacando del sensor * 255 que nos da el digital
SENSAR=SENSAR/250 ; los 250 dividido y me da la humedad
pause 1000
LCDOUT $FE,1
LCDOUT $FE,2,"humedad"
LCDOUT $FE,$C0,"=",#SENSAR,%11011111, "%"
PAUSE 1000
GOTO INICIO