|
|
View previous topic :: View next topic |
Author |
Message |
JimB
Joined: 25 Aug 2005 Posts: 65 Location: Huntington Beach, CA
|
Program halts when call to printf() to LCD is performed. |
Posted: Mon Apr 17, 2006 10:34 am |
|
|
The following is code in-work. I have just added the LCD to the code. However, when I attempt to print to the LCD, near the end of the program, it appears to halt. Even the PWM output stops. This occurrs whether or not the LCD is connected or not. I have tried placing the lcd_init() in different locations but it has no effect. Any ideas?
Code: |
#include <16F877A.h>
#device ICD=TRUE
#fuses HS,NOWDT,NOPROTECT,NOLVP
#device ADC=10
#use delay(clock=5000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
//#use rs232(debugger)
#define ld_reg_b (0x2000)
#define ld_a_update_ab (0x9000)
#define PUSH1 PIN_A5
#define PUSH2 PIN_A4
#define ampon PIN_C5
#define vref24 (0xd8) // A/D reference set command and value
#define maxsel PIN_B1 // Low activates the D/A
#define maxclk PIN_B4 // D/A clock
#define maxdat PIN_B2 // D/A data
#include <lcd.c>
#int_ext
void int_ext_isr(void)
{
delay_us(15);
}
main()
{
long offset = 0; // 01A6 in hex
long refout = 845; // 034D in HEX
long const_off, const_ref;
int refh,refl,offh,offl,chk_offh,chk_offl,chk_refh,chk_refl;
long vref=0xd800;
long chk_off,chk_ref,value;
float check=345; //just for testing the LCD output
int i;
//lcd_init();
//delay_ms(15);
output_high(PIN_B5); //enable rs232 transceiver
****Many lines of code ommitted for clarity***
//lcd_init();
//delay_ms(15);
while(1) //This code starts a square wave and measures its ampltude after being processed
{
lcd_init();
delay_ms(15);
if(!input(PUSH1))
{
setup_ccp1(ccp_pwm);
setup_timer_2(T2_DIV_BY_1, 66, 2);
set_pwm1_duty(33);
setup_adc_ports(AN0_AN1_VSS_VREF);
setup_adc( ADC_CLOCK_INTERNAL );
set_adc_channel( 0 );
while (!input(push1))
{
//printf("Push yes\n\r"); //This section will be expanded
enable_interrupts(int_ext);
enable_interrupts(global);
EXT_INT_EDGE(H_to_L);
value = Read_ADC();
}
setup_ccp1(CCP_OFF);
}
else
{
setup_ccp1(CCP_OFF);
//printf("No push\n\r");
//printf("value = %04XL\n\r", value);
//printf(lcd_putc,"\fvalue %4.3f", check); //If this line is activated the program hangs
}
}
} |
|
|
|
treitmey
Joined: 23 Jan 2004 Posts: 1094 Location: Appleton,WI USA
|
|
Posted: Mon Apr 17, 2006 10:45 am |
|
|
Make a little program to test LCD init and basic functionality. Perhaps
the code is stuck waiting for the LCD to respond.
This test program will say if the problem is in the LCD module or the mix of the LCD and the rest of your program. |
|
|
newguy
Joined: 24 Jun 2004 Posts: 1907
|
|
Posted: Mon Apr 17, 2006 11:15 am |
|
|
Just to add to treitmey's response.....
The standard lcd driver that comes with CCS and that can be found on the board here uses handshaking to communicate with the lcd. The lcd module will assert data7 high while it is busy, and the code waits while this is the case. [I think.....check into it.....doing this from memory]
It sounds like your code is getting stuck at that point. Things to check for are the physical connection to the lcd, and whether you used #use fast_io() for the port(s) your lcd is connected to. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|