Hola quiero avisar que soy nuevo en este lenguaje estaba mirando unos codigos por la web y encontre un PWM en un microcontrolador y llamo mi atencion.
copie el codigo en mplab x y al compilarlo me crea el .hx pero sale un error en
__delay_ms(100); aun asi logra crearlo.
aqui va el codigo
dice que hay un error en el __delay_ms(100); pero no entiendo por que seria el error.
codigo de error:
la instruccion esta bien escrita no se cual seria el problema si pueden ayudarme.
:: warning: Omniscient Code Generation not available in Free mode
ahora este es el demo seria la cuasa de mi problema?.
o quizas algo no esta correctamente declarado?
otra cosa la idea del PWM el tiempo T1 (tiempo encendido o high) como puedo hacer para que no comience desde cero subo una foto de osciloscopio
en realidad que comience de cero no importa pero que no lo deje totalmente encendido que T2 no llegue a 0
esto es lo que no quiero que suceda
se que se incremente por programacion pero no encuentro como a ese incremento comenzar desde aqui.
y termine aqui
no comprendo como cambiar esos valores en la programacion. para poder dominar los tiempos T1/T2 de la frecuencia. la idea es que T2 nunca llegue a 0....por ende el led nunca debe quedar 100% encendido
quizas un if que cuando incremente a cierto valor lo reinicie o lo detenga pero no se como introducirlo en el codigo
copie el codigo en mplab x y al compilarlo me crea el .hx pero sale un error en
__delay_ms(100); aun asi logra crearlo.
aqui va el codigo
Código:
/*
* File: PWM.c
* Author: lucas
* Created on 15 de mayo de 2013, 13:58
* Microcontrolador: PIC16F628A
*
* Utilizando PWM para dimerizar un LED
*/
#include <xc.h> // Librería XC8
#define _XTAL_FREQ 4000000 // Indicamos a que frecuencia de reloj esta funcionando el micro
// PIC16F648A Configuration Bit Settings
#pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is digital input, MCLR internally tied to VDD)
#pragma config BOREN = ON // Brown-out Detect Enable bit (BOD enabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has digital I/O function, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
// FUNCION PRINCIPAL
void main(void) {
TRISB = 0; // Puerto B como salidas
PORTB = 0; // Limpio el puerto B
// CONFIGURANDO PWM
CCP1CON = 0b00001100; // Activamos el modo PWM
PR2 = 250; // Frecuencia 250Hz
T2CONbits.T2CKPS = 0b10; // Prescaler del timer 2 en 1:16
T2CONbits.TMR2ON = 1; // Arranca el PWM
// BUCLE INFINITO
unsigned char i; // Declaramos una variable
while (1){
for(i=0; i=50; i++)
{
CCPR1L = CCPR1L++; // Seteando el ciclo de trabajo
__delay_ms(100);
}
i=0; // Reiniciamos la variable para comenzar el ciclo de nuevo
}
}
dice que hay un error en el __delay_ms(100); pero no entiendo por que seria el error.
codigo de error:
Código:
CLEAN SUCCESSFUL (total time: 200ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory `C:/Users/****/Desktop/primeros pasos en C/xc8/led prende.X'
make -f nbproject/Makefile-default.mk dist/default/production/led_prende.X.production.hex
make[2]: Entering directory `C:/Users/****/Desktop/primeros pasos en C/xc8/led prende.X'
"C:\Program Files (x86)\Microchip\xc8\v1.12\bin\xc8.exe" --pass1 --chip=16F628A -Q -G --asmlist --double=24 --float=24 --opt=default,+asm,-asmfile,+speed,-space,-debug --addrqual=ignore --mode=free -P -N255 --warn=0 --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-osccal,-resetbits,-download,-stackcall,+clib "--errformat=%%f:%%l: error: %%s" "--warnformat=%%f:%%l: warning: %%s" "--msgformat=%%f:%%l: advisory: %%s" -o"build/default/production/led prende.p1" "led prende.c"
"C:\Program Files (x86)\Microchip\xc8\v1.12\bin\xc8.exe" --chip=16F628A -G --asmlist -mdist/default/production/led_prende.X.production.map --double=24 --float=24 --opt=default,+asm,-asmfile,+speed,-space,-debug --addrqual=ignore --mode=free -P -N255 --warn=0 --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-osccal,-resetbits,-download,-stackcall,+clib "--errformat=%%f:%%l: error: %%s" "--warnformat=%%f:%%l: warning: %%s" "--msgformat=%%f:%%l: advisory: %%s" -odist/default/production/led_prende.X.production.cof "build/default/production/led prende.p1"
Microchip MPLAB XC8 C Compiler V1.12
Copyright (C) 2012 Microchip Technology Inc.
License type: Node Configuration
:: warning: Omniscient Code Generation not available in Free mode
Memory Summary:
Program space used 2Dh ( 45) of 800h words ( 2.2%)
Data space used 5h ( 5) of E0h bytes ( 2.2%)
EEPROM space used 0h ( 0) of 80h bytes ( 0.0%)
Configuration bits used 1h ( 1) of 1h word (100.0%)
ID Location space used 0h ( 0) of 4h bytes ( 0.0%)
Running this compiler in PRO mode, with Omniscient Code Generation enabled,
produces code which is typically 40% smaller than in Free mode.
See http://microchip.com for more information.
make[2]: Leaving directory `C:/Users/****/Desktop/primeros pasos en C/xc8/led prende.X'
make[1]: Leaving directory `C:/Users/****/Desktop/primeros pasos en C/xc8/led prende.X'
BUILD SUCCESSFUL (total time: 4s)
Loading code from C:/Users/****/Desktop/primeros pasos en C/xc8/led prende.X/dist/default/production/led_prende.X.production.hex...
Loading symbols from C:/Users/****/Desktop/primeros pasos en C/xc8/led prende.X/dist/default/production/led_prende.X.production.cof...
Loading completed
la instruccion esta bien escrita no se cual seria el problema si pueden ayudarme.
:: warning: Omniscient Code Generation not available in Free mode
ahora este es el demo seria la cuasa de mi problema?.
o quizas algo no esta correctamente declarado?
otra cosa la idea del PWM el tiempo T1 (tiempo encendido o high) como puedo hacer para que no comience desde cero subo una foto de osciloscopio
en realidad que comience de cero no importa pero que no lo deje totalmente encendido que T2 no llegue a 0
esto es lo que no quiero que suceda
se que se incremente por programacion pero no encuentro como a ese incremento comenzar desde aqui.
y termine aqui
no comprendo como cambiar esos valores en la programacion. para poder dominar los tiempos T1/T2 de la frecuencia. la idea es que T2 nunca llegue a 0....por ende el led nunca debe quedar 100% encendido
quizas un if que cuando incremente a cierto valor lo reinicie o lo detenga pero no se como introducirlo en el codigo
Última edición: