Sida 1 av 3

Problem med microC - too many params

Postat: 8 oktober 2009, 09:51:48
av helldin
har lite problem med microC
när jag trycker på build så spottar den ut felmedelanden som jag har försökt hitta en lösning på i 4 dagar

de är den PIC 18F2550

å en grafisk display från Kjell&C

koden är



unsigned char const start_img[1024] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252,252,252, 12,
12, 12, 28,252,248,240, 0, 0, 0, 0,128,128,192,192,192,192,
192,128, 0, 0, 0,192,192,192,128,192,192,192,192,192,128, 0,
0,192,192,248,248,248,192,192,192, 0,206,206,206, 0, 0, 0,
254,254,254, 0, 0, 12, 12, 12, 12,252,252,252, 12, 12, 12, 12,
0, 0, 0,252,252,252, 12, 12, 12, 12, 12, 12, 0, 0,192,224,
248,120, 28, 12, 12, 12, 12, 28, 24, 0, 0, 0,252,252,252, 0,
0, 0, 0, 0, 0,252,252,252, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255, 6,
6, 14, 31,127,251,224,128, 0, 0, 62,255,255,205,140,140,140,
143,207,207, 0, 0,255,255,255,193,128,128,128,193,255,255, 62,
0, 0, 0,255,255,255,128,128,128, 0,255,255,255, 0, 0, 0,
255,255,255, 0, 0, 0, 0, 0, 0,255,255,255, 0, 0, 0, 0,
0, 0, 0,255,255,255,131,131,131,131,131,128, 0, 0, 31,127,
255,224,192,128,128,128,128,192,192, 0, 0, 0,255,255,255, 6,
6, 6, 6, 6, 6,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1,
1, 1, 0, 0, 0, 31, 31, 31, 0, 1, 1, 1, 1, 0, 0, 0,
0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0,
225, 33, 33, 32, 0,160, 0, 0,128,129,129, 1,128,128,128,128,
128,128,128,129,129,129, 1, 1,129, 1, 1,129,128,128,128,128,
0, 0,129,129,129, 1,129,129,128, 0, 0, 0, 1,193, 33, 32,
32,192, 0, 0, 0, 1, 65, 97,224, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
15, 1, 1, 1, 0, 15, 0, 0, 15, 0, 0, 0, 15, 0, 0, 0,
15, 0, 0, 15, 0, 7, 8, 15, 0, 15, 8, 7, 14, 10, 10, 15,
0, 0, 15, 0, 0, 7, 10, 10, 10, 11, 0, 0, 0, 7, 8, 8,
8, 7, 0, 0, 12, 0, 8, 8, 15, 8, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,240, 12,240, 24, 8, 8, 16, 0, 0, 12,240, 0, 0, 24, 8,
136, 72, 48, 0,240, 8, 8, 8,240, 0,240, 8, 8, 8,240, 0,
48, 72, 72, 72,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 3, 12, 1, 3, 2, 2, 1, 0, 0, 12, 3, 0, 0, 2, 3,
2, 2, 2, 0, 1, 2, 2, 2, 1, 0, 1, 2, 2, 2, 1, 0,
2, 2, 2, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 64,127, 0, 0, 56, 68, 68, 68, 56, 0, 0,127, 4, 4,
4,120,116, 84, 84,124, 0, 0,124, 4, 4, 4,120, 0, 0, 0,
127, 8, 8, 8,127, 0, 56, 84, 84, 84, 88, 0, 0,127, 0, 0,
127, 0, 56, 68, 68, 68,127, 0, 0,125, 0, 0,124, 4, 4, 4,
120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};


void main() {
OSCCON = 255; //Sätt internoscillatorn på 8 MHz
ADCON1 = 15; //Gör portA digital
Glcd_Init(&PORTA, 1, 0, 2, 3, 4, 5, &PORTB); //Initiera displayen
Glcd_Fill(0); //Rensa displayen
Glcd_Image(start_img); //Visa bilden

while(1){
Glcd_Box(0,0,127,63,2); //Invertera bilden
delay_ms(3000); //Vänta 3 sekunder
}

}



felmedelandet är

0 1 mikroCPIC1618.exe -MSF -DBG -pP18F2550 -DL -O11111114 -fo8 -N"N:\Dokument\ReptilTECH\reptiltech.mcppi" -SP"C:\Program Files (x86)\Mikroelektronika\mikroC PRO for PIC\defs\" -SP"C:\Program Files (x86)\Mikroelektronika\mikroC PRO for PIC\uses\P18\" -SP"N:\Dokument\ReptilTECH\" "reptiltech.c" "__Lib_Math.mcl" "__Lib_MathDouble.mcl" "__Lib_System.mcl" "__Lib_Delays.mcl" "__Lib_I2C_b10.mcl" "__Lib_USB_genHID.mcl" "__Lib_GlcdFonts.mcl" "__Lib_Glcd.mcl"
0 125 All files Preprocessed in 31 ms
0 121 Compilation Started reptiltech.c
77 313 Too many actual parameters reptiltech.c
0 102 Finished (with errors): 08 okt 2009, 09:49:19 reptiltech.mcppi



