Autor Tema: Cursillo en C18 para PICS DESDE CERO  (Leído 250327 veces)

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

Desconectado thomas666

  • PIC10
  • *
  • Mensajes: 5
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #405 en: 30 de Agosto de 2012, 16:27:08 »
buenas tardes

soy nuevo utilizando c18............ estoy programando un pic 18f4550 y tengo este programa

#include <p18f4550.h>
#include <delays.h>            //libreria de retardo
#include <math.h>
#include <stdio.h>

//configuracion de bits
#pragma config FOSC=INTOSC_EC   //CONFIGURACION DEL OSCILADOR 
#pragma config WDT=OFF         //configuracion de Watchdog "desabilitado"
#pragma config MCLRE=OFF      //configuracion del MCLRE "desabilitado"
#pragma config LVP=OFF         //configuracion del single supply "desabilitado"
#pragma config PBADEN=OFF      //configuracion del puerto I/O digitales PORTB<0:4>
unsigned char N,X,Y;
void main (void)         //inicio del programa
{
TRISB=0X00;                     


for(N=0;N=3;N++)
{
LATB++;
Delay1KTCYx(10);
}

LATB=255;

}

el problema es el siguiente :
cuando lo simulo en proteus el programa cargado no sale de la secuencia de for aunque se supone que deba solamente llegar hasta N=3 y salir no lo hace y sigue la secuencia hasta completar los 8 bits de salida (255) y vuelve a comenzar desde 0 no se porque no sale de ese bucle
que tengo mal............

gracias..............

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #406 en: 30 de Agosto de 2012, 18:00:23 »
Tiene que ser N<=3 o N<4... Es una comparación y no una asignación lo que debe hacerse  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Micom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 782
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #407 en: 04 de Marzo de 2013, 02:19:36 »
No se cual sea la politica o la forma que utilizan los moderadores para escoger a que conjunto de post le ponen un chincheta, pero en mi humilde opinion creo seria bueno que se le pusiera a este tema una chincheta ya que esta muy orientado a la programacion en C18 y el trabajo del amigo Henry esta muy bien explicado. Bueno no pretendo ser un gran conocedor del tema y me estoy iniciando en la programacion del C18, Tampoco pretendo ser un mandon. Solo expreso mi humilde opinion. 
El programador GTP USB PLUS es un super programador
GRACIAS dobles amigo SISPIC

Tan solo queda seguir sobreviviendo

Desconectado alvaro2043

  • PIC10
  • *
  • Mensajes: 41
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #408 en: 25 de Julio de 2013, 01:43:31 »
Buenas noches.. tengo una pequeña duda... En CCS para definir una variables que solo presenta 2 estados 1 ó 0 de define con : int1 Nombre_constante.. en C18 como puedo definir esa misma variable, he mirado el manual y existe una que se llama BIT, pero al utilizarla me aparece error.. como puedo definir ese tipo de variable en C18.

Gracias.

Éxitos a todos

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #409 en: 25 de Julio de 2013, 08:52:52 »
Hola Alvaro2043. En C18 no existe el tipo de dato bit o int1.
Sólo está disponible como bit en el nuevo compilador de microchip XC8.
Saludos.
Jukinch
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado alvaro2043

  • PIC10
  • *
  • Mensajes: 41
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #410 en: 26 de Julio de 2013, 02:54:37 »
Gracias jukinch.

Ando trabajando en la generación de una señal pwm desde hace uuff jeje  con el timer 0 la idea es ir variando el ciclo de trabajo, no voy a utilizar los modulos CCP por que necesito generar mas de 2 señales pwm, para arrancar he estado cacharreando con el timer 0 generando una señal cuadrada de frecuencia de 20kHZ, en el momento de hacer el codigo y simularlo en proteus, no concuerda con los calculos hechos.. Quiero un desbordamiento de 25us PERO al poner los cursores en el osciloscopio en proteus me sale de 30us Aprox. No se que ando haciendo mal, espero me puedan ayudar anexo codigo

Código: [Seleccionar]
#include <p18f4550.h>
#include <delays.h>

//////////////////Configuaracion de bits//////////////////////////

