// LCD module connections
#include <p18f4520.h>
#define LCD_RS RB2_bit;
#define LCD_EN RB3_bit;
#define LCD_D4 RB4_bit;
#define LCD_D5 RB5_bit;
#define LCD_D6 RB6_bit;
#define LCD_D7 RB7_bit;
#define LCD_RS_Direction TRISB2_bit;
#define LCD_EN_Direction TRISB3_bit;
#define LCD_D4_Direction TRISB4_bit;
#define LCD_D5_Direction TRISB5_bit;
#define LCD_D6_Direction TRISB6_bit;
#define LCD_D7_Direction TRISB7_bit;
void pic_init(void);
void setup_MCU();
void display_common();
float read_voltage(unsigned short channel);
void convert_for_segments(unsigned long raw_data);
float read_humidity();
float read_temperature();
void display_data(unsigned char x, unsigned char y, float value);
void main()
{
pic_init();
setup_MCU();
display_common();
while(1)
{
display_data(1,2,read_temperature());
display_data(1,4,read_humidity());
}
}
void pic_init()
{
TRISA=0b00000011;
TRISB=0b00000000;
TRISC=0b00000000;
TRISD=0b00000000;
TRISE=0b00000000;
PORTA=0b00010000;
PORTB=0b00000000;
PORTC=0b00000000;
PORTD=0b00000000;
PORTE=0b00000000;
}
void setup_MCU()
{
LCD_Init();
ADC_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
delay_ms(500);
}
void display_common()
{
unsigned char disp1[] = "Temperature:";
unsigned char disp2[] = "Relative Humidity:";
unsigned char disp3[] = "C";
unsigned char disp4[] = "%";
Lcd_Out(1,1,disp1);
Lcd_Out(2,7,176);
Lcd_Out(2,7,disp3);
Lcd_Out(3,1,disp2);
Lcd_Out(4,6,disp4);
}
float read_voltage(unsigned short channel)
{
register unsigned long raw_v = 0;
rx float vin = 0;
unsigned short samples = 0;
for(samples = 0; samples < 64; samples++)
{
raw_v += adc_read(channel);
}
raw_v >>= 6;
vin = (raw_v * 0.0048875);
return vin;
}
float read_humidity()
{
register float HSM_20G = 0;
register float v = 0;
v = read_voltage(0);
HSM_20G = ((3.71 * v * v * v) - (20.65 * v * v) + (64.81 * v) - 27.44);
return HSM_20G;
}
float read_temperature()
{
register float HSM_20G = 0;
register float v = 0;
v = read_voltage(1);
HSM_20G = ((5.26 * v * v * v) - (27.34 * v * v) + (68.87 * v) - 17.81);
return HSM_20G;
}
void display_data(unsigned char x, unsigned char y, float value)
{
unsigned char c = 0;
register unsigned long conv = 0;
conv = (value * 100.0);
c = (conv * 0.001);
Lcd_Chr(y, x, 48 + c);
c = ((conv / 100) % 10);
Lcd_Chr_CP(48 + c);
Lcd_Chr_CP('.');
c = ((conv / 10) % 10);
Lcd_Chr_CP(48 + c);
c = (conv % 10);
Lcd_Chr_CP(48 + c);
delay_ms(100);
}
"It doesn't work " will not give you much response . Be specific on what's the error that happens. Does the code compile ? Have you tested your circuit with some simple program ?
#include <p18f4520.h>
void Init_LCD(void);
void W_ctr_8bit(char);
void W_data_8bit(char);
void Delay_1kcyc(void);
#define LCD_DATA PORTD
#define LCD_RS PORTBbits.RB1
#define LCD_E PORTBbits.RB2
unsigned char LCD_TEMP, i,j,k,m;
char MESS[8] = "WELCOME";
void main () {
ADCON1=0x0F;
TRISB = 0b11111001;
TRISD = 0;
Init_LCD();
for (i=0; i<7; i++)
W_data_8bit(MESS(i)); //get syntax error for this line
while(1);
}
void Init_LCD () {
W_ctr_8bit(0b00111000);
W_ctr_8bit(0b00001100);
W_ctr_8bit(0b00000110);
W_ctr_8bit(0b00000001);
W_ctr_8bit(0x02);
}
void W_ctr_8bit(char x) {
LCD_RS = 0;
LCD_E = 1;
LCD_DATA = x;
LCD_E = 0;
Delay_1kcyc();
}
void W_data_8bit(char x) {
LCD_RS = 1;
LCD_E = 1;
LCD_DATA = x;
LCD_E = 0;
Delay_1kcyc();
}
void Delay_1kcyc() {
unsigned int j;
for(j=0, j<32; j++);
}
Which line ? Is C18 the only option ? Look for compilers with built in libraries for lcd.
C:\Program Files\Microchip\MPLAB C18\src\pmc_common
3.2 EXTERNAL LCD FUNCTIONS
These functions are designed to allow the control of a Hitachi HD44780 LCD controller
using I/O pins from a PIC18 microcontroller. The following functions are provided:
The precompiled versions of these functions use default pin assignments that can be
changed by redefining the following macro assignments in the file xlcd.h, found in the
h subdirectory of the compiler installation:
The Microchip C18 does offer LCD Routines.
The source is available in the following directory:
I have attached a zip file with the source for your convenience.
Reference: MPLAB® C18 C COMPILER LIBRARIES, Section:Chapter 3. Software Peripheral Library, Pg. 75
I have used these libraries successfully numerous times, if you have any issues just post your questions in this thread.
BigDog
Any compiler that produces hex file is enough for pickit programmer. Hex file can be imported to mplab and can be used to program the microcontroller. JAL is no exception. There are lots of jal users who happen to be pickit users.
Please give the exact steps that you followed in trying to program.
1.Close all projects (Project menu close)and open files (Close,Close Workspace) in MPLAB.
2.Go to configure menu and then select the microcontroller that you want to program and click OK.(18f4520 is shown as supported by PICkit2 in MPLAB)
3.Go to File Menu and select import and select the hex file that you want to program and click open
4.Go to Programmer Menu,Select Programmer and select PIckit 2.
5.Click Reconnect or whatever menu option for enabling the programmer
6.You should see programmer enabled message in mplab output windows
7.Click Program from Programmer menu and if successfully programmed corresponding message will be indicated in output window.
Hope this should help you with programming hex file with pickit. When in doubt, please give real details on what goes wrong when you ask.
What i hv done is just same like what u mention above. I had tried to use others succeeded project hex file. but cnt manage put in to my programmer. i mean it show succeeded program into my pic but the value of the data din change at all from the program memory. the program doesnt program exactly the hex file. only led blinking hex file which build success using mplab is able to program into my pic. in other words, it seem like program which fail build in mplab was fail to program into my pic.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?