Man kan köpa en "riktig" µC som tex PIC18F4680 som har ca 3900 byte RAM för 1/20 av priset av en BasicStamp.
Och en annan fördel med en µC som inte tolkar sitt program är att den inte tar en kaffepaus mellan varje instruktion.
Men om du nu måste använda en BasicStamp så får du väl koppla in ett extra minne. Tex ett FRAM som har I2C bus som finns på tex elfa.
BIT (1 bit), kan lagra 0 - 1
NIB (4 bit) kan lagra 0 - 8
BYTE (8 bit) kan lagra 0 - 255
WORD (16 bit) kan lagra 0 - 65535
Behöver du lagra tal upptill 2000 så är det WORD som gäller, finns nog ingen
enkel genväg runt det...
Man *skulle* ju kunna tänka sig att "hacka isär" talet och lagra det i en BYTE och
en NIB, men det skulle medföra tämligen komplicerade (och platskrävande) operationer
sedan för att utföra beräkningar på talet.
Behöver du så komplexa program med många variabler skulle jag
nog gå ifrån BasicStamp och satsa på en riktig microkontroller typ
AVR/PIC. Dessa kan också programmeras i Basic även om det verkar
vara rätt ovanligt av döma av antal foruminlägg.
Som de förre talare tycker jag att det är dags att migrera till en "riktig" mikroprocessor (µC).
Fördelen är att du har tillgång till avsevärd mer minne, många gångar högre exekveringshastighet, bättre tillgång till hårdvaran och ett mycket lägre pris.
Och sedan kan vi slåss om olika programmeringsspråk, själv ogillar jag BASIC skarpt men i slutändan är det bara en sak som betyder något: fungerar grejen eller inte?
Och när du väl har en programmeringsenhet (t.ex. 73-343-79 till PIC) är kostnaden för resten ganska låg och programmeringen & användningen är inte speciellt mer besvärligt än Stamp'en:
1 Anslut hårdvaran.
2 Koppla in programmeringsenheten.
3 Skriv programmet.
4 Debugga det (alltid är det NÅGOT fel!)
5 Kompilera det.
6 "Bränn" in det i kretsen.
7 Klart!
Upprepa punkterna 3-6 till det fungerar.
mmm jag har just suttit och pillat med att ha en nib och räkna upp till tio. sätta den till noll och öka en byte med 1. Tyvärr tycker inte stampen att det var så roligt, den vill inte göra så mycket annat än det då nämligen. :-/
@Icecap:
Jo, men BS2:an är just nu alldeles gratis.
Förmodligen kommer det här projektet att ge mig såpass mycket vind i seglen att jag införskaffar vad som krävs för att börja leka på allvar, det är ju roligt att sitta och klura hela nätterna.
Om man gillar BS-BASIC'en så kan man ju som sagt ladda in en modul i PBP för att fåd en BS-syntaxkompatibel, då vinner man förutom att man får tillgång till mer RAM även enormt mycket i hastighet, plus att man kan använda en enorm mängd olika PIC'ar istället för den som råkar finnas på BS'en.
Fast att ladda in den modulen och köra med BS-syntax är väl lite som att bygga om sin bil till en epatraktor, men det kan ju iofs vara bra när man ska migrera.
Ett trick som man skulle kunna köra är att du använder en byte(8 bitar) för att representera ett tal mellan 0-2048 (11 bitar) genom göra steg om 8. dvs att om du har ett tal mellan 0-7 kommer detta represenreas av talet 0, 8-16 av talet 2 osv. Kan ju fungera om man ska styra t.ex ljusstyrka på en lysdiod eller liknande men om du behöver bättre pressition så fungerar inte denna metoden så bra.
Det är inte så krångligt att hacka upp talen till 11-bitars-tal (vilka kan innehålla värden mellan 0 och 2047). Du gör bara två funktioner - en som "sparar" din variabel i en array, och en annan som extraherar bitarna igen. Det tar mycket längre tid för processorn att bearbeta än att arbeta som vanligt, men programmeringen blir lättare: när du väl ordnat dessa funktioner så är de bara att anropa. (I basic heter det väl "subrutiner"). (Det blir en intressant uppgift att skriva dessa funktioner på ett effektivt sätt!)
Storleken på arrayen beräknar du lätt:
Antag till exempel att du vill ha 1000 st variabler. Dessa numreras från 0 - 999. Varje variabel kräver 11 bitar, alltså behöver du 11000 bitar, eller 1375 bytes.
Problemet är att du behöver utföra en division (bland annat). Detta kan du kringgå om du istället använder 12 bitar för varje tal. Du får då en bit oanvänd, men det tar mindre plats än 16 bitar. Då kan du dividera med hela två-potenser vilket underlättar väldigt mycket.
(jag har själv gjort just detta, där 192 st 12-bitars tal ska läsas in från en extern krets, men datan skickas en byte (8-bitar) åt gången, vilket skapar precis den situation du är ute efter. Mina tal kan ha ett värde mellan 0 och 4000 ungefär. När jag väl läst in talen så lagrar jag dem i 16-bitars word, så jag sparar ju inget minne på detta.)
Men i ditt läge skulle hellre valt en annan processor med mer minne, om det var möjligt.