Fons Caloris
Wat baten kaars en bril als de uil niet lezen wil?
Ik wil de inhoud van een variabele weergeven op een lcd schermpje, maar dat werkt niet zoals ik eigenlijk gehoopt had.
De instructie "lcd_putsf("%d",snelheid)" geeft de error "to many parameters in function call"
Kan iemand me zeggen hoe het wél moet?
Ik gebruik CodeVision evaluation en een STK200 bord met een AT90S8515.
Het lcd op zich werkt.
Alvast bedankt!

Ik ben niet bekend met CodeVision, maar volgens mij moet je eerst een string declareren, en dan:
sprintf(snelheid_string,"%d",snelheid);
lcd_putsf(snelheid_string);
Fons Caloris
Wat baten kaars en bril als de uil niet lezen wil?
Bedankt voor je reactie, maar ik ben er nog niet helemaal uit.
De instructie lcd_putsf(snelheid_string); geeft de error "function parameter #1 incompatible with its declaration."
Iemand nog een tip?
Joszs
Eindelijk mijn site doet het http://home.concepts.nl/~pc106181/Jos/Index.html
Kijk ff in het header bestant naar de declaratie van die functie.
Als je geluk heb staat er daar ook wat comentaar bij
Post het dan ook ff hier
Joszs
Fons Caloris
Wat baten kaars en bril als de uil niet lezen wil?
Dit is de headerfile
/* LCD driver routines
CodeVisionAVR C Compiler
(C) 1998-2003 Pavel Haiduc, HP InfoTech S.R.L.
BEFORE #include -ING THIS FILE YOU
MUST DECLARE THE I/O ADDRESS OF THE
DATA REGISTER OF THE PORT AT WHICH
THE LCD IS CONNECTED!
EXAMPLE FOR PORTB:
#asm
.equ __lcd_port=0x18
#endasm
#include <lcd.h>
*/
#ifndef _LCD_INCLUDED_
#define _LCD_INCLUDED_
#pragma used+
void _lcd_ready(void);
void _lcd_write_data(unsigned char data);
// write a byte to the LCD character generator or display RAM
void lcd_write_byte(unsigned char addr, unsigned char data);
// read a byte from the LCD character generator or display RAM
unsigned char lcd_read_byte(unsigned char addr);
// set the LCD display position x=0..39 y=0..3
void lcd_gotoxy(unsigned char x, unsigned char y);
// clear the LCD
void lcd_clear(void);
void lcd_putchar(char c);
// write the string str located in SRAM to the LCD
void lcd_puts(char *str);
// write the string str located in FLASH to the LCD
void lcd_putsf(char flash *str);
// initialize the LCD controller
unsigned char lcd_init(unsigned char lcd_columns);
#pragma used-
#pragma library lcd.lib
#endif
Als pure beginner zegt het mij nog niet veel, dus alle hulp is welkom 
Berry
A PIC-based MP3 player: www.apic-bmp.nl.tt | Intresse in techniek? www.djoamersfoort.nl
ben ook niet bekent met deze C compiler, maar is er misschien een printf() functie? dan zou het zijn
printf("%d",waarde);
anders misschien
lcd_puts((str *)waarde); // zoiets
Ik heb nog ff verder gekeken. Heb je snelheid_string zo gedeclareerd?
char snelheid_string[10];En daarna dit? (En dus niet lcd_putsf, want dan zet je iets op het lcd dat in het flash staat, en aangezien dit een variabele is, staat ie niet in het flash)
sprintf(snelheid_string,"%d",snelheid);
lcd_puts(snelheid_string);Joszs
Eindelijk mijn site doet het http://home.concepts.nl/~pc106181/Jos/Index.html
Op 13 november 2004 15:09:57 schreef ka_bonthond:
sprintf(snelheid_string,"%d",snelheid); lcd_puts(snelheid_string);
De functie lcd_puts() verwacht dus een pointer naar een string
aangezien snelheid_sting het adderes bevat van het eerste element van snelheid_sting[10] moet dit laatste goed zijn ja.
En volgens mij hoeft die andere regel er dan niet bij te staan.
(correct me if I'm wrong) al een weer een tijdje niks met C gedaan
Joszs
[Bericht gewijzigd door Joszs op ]
Berry
A PIC-based MP3 player: www.apic-bmp.nl.tt | Intresse in techniek? www.djoamersfoort.nl
Fons Caloris
Wat baten kaars en bril als de uil niet lezen wil?
Iedereen alvast bedankt voor de antwoorden! Voor vandaag zit het er op met spelen... 
Morgen probeer ik nog één en ander uit, ik houd jullie op de hoogte!
Fons Caloris
Wat baten kaars en bril als de uil niet lezen wil?
Het werkt dus nog altijd niet! Wanneer de instructie uitgevoerd wordt dan verschijnen er telkens vier kleine puntjes op het display, ongeacht de inhoud van de variabele.
Dit is nu de volledige code:
#include <stdio.h>
#include <delay.h>
#include <90s8515.h>
#include <lcdstk.h>
char knipper;
int snelheid;
char snelheid_string;
void main()
{
knipper=0;
snelheid=1000;
DDRB=255;
PORTB=0;
DDRD=0;
lcd_init(20);
snelheid_string="500";
while(1)
{
knipper++;
delay_ms(snelheid);
PORTB=~(knipper&(~PIND));
if (~PIND.7) {snelheid=snelheid+100;};
if (~PIND.6) {snelheid=snelheid-100;};
//if (~PIND.5) {lcd_putsf("ivo");};
if (~PIND.5) {lcd_puts((char *)snelheid_string);};
}
}
Ik kan blijkbaar alles naar het lcd sturen, behalve de inhoud van een variabele. 
char snelheid_string;Je definieert hier een character. Da's mooi.
Dan cast je die naar een char *.
(char *)snelheid_stringDa's niet mooi. Het is nl. geen char *. Het is niet eens een pointer. Dus hiermee leid je alleen de typecheck van je compiler om de tuin.
Je moet dus een string definieren:
char * snelheid[10];En de
(char *)bij het printen weg halen.
Denk er ook nog even aan dat in C een string met een 0 terminated wordt. Je moet dus 1 byte meer declareren dan je werkelijk voor je data nodig hebt.
Fons Caloris
Wat baten kaars en bril als de uil niet lezen wil?
Bedankt Marco69,
Ik heb een en ander aangepast zoals je voorstelde, maar dan krijg ik de foutmelding "must be Ivalue" op de regel
snelheid_string="500";ook wanneer ik dat wijzig in
snelheid_string=500; En wanneer ik die regel even weglaat wordt er wél foutloos gecompileerd, maar er verschijnt nog steeds niets op mijn lcd.

Joszs
Eindelijk mijn site doet het http://home.concepts.nl/~pc106181/Jos/Index.html
Op 14 november 2004 20:31:44 schreef Marco69:
Je moet dus een string definieren:
char * snelheid[10];
Zo toch:
char snelheid[10];geen array van pointers ,maar een pointer "snelheid" die naar een array van char's wijst.
Joszs
@joszs: Oops.. Je zou wel eens gelijk kunnen hebben... Sorry Duveltje.. Is ook al weer 4 jaar geleden dat ik C geschreven heb.
@duveltje: Je kunt in C op die manier geen strings vullen. Dus dat die compiler erover mekkert, is logisch. Je kunt:
- Het ding vullen met een stringcopy
- Het ding vullen met een sprintf
- Het ding bij declaratie een default waarde geven
Nu aan jou het leermoment: hoe ga je het doen 
Als test zou je ipv een variable even een paar chracters hard-coded naar je LCD kunnen sturen. Weet je in elk geval dat dat werkt...
Tip: Kijk eens of een een simpel leerboek C kunt vinden. Dit zijn wel hele basic constructies....
[Bericht gewijzigd door Marco69 op ]
Fons Caloris
Wat baten kaars en bril als de uil niet lezen wil?
Ik ben inderdaad nog maar net begonnen met de C-taal. Waarschijnlijk kan ik me beter eerst verdiepen in de basis ervan, want zo wordt het niets 
Ondertussen was ik aanbeland bij het hoofdstuk over pointers, maar daar begrijp ik nog minder van... Weer helemaal naar het begin dus...
Toch bedankt voor alle antwoorden!

You're welcome
En eh... pointers zijn best tricky als je het niet 100% begrijpt. En begrijpen is weer best lastig in deze tijd van 4GL talen. Zucht... Waar is de tijd dat we alles in assembly deden 
Overigens... Doet-ie het nou? Want daar ging het toch om?
Fons Caloris
Wat baten kaars en bril als de uil niet lezen wil?
Nee, ie doet het niet... 
Maar geen nood, ik oefen nog wat verder. Gewoon tekst naar het display sturen lukt wel, maar wanneer ik die tekst in een variabele zet lukt het niet...
Het was de bedoeling een ledje te laten knipperen met een tussenpauze. Die tussenpauze is afhankelijk van een variabele. En dan telkens de variabele wijzigt zou de waarde ervan op het display moeten verschijnen.
Maar zoals gezegt, ik doe wel een stapje terug en begin met iets eenvoudigers. Misschien rijzen daar weer nieuwe vragen bij!

Grmbl... Da's toch raar...
Als je een plain string wel kunt sturen en een variabele niet...
Overigens... Die variabele is een string, gedeclareerd op de manier die Joszs omschreef?
Dan moet je je waarde er nog in kunnen krijgen. Als die 'waarde' eem byte of een word is, gaat dat het makkelijkste met sprintf.
Wel frustie als je er al zo lang mee bezig bent en je komt niet verder 