Search Results - Pic+timer

Home Forums Search Search Results for 'Pic timer'

Viewing 15 results - 1 through 15 (of 18 total)
  • Author
    Search Results
  • #13755
    Yash
    Participant

    Hey guys,

    I am working with PIC18F4620 micro in MPLAB with XC8 compiler below is the code I have written to initialize SPI. In the code i am trying to generate clock pluses by continuously sending 0xAA to the SPI output and I am simulating this code in PIC18 simulator, but I am not getting any signal on either of the pins (clk or the DO) and similarly I am also not getting any signal on the IC too. In simulation it is stuck at SSPSTAT –> BF waiting for it to go high and even if I set the flag high in simulation manually it still won’t generate any clock signal.  |O                 There must be some silly mistake that I might have made please have a look.

     

    Code

     

     

    #include <xc.h>

    #include <stdlib.h>

    #include <stdio.h>

    #include <stdint.h>

    #include <math.h>

    #include <pic18f4620.h>

     

     

    // PIC18F4620 Configuration Bit Settings

     

    // CONFIG1H

    #pragma config OSC = HSPLL      // Oscillator Selection bits (HS oscillator, PLL enabled (Clock Frequency = 4 x FOSC1))

    #pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)

    #pragma config IESO = OFF       // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)

     

    // CONFIG2L

    #pragma config PWRT = ON        // Power-up Timer Enable bit (PWRT enabled)

    #pragma config BOREN = ON       // Brown-out Reset Enable bits (Brown-out Reset enabled and controlled by software (SBOREN is enabled))

    #pragma config BORV = 3         // Brown Out Reset Voltage bits (Minimum setting)

     

    // CONFIG2H

    #pragma config WDT = OFF        // Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))

    #pragma config WDTPS = 32768    // Watchdog Timer Postscale Select bits (1:32768)

     

    // CONFIG3H

    #pragma config CCP2MX = PORTC   // CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)

    #pragma config PBADEN = OFF     // PORTB A/D Enable bit (PORTB<4:0> pins are configured as digital I/O on Reset)

    #pragma config LPT1OSC = OFF    // Low-Power Timer1 Oscillator Enable bit (Timer1 configured for higher power operation)

    #pragma config MCLRE = ON       // MCLR Pin Enable bit (MCLR pin enabled; RE3 input pin disabled)

     

    // CONFIG4L

    #pragma config STVREN = OFF     // Stack Full/Underflow Reset Enable bit (Stack full/underflow will not cause Reset)

    #pragma config LVP = OFF        // Single-Supply ICSP Enable bit (Single-Supply ICSP disabled)

    #pragma config XINST = OFF      // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))

     

    // CONFIG5L

    #pragma config CP0 = OFF        // Code Protection bit (Block 0 (000800-003FFFh) not code-protected)

    #pragma config CP1 = OFF        // Code Protection bit (Block 1 (004000-007FFFh) not code-protected)

    #pragma config CP2 = OFF        // Code Protection bit (Block 2 (008000-00BFFFh) not code-protected)

    #pragma config CP3 = OFF        // Code Protection bit (Block 3 (00C000-00FFFFh) not code-protected)

     

    // CONFIG5H

    #pragma config CPB = OFF        // Boot Block Code Protection bit (Boot block (000000-0007FFh) not code-protected)

    #pragma config CPD = OFF        // Data EEPROM Code Protection bit (Data EEPROM not code-protected)

     

    // CONFIG6L

    #pragma config WRT0 = OFF       // Write Protection bit (Block 0 (000800-003FFFh) not write-protected)

    #pragma config WRT1 = OFF       // Write Protection bit (Block 1 (004000-007FFFh) not write-protected)

    #pragma config WRT2 = OFF       // Write Protection bit (Block 2 (008000-00BFFFh) not write-protected)

    #pragma config WRT3 = OFF       // Write Protection bit (Block 3 (00C000-00FFFFh) not write-protected)

     

    // CONFIG6H

    #pragma config WRTC = OFF       // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) not write-protected)

    #pragma config WRTB = OFF       // Boot Block Write Protection bit (Boot Block (000000-0007FFh) not write-protected)

    #pragma config WRTD = OFF       // Data EEPROM Write Protection bit (Data EEPROM not write-protected)

     

    // CONFIG7L

    #pragma config EBTR0 = OFF      // Table Read Protection bit (Block 0 (000800-003FFFh) not protected from table reads executed in other blocks)

    #pragma config EBTR1 = OFF      // Table Read Protection bit (Block 1 (004000-007FFFh) not protected from table reads executed in other blocks)

    #pragma config EBTR2 = OFF      // Table Read Protection bit (Block 2 (008000-00BFFFh) not protected from table reads executed in other blocks)

    #pragma config EBTR3 = OFF      // Table Read Protection bit (Block 3 (00C000-00FFFFh) not protected from table reads executed in other blocks)

     

    // CONFIG7H

    #pragma config EBTRB = OFF      // Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) not protected from table reads executed in other blocks)

     

     

     

    #define rs   PORTDbits.RD6   //LATBbits.LB6

    #define en   PORTDbits.RD7   //LATBbits.LB7

    #define _XTAL_FREQ 40000000

     

    #define le PORTDbits.RD4 //bus bar control

    #define watch 0b00000001

    #define drain_valve 0b10000000

    #define cal_led 0b01000000

     

    #define level_sw PORTEbits.RE2

     

    #define CS_PIN         PORTCbits.RC2 //3     // Chip Select

    #define TRIS_CS_PIN    TRISCbits.TRISC2

    #define DIN_PIN        PORTCbits.RC4     // Data in

    #define TRIS_DIN_PIN   TRISCbits.TRISC4

    #define DOUT_PIN       PORTCbits.RC5 //6    // Data out

    #define TRIS_DOUT_PIN  TRISCbits.TRISC5

    #define SCK_PIN        PORTCbits.RC3 //5    // Clock

    #define TRIS_SCK_PIN   TRISCbits.TRISC3

     

    void config_spi(void);

    unsigned char write_spi(unsigned char mybyte);

    unsigned char read_spi(void);

     

    void main(){

    TRISB =0x00;                        // lcd 0-7

    TRISD =0x00;                        // D6, D7

    TRISC = 0b10010011;

    TRISE =0b101;

    PORTEbits.RE1 = 0;

    PORTB =0x00;

    PORTD =0x00;

     

    CS_PIN        = 1;     // Chip Select

     

    ADCON0 = 0x00;

    ADCON1 = 0b00001111;               // all pins digital

     

    unsigned char data=’a’;

    config_spi();

     

     

    while(1) write_spi(0xAA);

    }

     

     

    void config_spi(void){

    TRIS_CS_PIN   = 0;

    TRIS_DIN_PIN  = 1;

    TRIS_DOUT_PIN = 0;

    TRIS_SCK_PIN  = 0;

    SSPSTAT =0b10000000;

    //SSPCON1 =0x22;

    SSPCON1 = 0b00100010;

    SSPADD =0x00;

    CS_PIN        = 0;     // Chip Select

    }

     

    unsigned char write_spi(unsigned char mybyte){

    SSPCON1bits.WCOL =0;

    PIR1bits.SSPIF =0;

    SSPBUF = mybyte;

    //while(!SSPSTATbits.BF);

    while(!PIR1bits.SSPIF);

    return SSPBUF;

    }

     

    unsigned char read_spi(void){

    while(!SSPSTATbits.BF);

    return SSPBUF;

    }

     

    yamabonadine
    Participant

    Hi,

    I have in my pocession a microphone, an amplifier and a pic18f452. I have already connected the microphone to the amplifier. I did it on a turntable. I will connect the output of my microphone on the deck with an annalog port on the picdem Board and ground with ground on the picdem board. The channelA0 of the picdem board is reserved for the potentiometer so I have to use another port different from port A to connect the output of my Microphone, for exemple PORTC.
    concerning programming I have to write a program that allows me to digitize this analog signal from the microphone and send it through the uart of my picdem board to a module blutooth HC05. the Picdem Board have an integrated ADC (10bit).

    this is what i already do.can you suggest me anything? MY CODE

    #pragma config OSC=HS,WDT=OFF,LVP=OFF // HS Oszillator, Watchdog Timer disabled, Low Voltage Programming

    #include “p18f452.h”

    #include “lcd.h”

    extern void lcd_printf (const char* message);

    extern void lcd_gotoxy (char row,char column);

    extern void lcd_clear (void);

    extern void lcd_init (void);

    extern void lcd_byte (char num);

    extern void lcd_int (int num);

    extern void lcd_putc (char num);

    void high_prior_InterruptHandler (void);

    void low_prior_InterruptHandler (void);

    unsigned int x=0, y=0;

    unsigned char signal_in[];

    unsigned char signal_out[];

    unsigned char empfangspuffer,sendepuffer;

    #pragma code high_prior_InterruptVector = 0x08

    void high_prior_InterruptVector(void)

    {

    _asm

    goto high_prior_InterruptHandler

    _endasm

    }

    #pragma code low_prior_InterruptVector = 0x18

    void low_prior_InterruptVector(void)

    {

    _asm

    goto low_prior_InterruptHandler

    _endasm

    }

    void init (void)

    {

    lcd_init();

    lcd_clear();

    /*UART serielle Schnittstelle initialisieren*/

    RCSTAbits.SPEN = 1; // Serial Port Enabled for TX & RX

    RCSTAbits.CREN = 0; // Continuous Receive Enabled

    TXSTAbits.BRGH = 1; // High Baud Rate Selected

    SPBRG = 25; // Naud Rate = FOSC / (16(X+1)) // 4MHZ Asynch & HSpeed

    TXSTAbits.SYNC = 0;

    /*ISR ,Interrupt Serielle Schnittstelle initialisieren*/

    PIE1bits.RCIE = 1; //Enable USART Interrupt

    PIR1bits.RCIF = 0; //Clear USART RX Interrupt Flag

    IPR1bits.RCIP = 1; //High Priority Enable

    TRISCbits.TRISC6 = 1; // 0b10111111;

    //AD-Interrupts

    PIR1bits.ADIF = 0; // Clear ADC Interrupt Flag

    IPR1bits.ADIP = 0; //SET to Low Priority

    PIE1bits.ADIE = 1; // Enable ADC Interrupt

    // Allgemeine Interrupts

    RCONbits.IPEN = 1;

    INTCONbits.GIE =1;

    INTCONbits.PEIE =1;

    //AD Einstellungen

    TRISAbits.RA0 = 1; //Port RA0 Poti auf Eingang setzen

    TRISEbits.RE0 = 1; //configure RE0 as input pin for Microphone

    ADCON1=0x8B; // Make RA0/AN0 and RE0 pin as analog pin

    ADCON0=0xA9; //Fosc/32, Channel 5

    ADCON0bits.ADON = 1; // Enable ADC

    }

    /* UART Receive*/

    #pragma code

    #pragma interrupt high_prior_InterruptHandler

    void high_prior_InterruptHandler(void)

    {

    //code

    }

    /*sendung mit uart TX*/

    #pragma code

    #pragma interrupt low_prior_InterruptHandler

    void low_prior_InterruptHandler(void)

    {

    //code

    }

    /*AD Wandlung*/

    #pragma code

    #pragma interrupt low_prior_InterruptHandler

    void low_prior_InterruptHandler(void)

    {

    if(PIR1bits.ADIF == 1) //A/D-Wandlung starten

    {

    x = ADRESH; //A/D-Ergebnis Bit 2 bis 10

    y = ADRESL;

    PIR1bits.ADIF = 0;

    ADCON0bits.GO_DONE = 1; // ADC neu starten

    }

    void main()

    {

    //code

    }

    i want your help for Programming please.

    Regards

    yamabonadine
    Participant

    <p style=”border: 0px; margin: 0px 10px 1em 0px; padding: 0px; color: #000000; font-family: Tahoma, sans-serif; font-size: 12px;”>Hi,</p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px; color: #000000; font-family: Tahoma, sans-serif; font-size: 12px;”><span id=”result_box” lang=”en” style=”border: 0px; margin: 0px; padding: 0px;” xml:lang=”en”><span style=”border: 0px; margin: 0px; padding: 0px;”>I have in my pocession a microphone, an amplifier and a pic18f452.</span> <span style=”border: 0px; margin: 0px; padding: 0px;”>I have already connected the microphone to the amplifier.</span> <span style=”border: 0px; margin: 0px; padding: 0px;”>I did it on a turntable.</span> <span style=”border: 0px; margin: 0px; padding: 0px;”>I will connect the output of my microphone on the deck with an annalog port on the picdem Board and ground with ground on the picdem board.</span> <span style=”border: 0px; margin: 0px; padding: 0px;”>The channelA0 of the picdem board is reserved for the potentiometer so I have to use another port different from port A to connect the output of my Microphone, for exemple PORTC.</span>
    <span style=”border: 0px; margin: 0px; padding: 0px;”>concerning programming I have to write a program that allows me to digitize this analog signal from the microphone and send it through the uart of my picdem board to a module blutooth HC05. the Picdem Board have an integrated ADC (10bit).</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px; color: #000000; font-family: Tahoma, sans-serif; font-size: 12px;”>this is what i already do.can you suggest me anything? MY CODE</p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px; color: #000000; font-family: Tahoma, sans-serif; font-size: 12px;”></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>#pragma config OSC=HS,WDT=OFF,LVP=OFF // HS Oszillator, Watchdog Timer disabled, Low Voltage Programming</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>#include “p18f452.h”</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>#include “lcd.h”</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>extern void lcd_printf (const char* message);</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>extern void lcd_gotoxy (char row,char column);</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>extern void lcd_clear (void);</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>extern void lcd_init (void);</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>extern void lcd_byte (char num);</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>extern void lcd_int (int num);</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>extern void lcd_putc (char num);</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>void high_prior_InterruptHandler (void);</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>void low_prior_InterruptHandler (void);</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>unsigned int x=0, y=0;</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>unsigned char signal_in[];</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>unsigned char signal_out[];</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>unsigned char empfangspuffer,sendepuffer;</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>#pragma code high_prior_InterruptVector = 0x08</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>void high_prior_InterruptVector(void)</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>{</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> _asm</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> goto high_prior_InterruptHandler</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> _endasm</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>}</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>#pragma code low_prior_InterruptVector = 0x18</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>void low_prior_InterruptVector(void)</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>{</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> _asm</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> goto low_prior_InterruptHandler</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> _endasm</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>}</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>void init (void)</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>{</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> lcd_init();</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> lcd_clear();</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>/*UART serielle Schnittstelle initialisieren*/</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> RCSTAbits.SPEN = 1; // Serial Port Enabled for TX & RX</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> RCSTAbits.CREN = 0; // Continuous Receive Enabled</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> TXSTAbits.BRGH = 1; // High Baud Rate Selected </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> SPBRG   = 25; // Naud Rate = FOSC / (16(X+1)) // 4MHZ Asynch & HSpeed</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> TXSTAbits.SYNC = 0;</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>/*ISR ,Interrupt Serielle Schnittstelle initialisieren*/</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> PIE1bits.RCIE = 1; //Enable USART Interrupt</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> PIR1bits.RCIF = 0; //Clear USART RX Interrupt Flag</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> IPR1bits.RCIP = 1;  //High Priority Enable</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> TRISCbits.TRISC6 = 1; // 0b10111111;</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>//AD-Interrupts </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> PIR1bits.ADIF = 0; // Clear ADC Interrupt Flag</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> IPR1bits.ADIP = 0; //SET to Low Priority</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> PIE1bits.ADIE = 1; // Enable ADC Interrupt</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>// Allgemeine Interrupts</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> RCONbits.IPEN = 1;</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> INTCONbits.GIE =1;</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> INTCONbits.PEIE =1;</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>//AD Einstellungen</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>    TRISAbits.RA0 = 1;         //Port RA0 Poti auf Eingang setzen</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>    TRISEbits.RE0 = 1;         //configure RE0 as input pin for Microphone</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>    ADCON1=0x8B;            // Make RA0/AN0 and RE0 pin as analog pin </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>    ADCON0=0xA9;            //Fosc/32, Channel 5</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>    ADCON0bits.ADON = 1;     // Enable ADC</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>}</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>/* UART Receive*/</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>#pragma code</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>#pragma interrupt high_prior_InterruptHandler</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>void high_prior_InterruptHandler(void)</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>{</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>              //code</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>}</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>/*sendung mit uart TX*/</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>#pragma code</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>#pragma interrupt low_prior_InterruptHandler</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>void low_prior_InterruptHandler(void)</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>{</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>              //code</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>}</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>/*AD Wandlung*/</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>#pragma code</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>#pragma interrupt low_prior_InterruptHandler</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>void low_prior_InterruptHandler(void)</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>{</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>    if(PIR1bits.ADIF == 1)          //A/D-Wandlung starten</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>    {</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>        x = ADRESH;                //A/D-Ergebnis Bit 2 bis 10</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>        y = ADRESL;</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>        PIR1bits.ADIF = 0;</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>        ADCON0bits.GO_DONE = 1;   // ADC neu starten</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>    }</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>void main()</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>{</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”> </span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px;”><span style=”color: #000000; font-family: Tahoma, sans-serif;”><span style=”font-size: 12px;”>}</span></span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px; color: #000000; font-family: Tahoma, sans-serif; font-size: 12px;”><span lang=”en” style=”border: 0px; margin: 0px; padding: 0px;” xml:lang=”en”>i want your help for Programming please.</span></p>
    <p style=”border: 0px; margin: 1em 10px 1em 0px; padding: 0px; color: #000000; font-family: Tahoma, sans-serif; font-size: 12px;”><span lang=”en” style=”border: 0px; margin: 0px; padding: 0px;” xml:lang=”en”>Regards</span></p>

    #13461
    charmi pabari
    Participant

    How can I interface two HC-SR04 ultrasonic distance sensor with PIC 16F877A using a single timer (timer 1) ?

    GITANJALI
    Participant

    Hello,

    I am working on PIC 12F1840 and MPLABX IDE 3.35 . I have written a code for reading PWM pulse width at one pin and writing that value to another PWM pin. But, at the time of simulation in logic analyzer output PWM pulse is not continuous. Is it a correct way to use capture mode and compare mode in one code ?  Please check following code and guide me.

    /*
    * File: general.c
    * Author: Murumkar
    *
    * Created on 25 January, 2017, 9:27 AM
    
    *
    *
    * read input (freq 400Hz) RA2 pulse width and write to RA5 (PWM with freq 18Kz)
    *
    *
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <xc.h>
    #pragma config FOSC =INTOSC, PLLEN =OFF, WDTE =OFF, MCLRE =ON,
    #pragma config CLKOUTEN =OFF, IESO =OFF, FCMEN =OFF,CP =OFF, CPD =OFF,BOREN=OFF
    #pragma config WRT=OFF,STVREN=ON,BORV=LO,LVP=OFF
    
    unsigned char counter=0;//Overflow counter
    int count = 0;
    unsigned char timer1_value1 @ 0x2020;
    unsigned char timer1_value2 @ 0x2040;
    unsigned int timer1_value @ 0x2060;
    unsigned int Pulse @ 0x2080;
    unsigned int PulseWidth @ 0x20A0;
    
    delay()
    {
      int i;
      for(i=0;i<30;i++)
      {
        ;
      }
    }
    
    void pwm_start()
    {
      TRISAbits.TRISA2 = 1;
      APFCONbits.CCP1SEL = 0;
      CCP1CONbits.CCP1M = 0x05; // capture mode with each rising edge
      TRISAbits.TRISA2 = 0;
    
      TRISAbits.TRISA2 = 1; // RA2 as input
      ANSELAbits.ANSA2 = 0; // RA2 as Digital
    }
    
    void init_interrupt()
    {
      INTCONbits.GIE = 1; // enable global interrupt
      INTCONbits.PEIE = 1; // enable peripheral interrupt
      PIE1bits.TMR1IE = 1; // enable timer 1
      PIE1bits.CCP1IE = 1; // enable capture mode interrupt
    }
    
    void pwm_again_start()
    {
      TRISAbits.TRISA5 = 1; // RA5
      APFCONbits.CCP1SEL = 1; // CCP1 function on RA5
      CCP1CONbits.CCP1M = 0x0C; // PWM mode: P1A active-high; P1B active-high
      CCP1CONbits.P1M = 0x00; // Single output; P1A modulated; P1B assigned as port pins
      PR2 = 0xDD; //
      CCPR1L = 0x00; // UPDATE PWM TON=0
      CCP1CONbits.DC1B = 0x00; // the two LSbs of the PWM duty CYCLE
      PIR1bits.TMR2IF = 0; // TIMER2 FLAG CLEAR
      T2CONbits.T2CKPS = 0x00; // PRESCALER 1
      T2CONbits.TMR2ON = 1; // TIMER 1
      TRISAbits.TRISA5 = 0; //
    }
    
    void SetPWMDutyCyle(unsigned int duty_cycle_value)
    {
      CCP1CONbits.DC1B = duty_cycle_value & 0x03; // two LSbs of the PWM duty cycle.
      CCPR1L = (duty_cycle_value >> 2); // MSB VALUES
      while(PIR1bits.TMR2IF==1)
      {
        PIR1bits.TMR2IF =0;
      }
      T2CONbits.TMR2ON = 1; // TIMER 1*/
      delay();
    }
    
    void interrupt ISR()
    {
      if(PIE1bits.CCP1IE && PIR1bits.CCP1IF)
      {
        count++;
        if(count==1)
        {
          T1CONbits.TMR1ON = 1; // start timer 1
          PORTAbits.RA1 = ~PORTAbits.RA1;
          counter = 0;
          PIR1bits.CCP1IF = 0;
          CCP1CONbits.CCP1M = 0x04; // capture mode with each falling edge
          timer1_value1 = TMR1L;
          timer1_value2 = TMR1H;
          timer1_value = timer1_value1 + (((int)TMR1H) << 8);
        }
        else if(count==2)
        {
          count = 0;
          PORTAbits.RA1 = ~PORTAbits.RA1;
          INTCONbits.GIE = 0; // disable global interrupt
          INTCONbits.PEIE = 0; // disable peripheral interrupt
          PIE1bits.TMR1IE = 0; // disable timer 1
          PIE1bits.CCP1IE = 0; // disable capture mode interrupt
          counter = 0;
          PIR1bits.CCP1IF = 0;
          CCP1CONbits.CCP1M = 0x05; // capture mode with each rising edge
          timer1_value1 = TMR1L;
          timer1_value2 = TMR1H;
          Pulse = timer1_value1 + (((int)TMR1H) << 8);
          PulseWidth = Pulse - timer1_value;
          pwm_again_start();
          SetPWMDutyCyle(PulseWidth);
          pwm_start();
          init_interrupt();
        }
      }
    }
    
    void micro_init()
    {
      OSCCONbits.SPLLEN = 0; // PLL DISABLE
      OSCCONbits.IRCF = 0x0F; // 16 MHZ INTERNAL FREQ
      OSCCONbits.SCS = 0x02; // INTERNAL OSCILLATR BLOCK
    }
    
    void main()
    {
      micro_init();
      pwm_start();
    
      TRISAbits.TRISA1 = 0; // RA1 as output
      ANSELAbits.ANSA1 = 0; // RA1 as digital
    
      TRISAbits.TRISA2 = 1; // RA2 as input
      ANSELAbits.ANSA2 = 0; // RA2 as Digital
    
     TRISAbits.TRISA5 = 0; // RA5 as output
    
      init_interrupt();
      while (1)
      {
        ;
      }
    }
    

    thanking you ,

    Gitanjali

    emufambirwi
    Participant

    I am doing a project which requires that I turn on and off two LED’s independently from a computer using serial port communication. I send a character like ‘A’ via the serial port and turn on one LED for say 1 minute and send another character like ‘B’ and turn on another LED for 2 minutes. My problem is that when using Timer0 of pic 18F87k22, I can’t implement the 1 minute and 2 minute delays independently. When I turn on the one LED the other one doesn’t respond and vice versa. I am simulating using Proteus and my code is is in MikroC as shown below:

    char uart_rd;
    char cnt;
    
    void interrupt () 
    {
      if (TMR0IF_bit) 
      {
         cnt++;                 // increment counters
         TMR0IF_bit = 0;        // clear TMR0IF
    
         TMR0L = 0xDC;             // set TMR0 for aproximetly 1 sec
         TMR0H = 0x0B;
      }
    }
    
    void one_min_delay () 
    {
      TRISB  = 0;              // PORTB is output
      TMR0H = 0x0B;
      TMR0L = 0xDC;               // Timer0 initial value
    
      T0CON = 0x84;            // Set TMR0 to 8bit mode and prescaler to 256
      GIE_bit = 1;             // Enable global interrupt
      TMR0IE_bit = 1;          // Enable Timer0 interrupt
    
      cnt = 0;                 // Initialize cnt
    
      do 
      {
        if (cnt >= 60) 
        {
          LATB = 0x00;      // turnoff PORTB LEDs
          cnt = 0;             // Reset cnt
        }
      }while(1);
    }
    
    void two_min_delay () 
    {
      TRISB  = 0;              // PORTB is output
      TMR0H = 0x0B;
      TMR0L = 0xDC;               // Timer0 initial value
      T0CON = 0x84;            // Set TMR0 to 8bit mode and prescaler to 256
      GIE_bit = 1;             // Enable global interrupt
      TMR0IE_bit = 1;          // Enable Timer0 interrupt
    
      cnt = 0;                 // Initialize cnt
    
      do 
      {
        if (cnt >= 120) 
        {
          LATB = 0x00;      // turnoff PORTB LEDs
          cnt = 0;             // Reset cnt
        }
      }while(1);
    }
    
    void main() 
    {
      UART1_Init(9600);               // Initialize UART module at 9600 bps
      Delay_ms(100);                  // Wait for UART module to stabilize
      TRISB = 0x00;
    
      while (1) 
      {
        if (UART1_Data_Ready()) 
        {     // If data is received,
          uart_rd = UART1_Read();
        }
    
        if (uart_rd=='A')   
        {
          LATB = 0x01;
          one_min_delay();
        }
        else if (uart_rd == 'B')   
        {
          PORTB = 0x02;
          two_min_delay ();
        }
        uart_rd ='\0';
      }
    }
    
    #11112
    Ligo George
    Keymaster

    Using Interrupt with PIC Microcontroller – MikroC

    Please read the datasheet of PIC 16F877A microcontroller… there you can find the procedure to use timer / counter module.

    #11111
    Yash
    Participant

    I am using PIC16F877A with 8MHz external oscillator. And coding in MicroC

    Idea is to measure the pules produce by the sensor for 1 sec and then multiply the value with 60 hence the RPM which I will display on LCD.

    Please tell me if my method is right and how to implement it. As I want to show rpm on lcd so I would like it be slow enough so that rpm readings are stable.

    I have no experience in timers  if you can give me a basic code to get started with, then I can play with it and find my way to solution ?

    Thank You.

    #10509
    chirag patel
    Participant

    hi, i m trying to interrupt timer on specific time but its doing randomly please help me out.

    #include <htc.h>
    unsigned  char vary,count=10;
    #define _XTAL_FREQ 4000000
    
    void main()
    {
      TRISD=0b00000000;
      //PORTD=0b00000000;
    
      GIE=1;
      T0IE=1;
      TMR0=0;
      PSA=0;
      T0CS=0;
      PS0=1;
      PS1=1;
      PS2=0;
      T0SE=1;
    
      while (1)
      {
        PORTD=0b00000000;
      }
    }
    static void interrupt isr()
    {
      if (T0IF == 1)
      {
        GIE=0;
        T0IF=0;
        vary++;
        if (vary=1)
        {
          PORTD= 0b11111111;
        }
        vary=0;
        GIE=1;
        T0IE=1;
      }
    }
    
    sahu
    Participant

    With reference to the article Interfacing HC-SR04 Ultrasonic Distance Sensor with PIC Microcontroller, I am trying to change the microcontroller to PIC 16F676.

    #define _XTAL_FREQ 8000000
    
    #define RS RC5
    #define EN RC4
    #define D4 RC0
    #define D5 RC1
    #define D6 RC2
    #define D7 RC3
    
    //#include <xc.h>
    #include <htc.h>
    
    #include "lcd.h";
    #include <pic16f676.h>
    
    // BEGIN CONFIG
    #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
    #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
    #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
    #pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
    //#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
    #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
    //#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
    #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
    //END CONFIG
    
    void delayMs(int x);
    
    void main()
    {
      int a;
    
      TRISA = 0b00010001; //RA0 as Input PIN (ECHO)
      TRISC = 0x00; // LCD Pins as Output
    
      Lcd_Init();
    
      Lcd_Set_Cursor(1,1);
      Lcd_Write_String("Developed By");
      Lcd_Set_Cursor(2,1);
      Lcd_Write_String("electroSome");
    
      delayMs(3000);
      Lcd_Clear();
    
      T1CON = 0x10; //Initialize Timer Module
    
      while(1)
      {
        TMR1H = 0; //Sets the Initial Value of Timer
        TMR1L = 0; //Sets the Initial Value of Timer
    
        RA0 = 1; //TRIGGER HIGH
        __delay_us(10); //10uS Delay
        RA0 = 0; //TRIGGER LOW
    
        while(!RA1); //Waiting for Echo
        TMR1ON = 1; //Timer Starts
        while(RA1); //Waiting for Echo goes LOW
        TMR1ON = 0; //Timer Stops
    
        a = (TMR1L | (TMR1H<<8)); //Reads Timer Value
        a = a/58.82; //Converts Time to Distance
        a = a + 1;   //Distance Calibration
        if(a>=2 && a<=400) //Check whether the result is valid or not
        {
          Lcd_Clear();
          Lcd_Set_Cursor(1,1);
          Lcd_Write_String("Distance = ");
    
          Lcd_Set_Cursor(1,14);
          Lcd_Write_Char(a%10 + 48);
    
          a = a/10;
          Lcd_Set_Cursor(1,13);
          Lcd_Write_Char(a%10 + 48);
    
          a = a/10;
          Lcd_Set_Cursor(1,12);
          Lcd_Write_Char(a%10 + 48);
    
          Lcd_Set_Cursor(1,15);
          Lcd_Write_String("cm");
        }
        else
        {
          Lcd_Clear();
          Lcd_Set_Cursor(2,1);
          Lcd_Write_String("Out of Range");
        }
        delayMs(400);
      }
    }
    /************************************************************/
    
    void delayMs(int x)
    {
      int i;
      for (x ;x>0;x--)
      {
        for (i=0;i<=110;i++);
      }
    }

    I am using Hi-Tech C compiler and getting following errors.

    Error [1347] ; 0. can’t find 0x21 words (0x21 withtotal) for psect “text142” in segment “CODE” (largest unused contiguous range 0x1E)
    Error [1347] ; 0. can’t find 0x12 words (0x12 withtotal) for psect “text140” in segment “CODE” (largest unused contiguous range 0x7)
    Error [1347] ; 0. can’t find 0xF words (0xf withtotal) for psect “text144” in segment “CODE” (largest unused contiguous range 0x7)

    #10165
    Ivan
    Participant

    I’m trying send data to the PIC using the Terminal Window on Proteus, but something is wrong and I don’t understand why. I attached the Proteus project and *.HEX.

    The PIC is 16F628a.

    #define _XTAL_FREQ 8000000
    
    #define RS RB0
    #define EN RB3
    #define D4 RB4
    #define D5 RB5
    #define D6 RB6
    #define D7 RB7
    
    #include <xc.h>
    #include "lcd.h"
    #include "uart.h"
    
    #pragma config FOSC = INTOSCCLK // Oscillator Selection bits (INTOSC oscillator: CLKOUT 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)
    
    void main()
    {
      TRISB = 0b000000110;
      TRISA0 = 0;
    
      Lcd_Init();
      Lcd_Clear();
      Lcd_Set_Cursor(1,1);
      Lcd_Write_String("WAITING...");
    
      UART_Init(9600);
      UART_Write_Text("Terminal is running!");
    
      while(1)
      {
        if(UART_Data_Ready())
        {
          Lcd_Clear();
          RA0 = 1;
          Lcd_Write_String(UART_Read_Text);
          __delay_ms(1000);
        }
      }
    }
    

    The UART.h and LCD.h from https://electrosome.com/lcd-pic-mplab-xc8/ and https://electrosome.com/uart-pic-microcontroller-mplab-xc8/

    Somebody know why the code is not working?

    #10164
    Ligo George
    Keymaster

    Hello, It seems like you converted our program in the article Interfacing HC-SR04 with PIC Microcontroller to CCS C.

    In that tutorial I used prescaler : 2, so you should use :

    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);

    and you should change a-4 to a in printf().

    Please check the above program after making these changes and let me know whether it works or not. If it works, I can include it too in that article such that it will help others too.

    #10154
    enhee enheelee
    Participant

    What is wrong. The below code. Please help me.

    #include "C:\Users\enhee\Documents\lcd16f873a.h"
    #define use_portb_lcd TRUE
    #include <LCD.C>
    #byte timer1=0x10
    #bit  trigger=0x07.2
    #bit  echo=0x07.1
    #bit on_off=0x10.0
    
    unsigned char zai=12;
    
    void main()
    {
      float a;
      set_tris_c(0x02);
      timer1=0x10;
    
      setup_adc_ports(NO_ANALOGS);
      setup_adc(ADC_OFF);
    
      setup_spi(SPI_SS_DISABLED);
    
      setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
      setup_timer_1(T1_DISABLED);
      setup_timer_2(T2_DISABLED,0,1);
    
      setup_comparator(NC_NC_NC_NC);
      setup_vref(FALSE);
    
      lcd_init();
      lcd_gotoxy(1,1);
      printf(lcd_putc,"zai medregch");
    
      for(;;)
      {
        set_timer1(0x0000);
        trigger=1;
        delay_us(10);
        trigger=0;
    
        while(!echo);       //Waiting for Echo
        on_off = 1;         //Timer Starts
        while(echo);        //Waiting for Echo goes LOW
        on_off = 0;         //Timer Stops
    
        a=get_timer1();
        a = a/58.82;
        a = a + 1;
    
        if(a>=2 && a<=400)   //Check whether the result is valid or not
        {
          lcd_gotoxy(1,2);
          printf(lcd_putc,"zai=%f cm",a-4);
        }
        else
        {
          lcd_gotoxy(1,2);
          printf(lcd_putc,"heterhii hol bna");
        }
        delay_ms(200);
      }
    }
    
    
    #9378
    Ligo George
    Keymaster

    PIC may reset due to different problems..
    Unexpected reset might not be due to Watchdog timer..
    Use a good power supply..

    #9359

    In reply to: timer in pic18f

    Ligo George
    Keymaster

    You may solve it by incrementing a variable as above…. but the best solution is to use PIC’s internal timer module..
    eg :

    //Start Timer
    for(a=read_timer;a< a_value;)
    {
        //Do Something
    }
    //Stop Timer
    

    You can use Timer0 module… Read the Timer0 section in the datasheet.

Viewing 15 results - 1 through 15 (of 18 total)
>