TMR0 på PIC16F628A går för långsamt
Allt beror på hur många punkter det finns i menyerna och hur många knappar man har att göra med.
Ju färre knappar man har ju plattare får man göra meny-strukturen och har du bara '+', '-' och 'Meny'-knappar fungerar det inte med undermenyer, det blir alldeles för tungrodd och oöverskådligt.
Nu ska jag duscha, äta frukost och iväg till EP2008. Ha en bra dag.
Ju färre knappar man har ju plattare får man göra meny-strukturen och har du bara '+', '-' och 'Meny'-knappar fungerar det inte med undermenyer, det blir alldeles för tungrodd och oöverskådligt.
Nu ska jag duscha, äta frukost och iväg till EP2008. Ha en bra dag.
- chrille112
- Inlägg: 334
- Blev medlem: 25 april 2005, 16:45:24
- Ort: Uppsala
Jag lyckades få ihop menyn, använder en och samma enum:
Fungerar fint
Nu ikväll har jag jobbat på alarmindikeringen. Men oops: "Not enough RAM"... Får kanske börja titta på om man måste skaffa sig en lite större krets.
Visst är det variablerna som använder RAM-minnet? Isåfall borde man kunna dra ner ram-användningen med att göra flera variabler privata istället för publika?
Hoppas att mässan var bra! Jag är inte avundsjuk...
Kod: Markera allt
enum MenuItems { MenuClock, MenuSettime, MenuSetalarm, MenuTurnoffAlarm, MainMenuSeparator,
SettimeSethour, SettimeSetminute, SettimeSave,
SetalarmSethour, SetalarmSetminute, SetalarmSave,
MenuHighest };

Visst är det variablerna som använder RAM-minnet? Isåfall borde man kunna dra ner ram-användningen med att göra flera variabler privata istället för publika?
Hoppas att mässan var bra! Jag är inte avundsjuk...
Bra! Och att ramen tar slut beror nog på att du "sviner" med minnet, lösningen är just att göra scope-variabler samt att använda minst möjliga antal bits.
unsigned char Bit1 : 1;
unsigned char Bit2 : 1;
unsigned char Bit3 : 1;
unsigned char Bit4 : 1;
unsigned char Bit5 : 1;
unsigned char Bit6 : 1;
unsigned char Bit7 : 1;
unsigned char Bit8 : 1;
fyller 1 byte men ger 8 st av/på flaggor... kan vara behändigt ibland.
Mässan var skitbra.
unsigned char Bit1 : 1;
unsigned char Bit2 : 1;
unsigned char Bit3 : 1;
unsigned char Bit4 : 1;
unsigned char Bit5 : 1;
unsigned char Bit6 : 1;
unsigned char Bit7 : 1;
unsigned char Bit8 : 1;
fyller 1 byte men ger 8 st av/på flaggor... kan vara behändigt ibland.
Mässan var skitbra.
- chrille112
- Inlägg: 334
- Blev medlem: 25 april 2005, 16:45:24
- Ort: Uppsala
- chrille112
- Inlägg: 334
- Blev medlem: 25 april 2005, 16:45:24
- Ort: Uppsala
De verkar onekligen vara extremt minneskrävande. Jag kompilerade koden och använder 56% ram. Lägger sedan till:
Och plötsligt är minnet slut? Mycket underligt.
Har du något tips om vart jag ska börja titta för att skriva egen LCD-funktion? Har försökt att googla, men får bara fram exempel med deras egen funktion.
Kod: Markera allt
if(AlarmActive == 1)
{
LCD_Out(1,9,"Alarm!");
}
Har du något tips om vart jag ska börja titta för att skriva egen LCD-funktion? Har försökt att googla, men får bara fram exempel med deras egen funktion.
Ett par tips:
* På min hemsida (under "Freebies") finns det ett datablad som handlar om LCD-moduler och deras kommunikation, initiering osv.
* Du skriver "if(AlarmActive == 1)".... varför? Skriv "if(AlarmActive)" för om den flagga (1 bit?) är ANNAT än noll är den sann.
Många gör felet att de kollar mot ett visst specifikt värde och tänkar aldrig på att det KAN hända något så att det blir fel och att räknaren kan hoppa över osv.
Om du bara har 1 bit som flagga är den ju antingen '0' eller '1' men vid att jämföra med ett visst specifikt värde måste kompilern shifta ner bitten för att jämföra, kollar man bara efter "sant eller falskt" och struntar i det exakta värde kan man spara in i programplatser och snabba upp programmet lite.
* På min hemsida (under "Freebies") finns det ett datablad som handlar om LCD-moduler och deras kommunikation, initiering osv.
* Du skriver "if(AlarmActive == 1)".... varför? Skriv "if(AlarmActive)" för om den flagga (1 bit?) är ANNAT än noll är den sann.
Många gör felet att de kollar mot ett visst specifikt värde och tänkar aldrig på att det KAN hända något så att det blir fel och att räknaren kan hoppa över osv.
Om du bara har 1 bit som flagga är den ju antingen '0' eller '1' men vid att jämföra med ett visst specifikt värde måste kompilern shifta ner bitten för att jämföra, kollar man bara efter "sant eller falskt" och struntar i det exakta värde kan man spara in i programplatser och snabba upp programmet lite.
- chrille112
- Inlägg: 334
- Blev medlem: 25 april 2005, 16:45:24
- Ort: Uppsala
>>Du skriver "if(AlarmActive == 1)".... varför? Skriv "if(AlarmActive)" för om den flagga (1 bit?) är ANNAT än noll är den sann.
Du har helt rätt, slarvigt av mig. I detta fallet är det en byte, och den kan ju ha många andra värden än 1. Ska senare göra om det till en bitvariabel
Jag löste LCD-problemet med att använda pekare till texten istället för variabler, så nu är inte minnet något problem längre
Kommer tillsvidare att köra på den inbyggda lcd-funktionen, men någon gång i framtiden ska jag ge mig på att skriva en egen.
Du har helt rätt, slarvigt av mig. I detta fallet är det en byte, och den kan ju ha många andra värden än 1. Ska senare göra om det till en bitvariabel
Jag löste LCD-problemet med att använda pekare till texten istället för variabler, så nu är inte minnet något problem längre

Kommer tillsvidare att köra på den inbyggda lcd-funktionen, men någon gång i framtiden ska jag ge mig på att skriva en egen.