#pragma config PLLDIV = 1 //En este caso no importa por que vamos a utilizar Oscilador Interno
#pragma config CPUDIV = OSC1_PLL2 ////En este caso no importa por que vamos a utilizar Oscilador Interno
#pragma config USBDIV = 1   /////En este caso no importa por que vamos a utilizar Oscilador Interno
#pragma config FOSC = INTOSCIO_EC  //Configurando oscilador interno
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOR = OFF
#pragma config BORV = 0
#pragma config VREGEN = OFF
#pragma config WDT = OFF
#pragma config WDTPS = 16384
#pragma config MCLRE = OFF
#pragma config LPT1OSC = OFF
#pragma config PBADEN = ON
#pragma config CCP2MX = OFF
#pragma config STVREN = OFF
#pragma config LVP = OFF
#pragma config ICPRT = OFF
#pragma config XINST = OFF
#pragma config DEBUG = OFF
#pragma config CP0 = OFF,CP1 = OFF,CP2 = OFF,CP3 = OFF
#pragma config CPB = OFF
#pragma config CPD = OFF
#pragma config WRT0 = OFF,WRT1 = OFF,WRT2 = OFF,WRT3 = OFF
#pragma config WRTB = OFF
#pragma config WRTC = OFF
#pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF,EBTR2 = OFF,EBTR3 = OFF

#define  bandera INTCONbits.TMR0IF

void Interrupt_isr_TMR0(void);

//-------------------------------------------------------

void main (void)
{
 //------------Configuracion de puertos--------------------------
    TRISB=0x00;
    LATB=0x00;
    ADCON1=0x0F;  //Todos los pines digitales.

//----------------Configuracion de oscilador interno------------------
    OSCCON=0b01110110;  //Oscilador Interno a 8Mhz
//--------------------------------------------------------
    RCONbits.IPEN=1; //Habilito prioridad de interrupcion.
    INTCONbits.GIE_GIEH=1; //Habilito todas las interrupciones de alta prioridad
    INTCONbits.TMR0IE=1; //Habilito Interrupcion TMR0 por desbordamiento
    bandera=0; //Pongo a cero la bandera de desbordamiento.
//-------------------------------------------------------------
//------------Configurando el Timer0--------------------------
    T0CON=0b11001000;   //Configurado a 8 bits sin prescales
    TMR0L=00;

    while(1){}

    
}

#pragma code HighVector = 0x08

void high_ISR(void){
    _asm goto Interrupt_isr_TMR0 _endasm
}
//Rutina de Interrupciones de alta prioridad

#pragma code
#pragma interrupt Interrupt_isr_TMR0

void Interrupt_isr_TMR0 (void){
    TMR0L=206;   // 256-206= 50 paso: Como se sabe que cada paso es de 500ns 500ns*50=25us el desbordamiento.
    if(bandera==1){
        bandera=0;
        LATBbits.LATB0=!LATBbits.LATB0;
        
    }

 }
    


Gracias y Exitos a todos
« Última modificación: 26 de Julio de 2013, 09:35:19 por alvaro2043 »

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #411 en: 26 de Julio de 2013, 04:36:23 »
Hola alvaro2043, te comento dos cosas por si las hubieras pasado por alto, ten en cuenta que la simulación no deja de ser una simulación, lo mas correcto seria probarlo en la vida real. Otra cosa a tener en cuenta es que el valor de tus cálculos nunca serán los mismos a los que usas en el programa, ten presente que al programar en C y compilar el código el compilador crea instrucciones adicionales las cuales te variaran el valor.
Recuerdo haber hecho alguna temporización y tener que hacerla en ASM ajustando el valor a cargar en TMR0 y aun así tener que poner algún que otro NOP dentro de la interrupción. 

Saludos!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado alvaro2043

  • PIC10
  • *
  • Mensajes: 41
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #412 en: 26 de Julio de 2013, 09:39:02 »
Gracias miguel por responder. Voy a probar esto en la vida real y les voy a comentar.

En el caso que no me de el valor esperado como puedo hacer que el desbordamiento sea exactamente los 25us.. ¿Me tocaria a prueba y error cargando TMR0L hasta llegar a los 25us?

He mirado el diagrama de bloques del timer0 y existe un bloque (SYNC WITH INTERNAL CLOCK) y habla de  un delay (2Tcy delay) si dado el caso esto tiene que ver algo.
 Me nace otra pregunta. Inicialmente yo puse mi TMR0L=0 osea que se desbordaría a 128us -> (8Mhz/4)-> Tcy=500ns-> 500ns*256 ya que es de 8bits y al simularlo me da exactamnte los 128us.. No se por que al cargar el TMR0L=206 no obtengo el valor calculado :(

Gracias.

Éxitos a Todos.
« Última modificación: 26 de Julio de 2013, 10:09:28 por alvaro2043 »

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #413 en: 26 de Julio de 2013, 10:20:20 »
Alvaro2043:
Además de lo que indica el amigo Miquel_S dale una leída a este hilo.
http://www.todopic.com.ar/foros/index.php?topic=37217.0
Prestale atención a lo que indica Reiniertl.
Perdón por lo breve pero estoy / móvil.
Saludos.
Jukinch
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado hector915

  • PIC12
  • **
  • Mensajes: 78
    • Blog Personal.
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #414 en: 06 de Octubre de 2013, 03:12:29 »
Me he leido las 21 paginas desde el inicio ( :)me tomo cuatro dias) de este cursillo gracias a microcadaver pude ampliar mis conocimientos,a suky por las dudas que me despejo en cuanta a las estructuras de los archivos...Definitivamente que foro Son unos cracks.
if you can imagine it, you can embed it

Desconectado electroipod

  • PIC16
  • ***
  • Mensajes: 166
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #415 en: 30 de Octubre de 2013, 16:10:41 »
Le pido al moderador de este foro que este cursillo lo ponga en la parte superior de este mismo foro para que sea mas accesible para todos aquellos que comienzan con c18, es un cursillo bastante didactico y no quisiera que se pierda en las profundidades del olvido.

Desconectado nitsuga2585

  • PIC10
  • *
  • Mensajes: 1
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #416 en: 21 de Enero de 2015, 16:51:43 »
hola que tal, estoy tratando de comunicar 2 pic por i2c en c18. puedo mandar mensajes del master al esclavo pero del esclavo al master no puedo, les agradeceria si me puedieran ayudar.
El codigo del maestro es:
Código: [Seleccionar]
/** I N C L U D E S **********************************************************/
#include <p18cxxx.h>
#include <i2c.h>
#include <delays.h>
#include <string.h>
#include <stdlib.h> //Libreria para conversiones a string
#include <stdio.h>

        #pragma config PLLDIV   = 5         // (20 MHz crystal on PICDEM FS USB board)
        #pragma config CPUDIV   = OSC1_PLL2   
        #pragma config USBDIV   = 2         // Clock source from 96MHz PLL/2
        #pragma config FOSC     = HSPLL_HS
        #pragma config FCMEN    = OFF
        #pragma config IESO     = OFF
        #pragma config PWRT     = OFF
        #pragma config BOR      = ON
        #pragma config BORV     = 3
        #pragma config VREGEN   = ON      //USB Voltage Regulator
        #pragma config WDT      = OFF
        #pragma config WDTPS    = 32768
        #pragma config MCLRE    = ON
        #pragma config LPT1OSC  = OFF
        #pragma config PBADEN   = OFF
//      #pragma config CCP2MX   = ON
        #pragma config STVREN   = ON
        #pragma config LVP      = OFF
//      #pragma config ICPRT    = OFF       // Dedicated In-Circuit Debug/Programming
        #pragma config XINST    = OFF       // Extended Instruction Set
        #pragma config CP0      = OFF
        #pragma config CP1      = OFF
//      #pragma config CP2      = OFF
//      #pragma config CP3      = OFF
        #pragma config CPB      = OFF
//      #pragma config CPD      = OFF
        #pragma config WRT0     = OFF
        #pragma config WRT1     = OFF
//      #pragma config WRT2     = OFF
//      #pragma config WRT3     = OFF
        #pragma config WRTB     = ON       // Boot Block Write Protection
        #pragma config WRTC     = OFF
//      #pragma config WRTD     = OFF
        #pragma config EBTR0    = OFF
        #pragma config EBTR1    = OFF
//      #pragma config EBTR2    = OFF
//      #pragma config EBTR3    = OFF
        #pragma config EBTRB    = OFF


/** V A R I A B L E S ********************************************************/
#pragma udata
unsigned char ENVIO_I2C[10];
#pragma udata

unsigned char DATO;

/** P R I V A T E  P R O T O T Y P E S ***************************************/
void YourHighPriorityISRCode();
void YourLowPriorityISRCode();
unsigned char escribirI2C(unsigned char DIRECCION);
unsigned char leerI2C(unsigned char slave_addr, unsigned char direcc);

/** V E C T O R  R E M A P P I N G *******************************************/

#pragma code HIGH_INTERRUPT_VECTOR = 0x08
void High_ISR (void) {
_asm goto YourHighPriorityISRCode _endasm
}
#pragma code LOW_INTERRUPT_VECTOR = 0x18
void Low_ISR (void){
_asm goto YourLowPriorityISRCode _endasm
}

#pragma code


#pragma interrupt YourHighPriorityISRCode
void YourHighPriorityISRCode(){
#if defined(USB_INTERRUPT)
USBDeviceTasks();
    #endif
}

#pragma interruptlow YourLowPriorityISRCode
void YourLowPriorityISRCode(){

}

/** D E C L A R A T I O N S **************************************************/
#pragma code
/******************************************************************************
 * Function:        void main(void)
 *
 * PreCondition:    None
 *
 * Input:           None
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        Main program entry point.
 *
 * Note:            None
 *****************************************************************************/
/** L E D ***********************************************************/
void main(void)
{
TRISD=0x00;

CloseI2C();

//Iniciamos I2C
    OpenI2C(MASTER, SLEW_ON); //MASTER, 400KHZ
    SSPADD = 119; // I2C_clock = FOSC/(4 * (SSPADD + 1)) => FOSC = 20MHz y Scl=100KHz  //119


// escribirI2C(0xA2);

//ESPERO UN TIEMPO GRANDE ANTES DE LLER
// Delay10KTCYx(200);

DATO = leerI2C(0xA2, 0x40);

while(1){
PORTD = DATO;
}
}

unsigned char leerI2C(unsigned char slave_addr, unsigned char direcc) {
    //slave_addr => Direccion de Escritura del dispositivo I2C
    unsigned char reg,reg2;
    IdleI2C(); // Esperar a que el periferico esté disponible
    StartI2C(); // Generar condicion Start
    while (SSPCON2bits.SEN); // Espera a que se inicie la condicion START en los pines SDA y SCL
    WriteI2C(slave_addr); // Slave address to SSPBUF (Dummy Write)
    WriteI2C(direcc); // Word address to SSPBUF
    RestartI2C(); // Generar condicion Restart
    while (SSPCON2bits.RSEN); // Espera a que se inicie la condicion RESTART en los pines SDA y SCL
    WriteI2C(slave_addr | 0x01); // Slave address to SSPBUF (Read)
// while(!DataRdyI2C());
    reg = ReadI2C(); // Leer dato de Memoria I2C
while (SSPSTATbits.BF == 1)
    NotAckI2C(); // Generar condicion NACK
    while (SSPCON2bits.ACKEN); // Espera a que se inicie la condicion NACK en los pines SDA y SCL
    StopI2C(); // Generar condicion STOP
    while (SSPCON2bits.PEN); // Espera a que se inicie la condicion STOP en los pines SDA y SCL
    Delay1KTCYx(25);
    return (reg);
}

y el codigo del esclavo es:
Código: [Seleccionar]
#include <p18f4620.h>
#include <delays.h>
#include <usart.h>
#include <stdio.h>
#include <string.h>
#include <i2c.h>

#pragma config OSC=HSPLL
#pragma config IESO=OFF
#pragma config PWRT=ON
#pragma config WDT=OFF
#pragma config MCLRE=ON
#pragma config XINST=OFF
#pragma config DEBUG=ON
#pragma config FCMEN = OFF
#pragma config LVP=OFF
#pragma config BOREN=OFF

/** V A R I A B L E S ********************************************************/
unsigned int ADDR,DATO,KBIT,i,j,k,L;

#pragma udata
unsigned char ENVIO_I2C[10];
#pragma udata

/** P R I V A T E  P R O T O T Y P E S ***************************************/
void low_isr(void);
void high_isr(void);
unsigned char escribirI2C ( unsigned char slave_addr);
unsigned char leerI2C ( unsigned char slave_addr, unsigned char direcc);

