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.
El uso de todas las instrucciones se encuentra en la ayuda de Proton.
También se incluyen ejemplos en la carpeta PDS\Samples.
La diferencia entre PWM y HPWM, es que la primera genera PWM por software y la segunda por hardware.
Por eso la primer letra de la instrucción tiene una H. (Hardware)
Así que la instrucción HPWM únicamente puede funcionar con PIC's que tengan módulo CCP.
Y como algunos PIC tienen varios módulos CCP, por eso HPWM requiere saber por qué canal se va a generar la señal. (Channel)
Adjunto un ejemplo con HPWM.
No. En el PIC16F887, los registros involucrados para definir que un pin debe ser análogo, son los registros ANSEL y ANSELH.Con adcon le decis que todo el puerto es digital o alguna de sus salidas o por el contrario le indicas que todo el puerto o todas las entradas AN son analógicas o solo algunas de ellas
Con ADCON1=7 todo es digital
En cambio ADCON1=%10000000 'El PORTA.0 es analógico
Quedaría así
TRISA = %00000001 'AN0 como entrada
ADCON1 = %10000000 'PORTA.0 es analógico
Device 16F887
; Palabra de configuración
Reminders = Off
Config1 INTOSCIO,LVP_OFF,FCMEN_OFF,IESO_OFF,PWRTE_ON,WDTE_OFF
Config2 WRT_OFF,BOR21V
Reminders = On
Xtal 8MHz
Declare Create_Coff On ; Crear el archivo para depuración (.cof)
; Declaración de variables
Dim Valor_ADC As Word
Dim Temperatura As Float
Inicio:
OSCCON = %01110001 ; Configurar el oscilador interno a 8MHz.
; Configuración del ADC
ADCON1bits_ADFM = 1 ; Resultado con justificación a la derecha
Declare Adin_Res = 10 ; Resultado ADC a 10 bits
Declare Adin_Tad = FRC ; Reloj del ADC (FRC = Interno)
Declare Adin_Stime = 50 ; Tiempo de muestreo en uS
ANSEL = 1 ; Canal 0 análogico
ANSELH = 0 ; Puerto B Digital I/O (En vez de All_Digital)
; Configuración de la pantalla
Declare LCD_Type Alpha ; Alfanumérica
Declare LCD_DTPin PORTD.4 ; Bus de datos de RD4 a RD7
Declare LCD_RSPin PORTD.3 ; Pin RS en RD3
Declare LCD_ENPin PORTD.2 ; Pin E en RD2
Declare LCD_Interface 4 ; Modo a 4 Bits
Declare LCD_Lines 2 ; Pantalla de dos líneas
Cls ; Inicializar o limpiar la pantalla.
Print At 1,1, "Temperatura LM35"
Programa:
Valor_ADC = ADIn 0 ; Se lee el canal 0 y se guarda el valor en "Valor_ADC"
Temperatura = (150 * Valor_ADC) / 308; (308 = Valor que tendrá el ADC a 150 °C "1.5V")
; Mostrar el resultado en pantalla
Print At 2,1, Dec2 Temperatura, " ", 0xDF, "C "
GoTo Programa
End
No. En el PIC16F887, los registros involucrados para definir que un pin debe ser análogo, son los registros ANSEL y ANSELH.
(Y esto es nada más para los puertos con ADC)
Colocando un 1 en el bit 7 de ADCON1, lo que se hace es declarar una justificación hacia la derecha en el resultado de la conversión.
Ejemplo:
PHP:Device 16F887 ; Palabra de configuración Reminders = Off Config1 INTOSCIO,LVP_OFF,FCMEN_OFF,IESO_OFF,PWRTE_ON,WDTE_OFF Config2 WRT_OFF,BOR21V Reminders = On Xtal 8MHz Declare Create_Coff On ; Crear el archivo para depuración (.cof) ; Declaración de variables Dim Valor_ADC As Word Dim Temperatura As Float Inicio: OSCCON = %01110001 ; Configurar el oscilador interno a 8MHz. ; Configuración del ADC ADCON1bits_ADFM = 1 ; Resultado con justificación a la derecha Declare Adin_Res = 10 ; Resultado ADC a 10 bits Declare Adin_Tad = FRC ; Reloj del ADC (FRC = Interno) Declare Adin_Stime = 50 ; Tiempo de muestreo en uS ANSEL = 1 ; Canal 0 análogico ANSELH = 0 ; Puerto B Digital I/O (En vez de All_Digital) ; Configuración de la pantalla Declare LCD_Type Alpha ; Alfanumérica Declare LCD_DTPin PORTD.4 ; Bus de datos de RD4 a RD7 Declare LCD_RSPin PORTD.3 ; Pin RS en RD3 Declare LCD_ENPin PORTD.2 ; Pin E en RD2 Declare LCD_Interface 4 ; Modo a 4 Bits Declare LCD_Lines 2 ; Pantalla de dos líneas Cls ; Inicializar o limpiar la pantalla. Print At 1,1, "Temperatura LM35" Programa: Valor_ADC = ADIn 0 ; Se lee el canal 0 y se guarda el valor en "Valor_ADC" Temperatura = (150 * Valor_ADC) / 308; (308 = Valor que tendrá el ADC a 150 °C "1.5V") ; Mostrar el resultado en pantalla Print At 2,1, Dec2 Temperatura, " ", 0xDF, "C " GoTo Programa End
Device = 16F887
Xtal 8
Declare LCD_Type Alpha
Declare LCD_ENPin PORTD.3
Declare LCD_RSPin PORTD.2
Declare LCD_DTPin PORTD.4
Declare LCD_Lines 2
DelayMS 150
Cls
Print At 1,1, "Temperatura"
Declare Adin_Res 10 ; 10 bits de resolución
Declare Adin_Tad FRC ; Seleccionar RC OSC
Declare Adin_Stime 50 ; 50uS para tiempo de muestreo
Dim ADC As Word
Dim Temperatura As Float
INICIO:
ADC_Value = ADIn 0
Temperatura = ADC * 150 / 19712
Print At 2,1, "Temp: ", Dec1 Temperatura
DelayMS 1000
GoTo INICIO
'Motor Paso a Paso con L298N
Device 16F887
Xtal 4
All_Digital true
TRISD=%00000000
PORTD=0
Inicio:
PORTD=%00001001
DelayMS 200
PORTD=%00000011
DelayMS 200
PORTD=%00000110
DelayMS 200
PORTD=%00001100
DelayMS 200
GoTo Inicio
Doc, vos ves en alguna parte que yo menciono el 16F877?
Pregunto por ADCON y lo que leyo en en manual, solo me referí a eso a lo que pregunto, y me limite a eso en forma genérica y no particular, si ha leido alguna vez mis post verá que enfatizo en la lectura de la hoja de datos, no importa si es un micro un transitor o lo que fuere, hoja de datos al lado y todo lo que publica el fabricante
Y eso será precisamente porque los registros aunque tengan el mismo nombre, no tienen la misma función.
Precisamente estoy testeando un motor a pasos BIPOLAR en proteus y en protoboard fisicamente y si me gira correctamente en ambos sentidos,estuve revisando tu codigo y no se parece en nada al mio,tal vez ahi esta el error te recomiendo que lo revises...Sobre el motor Paso a Paso, tengo entendido que se maneja con secuencia binarias. Es correcto? Porque lo simulo en proteus y no gira en sentido horario como deseo. Aqui paso el codigo y el esquema.
PHP:'Motor Paso a Paso con L298N Device 16F887 Xtal 4 All_Digital true TRISD=%00000000 PORTD=0 Inicio: PORTD=%00001001 DelayMS 200 PORTD=%00000011 DelayMS 200 PORTD=%00000110 DelayMS 200 PORTD=%00001100 DelayMS 200 GoTo Inicio
Ejemplos ya no serán adecuados, porque estoy 100 % seguro que ya he puesto alguno.¡Increíble! ¿podrías darme algún ejemplo (referencia del PIC) en donde ANSEL, ADCON etc signifique otra cosa?.Gracias.
![]()
Precisamente estoy testeando un motor a pasos BIPOLAR en proteus y en protoboard fisicamente y si me gira correctamente en ambos sentidos,estuve revisando tu codigo y no se parece en nada al mio,tal vez ahi esta el error te recomiendo que lo revises...
Ejemplos ya no serán adecuados, porque estoy 100 % seguro que ya he puesto alguno.
Y lo digo porque aquí existe un Buscador.
Aparte de eso, la hoja de datos así lo dice.
Muchos podrán hablar de leer y releer una hoja de datos, pero he visto que esas personas no ayudan.
Mencionar datos y características se obtienen al ver la hoja de datos.
He visto posts que preguntan por algo que se obtiene viendo la hoja de datos.
Y no pocos, bastantes.
Ahora, te diré algo muy importante...
Cuando no eres capaz de comprender lo que en ella viene, creo que será el momento de regresar a la Universidad y preguntarle a tu Catedrático, eso que no comprendes.
Yo actualmente respondo a preguntas que no puedan tener una explicación lógica y basada en fundamentos que lo puedan demostrar.
Hola a todos.
Mecatrodatos, muy bien el tutorial.
Atricio , en el adjunto , te dejo simulación en proteus de comunicación por usart de dos 876.
En el cual estoy utilizando ADC ,PWM,LCD y USART.
Esta simulado y probado en real , por lo tanto funciona, espero que te sea de utilidad.
Feliz navidad a todos