Quoting Ernst Bachmann <[EMAIL PROTECTED]>:
>
>
> Ok, so the hardware works.
> Could you try without stackmodel=large?
I have tried all sorts of pragmas, without stack model large etc... None of the
options made any difference.
> Otherwise, could you post an minimal program to reproduce your problems?
> Maybe
> just blink a LED or something?
>
Here is a minimal program that illustrates the problem:
/*******************************************************************************
* hello.c: A "hello world" program
******************************************************************************/
#define __pic18f2550
#include <pic18fregs.h>
#include <sdcc-lib.h>
#include <delay.h>
#define OUT LATCbits.LATC7
typedef unsigned int config;
code char at __CONFIG3H _config4 = 0x00; //0b00000000
void init(void)
{
OSCCON=0xf7; //0b11110111
TRISA=0xff; //0b00000000
TRISB=0xff; //0b11111111
TRISC=0x00; //0b11111110
}
void blinkarg(unsigned char blinks)
{
int i;
//blinks=5;
blinks=+2;
for(i=0;i<blinks;i++) {
OUT=1;
delay1ktcy(1);
OUT=0;
delay1ktcy(1);
}
blinks=0;
}
void main(void)
{
init();
while(1) {
blinkarg(3); // blink (arg) times
delay100ktcy(1);
}
}
******
What happens is that the function is called with the argument "3", the function
should add 2, and thus the "led" (=the oscilloscope) should show 5 blinks, but
it only blinks twice.
If I comment blinks=+2; and uncomment blinks=5; it does blink five times.
Quoting "John J. McDonough" <[EMAIL PROTECTED]>:
> Take a closer look at your LCDputc() routine. You appear to raise LCD
> Enable -before- you put the data on the lines. You want to put the data on
> the lines, raise LCD Enable, wait 450ns, then drop LCD Enable. Then move on
> to the next nybble. If you raise LCD Enable before putting the data on the
> lines the result will be more or less random.
>
The datasheet of the LCD (displaytech 162) says to first raise EN, then load the
data. Anyway, this version works, as does your suggestion, when I use a 16f90
and the PICC Lite compiler.
>
> Also, I'm not sure what delay1ktcy() exactly results in, but you need a
> substantial wait after sending the byte. I don't recall exactly what it
> needs to be but it seems like it is on the order of 2ms ... in any case way
> more than the 450ns needed to strobe the data into the LCD.
>
> --McD
delay1ktcy(1) delays for 1000 cycles, which is about 0,5 ms (an eternity).
PS. Sorry for double posting this question, I was unsuccessful in deleting the
first one.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Sdcc-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sdcc-user