/** V E C T O R  R E M A P P I N G *******************************************/
//Vector de interrupcion de baja prioridad
#pragma code low_vector=0x18
void interrupt_at_low_vector(void)
{
 _asm GOTO low_isr _endasm
}
#pragma code /* Regresa al lugar de donde dio el salto */
#pragma interruptlow low_isr
void low_isr (void)
{
 //En esta secccion se coloca las lineas de codigo
 //con grado de baja prioridad
}
 
 
//Vector de interrupcion de alta prioridad
#pragma code high_vector=0x08
void interrupt_at_high_vector(void)
{
 _asm GOTO high_isr _endasm
}
#pragma code /* Regresa al lugar de donde dio el salto */
#pragma interrupt high_isr
void high_isr (void)
{
//VERIFICA SI SALTO INTERRUPCION, SI EL SSPBUF ESA COMPLETO (BF) Y SI SE TRATA DE LA DIRECCION(D_A)
if (PIR1bits.SSPIF == 1 && SSPSTATbits.BF == 1 && SSPSTATbits.D_A == 0){
ADDR = SSPBUF; //LEO LA DIRECCION
PIR1bits.SSPIF = 0; //BAJO BANDERA
SSPSTATbits.BF = 0;     //BAJO DATO DE SSPBUF LLENO
}

//Esto comprueba si una interrupción ha sido recibido, SSPBUF es realmente completo de nuevo,
//y SSPBUF contiene datos (no una dirección). Si todos los cheques que puede leer el byte de datos:
if (PIR1bits.SSPIF == 1 && SSPSTATbits.BF == 1 && SSPSTATbits.D_A == 1){
DATO = SSPBUF;
//Ahora que tenemos nuestros datos tenemos que hacer un poco de limpieza adicional:
PIR1bits.SSPIF = 0; // interrupción clara
SSPSTATbits.D_A = 0; // establecer D_A poco a 0 para que podamos comprobar si el byte posterior es más datos.
}
if (PIR1bits.SSPIF == 1 && SSPSTATbits.BF == 0 && SSPSTATbits.D_A == 0){
WriteI2C(0xA2);
  }
PIR1bits.SSPIF = 0; // interrupción clara
}


/** D E C L A R A T I O N S **************************************************/
#pragma code
/******************************************************************************
 * Function:        void main(void)
 *
 * PreCondition:    None
 *
 * Input:           None
 *
 * Output:          None
 *
 * Side Effects:    None
 *
 * Overview:        Main program entry point.
 *
 * Note:            None
 *****************************************************************************/
/************************************************************************************************/
/*************************************************************************************************************/
//PROGRAMA PRINCIPAL
void main(void)
{
TRISD=0x00;

ADCON1 = 0xFF;  //DESHABILITA ENTRADAS ANALOGICAS

RCONbits.IPEN = 1; // habilitamos Prioridades
IPR1bits.SSPIP = 1; //PRIORIDAD ALTA AL I2C
// Configuracion de las interrupciones.
PIE1bits.SSPIE = 1; // Habilita la interrupcion del modulo SSP
INTCONbits.PEIE = 1; // Habilita las interrupciones de los perifericos
INTCONbits.GIE = 1; // Habilita las interrupciones globales!

PIR1bits.SSPIF = 0; // BORRO LA BANDERA DE LA INTERRUPCION

    //Iniciamos I2C
OpenI2C(SLAVE_7,SLEW_ON);//MASTER, 400KHZ
SSPADD = 0xA2;

//CONDICIONES INICIALES
i = j = KBIT = 0;
k = 1;

while(1){


}
}

unsigned char escribirI2C(unsigned char DIRECCION) {
    //slave_addr => Direccion de Escritura del dispositivo I2C
    IdleI2C(); // Esperar a que el periferico esté disponible
    StartI2C(); // Generar condicion Start
    while (SSPCON2bits.SEN); // Espera a que se inicie la condicion START en los pines SDA y SCL
    WriteI2C(DIRECCION); // Slave address to SSPBUF (Write)
    //WriteI2C(30); // Write Data to SSPBUF
    StopI2C(); // Generar condicion Stop
    while (SSPCON2bits.PEN); // Espera a que se inicie la condicion STOP en los pines SDA y SCL
    //while (EEAckPolling(slave_addr_w));  //Espera que se complete escritura.
}

como no me ha salido, trate de empezar con spi pero ni siquiera he podido mandar un dato ajja, por favor ayuda!!!!!!