och rad 77 är Glcd_Init(&PORTA, 1, 0, 2, 3, 4, 5, &PORTB); //Initiera displayen

Re: tjenare

Postat: 8 oktober 2009, 10:02:54
av TomasL
Heter det inte "unsigned const char"?

Re: tjenare

Postat: 8 oktober 2009, 10:03:19
av eqlazer
Använd code-taggarna så att det går att läsa.

Så hur ser Glcd_Init ut?

Re: tjenare

Postat: 8 oktober 2009, 10:20:23
av helldin
eqlazer:
Använd code-taggarna så att det går att läsa.

Så hur ser Glcd_Init ut?

Jag är helt ny på de här. Hur menar du =D
och Var hittar man code-taggarna eller menar du att jag ska komentera?

Re: tjenare

Postat: 8 oktober 2009, 10:34:01
av johano
Någonstans, förmodligen i en includefil, så deklareras funktionen Glcd_Init.
Om du studerar den deklarationen så framgår det nog varför ditt anrop
av den genererar ett felmeddelande.

/johan

Re: tjenare

Postat: 8 oktober 2009, 10:42:01
av eqlazer
helldin: När du skriver ett inlägg har du några knappar där den ena heter "Code", helt enkelt ska du lägga din kod mellan

Kod: Markera allt

[code] koden 
[/code]

Re: tjenare

Postat: 8 oktober 2009, 10:49:29
av bos
http://www.easypsoc.com/pdf/mikroc/mikroc_manual.pdf sid 253 har prototypen för glcd_init(). Nötterna har låst pdf:en så det går inte kopiera text därifrån.

Re: tjenare

Postat: 8 oktober 2009, 10:53:58
av Icecap
Och sedan heter det "const unsigned char ..."

Re: tjenare

Postat: 8 oktober 2009, 10:56:40
av sodjan
En sak är att manuelen har två olika beskrivningar av parametrarna till Glcd/Init,
en som "Prototype" med 8 paramatrar och en som "Example" med 7 parametrar.
Det är väl den vanliga kvaliteten på Mikroelektronikas dokumentation...

Har du provat med båda varianterna ?
Vad har du för övrigt gjort för att felsöka ?

Re: tjenare

Postat: 8 oktober 2009, 11:10:15
av helldin
tjenare har testat de i manualen
fick de å funka så den inte spottar ut något felmeddelande

uppenbarligen är de nått fel som jag missar för skärmen visa inga tecken
har testat skärmen med en test kod å då funka den men den vill inte köra den koden i microC.
De va då jag fick dom felena förut


Här är beskrivningen för displayen

1 GND Jord till displayen
2 +V Ström till displayen
3 Mitten på pot. Kontrast
4 RA2 D/I (RS), data input/output (register select)
5 RA3 R/W, read/write
6 RA5 E, enable
7 RB0 Data-bit 1
8 RB1 Data-bit 2
9 RB2 Data-bit 3
10 RB3 Data-bit 4
11 RB4 Data-bit 5
12 RB5 Data-bit 6
13 RB6 Data-bit 7
14 RB7 Data-bit 8
15 RA0 CS1, chip selection
16 RA1 CS2, chip selection
17 RA4 RESETB, reset signal
18 vänster på pot. VEE, negativ spänningsgenerator
19 +V (via diod) Ström till bakgrundsbelysningen
20 GND Jord till bakgrundsbelysningen

här är databladet för 18f2550 sidan 4
http://www.kjell.com/filarkiv/SUPPORTPD ... /90610.pdf


här är koden jag testar nu

Kod: Markera allt

char GLCD_DataPort at PORTB;

sbit GLCD_CS1 at RA0_bit;
sbit GLCD_CS2 at RA1_bit;
sbit GLCD_RS  at RA2_bit;
sbit GLCD_RW  at RA3_bit;
sbit GLCD_EN  at RA5_bit;
sbit GLCD_RST at RA4_bit;

sbit GLCD_CS1_Direction at TRISB2_bit;
sbit GLCD_CS2_Direction at TRISB3_bit;
sbit GLCD_RS_Direction  at TRISB4_bit;
sbit GLCD_RW_Direction  at TRISB5_bit;
sbit GLCD_EN_Direction  at TRISB7_bit;
sbit GLCD_RST_Direction at TRISB6_bit;
// End Glcd module connections


void delay2S(){                             // 2 seconds delay function
  Delay_ms(2000);
}

void main() {
  OSCCON =  255;                               //Sätt internoscillatorn på 8 MHz
  ADCON1 = 15;                                 //Gör portA digital

  Glcd_Init();                              // Initialize GLCD
  Glcd_Fill(0);                          // Clear GLCD
  Glcd_Image(start_img);                // Draw image
  while(1) {
    Glcd_Box(0,0,127,63,2);                      //Invertera bilden
    delay_ms(3000);                              //Vänta 3 sekunder
  }
}

Re: tjenare

