Stránka 1 z 1

Obsluha LCD v céčku pro PIC16F84A

Napsal: 07 lis 2010, 13:52
od MartinOV
Zdravím všechny!
Stáhl jsem si kompiler mikroC a na zkoušku do něj napsal program v příloze. Menším problémem zpočátku bylo, že to zabralo skoro veškerou RAM a půlku Flash a jen to zaplnilo LC displej a šmytec. Pak jsem se dozvěděl o kouzelném slůvku "code", které se dá doplnit ke konstantě, aby se konstanta uložila do Flash. Tak jsem program upravil do podoby v příloze a nefunguje to už vůbec. Na displeji se zobrazí nesmysly.
Je tam někde problém s pointerem nebo to u 16F84A prostě nejde? Když jsem se díval na přeložený HEX, tak ty texty tam jsou vložené do instrukcí retlw, tak by to možná mělo nějak fungovat...

Procesor je ve zkušebním zapojení CHIPON 1.

Napsal: 08 lis 2010, 09:00
od AB1

Kód: Vybrat vše

const code char *text3[] = "Konec filmu...";
MikroC neznám ale podle mne má být buď

Kód: Vybrat vše

const code char text3[] = "Konec filmu...";
nebo

Kód: Vybrat vše

const code char *text3 = "Konec filmu...";

Napsal: 08 lis 2010, 14:24
od Atlan
No bez kniznic je to na figu, o naprogramovani procesora nam to neprezradi nič. Dufam ze ledku si uz skusal rozblikat ? Aby sme vylucili ine chyby.

Napsal: 08 lis 2010, 16:26
od MartinOV
Ledku jsem už rozblikat zkoušel, všechno bylo vpořádku.
Výpis na displej jsem už také úspěšně vyzkoušel následujícím zápisem:

Kód: Vybrat vše

// (přiřazení jednotlivých vývodů pro knihovnu lcd)
void main() {
// (... nastavení portů atd....)
lcd_init();
lcd_cmd(_LCD_CLEAR);
lcd_cmd(_LCD_CURSOR_OFF);
lcd_out(1, 1, "Prvni text"); // lcd_out(řádek, sloupec, text);
lcd_out(2, 1, "z Cecka"); }
Bohužel na výpis dalších textů nezbyla RAM, každé volání lcd_out() si vzalo počet registrů rovný délce vypisovaného textu. Pak jsem se dozvěděl o možnosti vytvářet konstanty v paměti programu přes definici code. A tím to vše skončilo.

Napsal: 08 lis 2010, 19:12
od Atlan
nema to nejaku prirucku pripadne help ten kompiler.....

Napsal: 08 lis 2010, 23:59
od AB1
Zkus toto:

Kód: Vybrat vše

const char Text1[] = "text 1";
const char Text2[] = "text 2";
const char Text3[] = "text 3";

//zobraz FLASH string na aktuální pozici kurzoru
void Lcd_Out_P(const char* flashstr)
{
char i=0, c;

   while( (c = flashstr[i]) != 0)
   {
      Lcd_Chr_Cp(c);   //zobraz znak
      i++;
   }
}

//--------------------------------------------------------

void main()
{
    Lcd_init();
    Lcd_Cmd(Lcd_Clear);
    Lcd_Out_P(Text1);
    Lcd_Cmd(LCD_SECOND_ROW);
    Lcd_Out_P(Text2);

   while(1) {}
}

Napsal: 12 lis 2010, 15:23
od MartinOV
Omlouvám se za pozdní odpověď, ale ten kód od AB1 funguje, všechno se zobrazuje vpořádku.
Asi jsem ještě přesně nepochopil pointery.
Díky za nakopnutí. :)