-
Search Results
-
Topic: Problems with SPI
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.
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;
}
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
<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>How can I interface two HC-SR04 ultrasonic distance sensor with PIC 16F877A using a single timer (timer 1) ?
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
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'; } }Topic: Timer0 of PIC 16F887
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; } }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)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?
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); } }