Postat: 8 oktober 2009, 11:36:09
av sodjan
Jag vet inte vad du har för fel, men något är det med din dator, dina
inlägg ser väldigt konstiga och svårtlästa ut. Det saknas stor bokstav
i början på meningar och normal interpunktur samt själva meningsbyggnaden
ser märklig ut ibland. Du kanske ska kolla det först så att det går att
läsa och förstå vad du skriver. Eller så slarvar du bara, och det är inte
heller bra när man programmerar...

Sedan så är det väl bara att sätta igång och felsöka. Det kan ju vara i princip
vad som helst, vi har ju inte en aning om ifall LCD'n är rätt inkopplad. Vi vet ju
inte ens *vilken* display du använder !

Du har ju någon "testkod" uppenbarligen som fungerar, det är väl bara att
utgå från den och bygga vidare, eller ?? Vad skiljer din testkod mot den
du försöker köra nu ? (Du behöver igentligen inte svara här, det är mer
något för dig själv att fundera på...)

Re: tjenare

Postat: 8 oktober 2009, 19:50:57
av OnkelF
helldin skrev:
här är koden jag testar nu

Kod: Markera allt

char GLCD_DataPort at PORTB;

sbit GLCD_CS1 at RA0_bit;
.
.
.

sbit GLCD_CS1_Direction at TRISB2_bit;
.
.
.
Ändra så att "direction" stämmer med pinnen.
Om du ska ha GLCD_CS1 på RA0 ska GLCD_CS1_Direction vara TRISRA0

Re: Problem med microC - too many params

Postat: 9 oktober 2009, 01:46:55
av lgrfbs
Har du provat?
http://www.mikroe.com/forum/
om något är fel fixar de oftas inom samma vecka.

Re: Problem med microC - too many params

Postat: 10 oktober 2009, 15:52:13
av Muppis
I egenskap av TS så tänkte jag härmed posta det som vi kommit fram till i ett privat meddelande.
Jag tar mig friheten att eventuellt posta något som redan sagts i tråden.
Kan nämnas att jag har pillat lite med C innan, men inget med PIC tyvärr.
TS har även försökt i mikroe:s forum, men då med en mycket längre och jobbigare kod, vi kan posta detta inlägg där om ni inte heller har en aning om vad som kan vara fel.

Koden i while-satsen är min idé (de två glcd_box-anropen), men de gjorde ingen skillnad.

Felet som TS nämnt är att displayen bara är "vit" hela tiden.

Hårdvara och dokumentation:
PIC 18F4550
LCD ATM12864D
Mikrobasic C: Datablad v101
Potentiometer 4K5 ohm

Kopplingsschema:

Kod: Markera allt

Displayen Experimentkortet Beskrivning
1         GND              Jord till displayen
2         +V               Ström till displayen
3         Mitten pa pot.   Kontrast
4         RB2              D/I (RS), data input/output (register select)
5         RB3              R/W, read/write
6         RB4              E, enable
7         RD0              Data-bit 1
8         RD1              Data-bit 2
9         RD2              Data-bit 3
10        RD3              Data-bit 4
11        RD4              Data-bit 5
12        RD5              Data-bit 6
13        RD6              Data-bit 7
14        RD7              Data-bit 8
15        RB0              CS1,chip selection
16        RB1              CS2,chip selection
17        RB5              RESETB, reset signal
18        vänster pa pot.  VEE, negativ spänningsgenerator
19        +V (via diod)    Ström till bakgrundsbelysningen
20        GND              Jord till bakgrundsbelysningen
Källkod program:

Kod: Markera allt

// Glcd module connections
char GLCD_DataPort at PORTD;

sbit GLCD_CS1 at RB0_bit;
sbit GLCD_CS2 at RB1_bit;
sbit GLCD_RS  at RB2_bit;
sbit GLCD_RW  at RB3_bit;
sbit GLCD_EN  at RB4_bit;
sbit GLCD_RST at RB5_bit;

sbit GLCD_CS1_Direction at TRISB0_bit;
sbit GLCD_CS2_Direction at TRISB1_bit;
sbit GLCD_RS_Direction  at TRISB2_bit;
sbit GLCD_RW_Direction  at TRISB3_bit;
sbit GLCD_EN_Direction  at TRISB4_bit;
sbit GLCD_RST_Direction at TRISB5_bit;
// End Glcd module connections


  void main() {
  ADCON1  |= 0x0F;      // Configure AN pins as digital
  CMCON  |= 7;         // Disable comparators

  Glcd_Init();  //Initiera displayen
  Glcd_Fill(0);                                //Rensa displayen

  while(1) {
  glcd_box(0,0,127,63, 2);
  delay_ms(500);
  glcd_box(0,0,127,63,0);
  delay_ms(500);
}

}
Och en Tårta till den som är vänlig nog att vilja hjälpa till.

Re: Problem med microC - too many params

Postat: 10 oktober 2009, 16:21:11
av sodjan
> ...har testat skärmen med en test kod å då funka den...

Vad är skillnaden mellan den koden och det ni försöker köra nu ?