Desconectado syndu

  • PIC10
  • *
  • Mensajes: 12
Re:Cursillo en C18 para PICS DESDE CERO
« Respuesta #417 en: 05 de Mayo de 2016, 01:23:24 »
Buenas, mi problema es este: yo genero una señal onda cuadrada de 8,30 ms, y vario su duty cicle a travez de un potenciometro, la cosa es que a medida que vario se cambia la amplitud de mi señal y deja de ser 5 volts,, no se porque sucede esto!! la señal debe variar el ciclo de trabajo de 0 a 180!! esto es lo llevo! espero pronta respuesta!

#include <p18cxxx.h>
#include <delays.h>
#include <stdlib.h>
#include "lcd.h"
#pragma config PLLDIV = 5 // (20 MHz crystal)
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC = HSPLL_HS //HSPLL_HS
#pragma config WDT = OFF
//variable lcd
CHAR lcd[16];
CHAR msg[]="% Alfa= ";

unsigned long n=0;
unsigned long conta=0;
float constante=17.64;            // valor calculado por regla de tres
unsigned int ADC,Alfa;
unsigned long Valor_Escalado;
unsigned int adc_read(unsigned char ch);
// variable interrupcion
unsigned int count=0;
void initTimer (void);
void InterruptHandlerHigh (void);
// High priority interrupt vector
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh //jump to interrupt routine
_endasm
}
// High priority interrupt routine
#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh ()
{
if (PIR1bits.TMR2IF == 1)
{
PIR1bits.TMR2IF = 0;
count++;
if(count==n)
PORTC=0;
if(count==512)
{
PORTC=0xFF;
count=0;
}
}
}
void main()
{
TRISB=TRISC=TRISD = 0x00; // set direction to be output
PORTC=0x0;
ADCON1 = 0x0F;
INTCONbits.GIE = 1; //enable global interrupts
INTCONbits.PEIE = 1; //enable peripherical interrupts
   lcd_init();
   TRISAbits.TRISA0 = 1;
   initTimer();
do{
      lcd_clear();
      ADC = adc_read(0);                  // Read from channel 0 (AN0)
      lcd_display(1,1,msg);                // Display "mV = "
      Valor_Escalado=ADC;
      Valor_Escalado = constante*Valor_Escalado;                   // Scale up the result
      Alfa = Valor_Escalado / 100;               // Decimal part
      itoa(Alfa,lcd);                   // Convert Vdec to string in "lcd"
      lcd_display(1,8,lcd);                // Output to LCD
      Delay10KTCYx(250);
   n=Alfa*2.85-1;
      //initTimer();

}while(1);
}
void initTimer (void)
{
PR2 = 194; // T = (PR2+1) * 4 *(1/Fosc)*PRESCALER
// 16.25us= (PR2+1)* 4*(1/Fosc)*PRESCALER : Fosc=48Mhz : PRESCALER=1
T2CON=0;
T2CONbits.T2CKPS1 = 0;
T2CONbits.T2CKPS0 = 0; // 1:1 - prescaler
IPR1bits.TMR2IP = 1; // high priority
PIR1bits.TMR2IF = 0;
PIE1bits.TMR2IE = 1; //1=enable Interrupt
T2CONbits.TMR2ON = 1;
}

unsigned int adc_read(unsigned char ch){
   unsigned int result;
   ADCON0 = (ch & 0x0F) << 2;
   ADCON1 = 0x0B;   //RA0-RA3 Analog inputs.
   ADCON2 = 0x96;   // right justify,TACQ=4*TAD, TAD=1/(FOSC/64)
   ADCON0bits.ADON = 1; // ADC on
   ADCON0bits.GO_DONE = 1; // start
   while (ADCON0bits.GO_DONE == 1);
   result = ((unsigned int)(ADRESH) << 8) + ADRESL;
   ADCON0bits.ADON = 0;   // ADC Off
   return result;
}

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re:Cursillo en C18 para PICS DESDE CERO
« Respuesta #418 en: 05 de Mayo de 2016, 04:03:58 »
Hola syndu!
por favor no repita mensaje, leerte las Reglas de nuestros foro, si nadie contesta es porque nadie sabe de tu problema y aqui nadie esta para resolver problema Urgente de nadie.
espero que lo comprenda al leer nuestras Reglas.

un Saludos


 

anything