Deklarera variabel för ett värde på 2000?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
SpanCox
Inlägg: 157
Blev medlem: 17 oktober 2004, 18:08:23
Ort: Götlaborg?

Deklarera variabel för ett värde på 2000?

Inlägg av SpanCox »

Mina basic-skills är inte vad de borde vara om man betänker att det var 28 år sedan jag började programmera basic ;)

I alla fall. Basic Stamp 2 har plats för 16(13) Word. Att då ta upp ett helt Word när man bara behöver lagra ett värde på <2000 känns onödigt.

Går det att lösa på något vis? Typ att dela upp ett Word i 32 st 2048 stora bitar?

idag ser det väl ut som följande:

---
counter1 VAR Word

For counter1 = 1 to 2000
...gör en massa saker...
next

---

Grejen är den att jag behöver ett helt gäng med variabler...
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: Deklarera variabel för ett värde på 2000?

Inlägg av victor_passe »

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.
SpanCox
Inlägg: 157
Blev medlem: 17 oktober 2004, 18:08:23
Ort: Götlaborg?

Re: Deklarera variabel för ett värde på 2000?

Inlägg av SpanCox »

Bra att veta att den lösningen finns, frågan kvarstår dock om det inte går att lösa programmeringsmässigt istället för att bygga ut minnet?
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: Deklarera variabel för ett värde på 2000?

Inlägg av johano »

Datatyperna i BS2 är ju:

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.

/johan
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Deklarera variabel för ett värde på 2000?

Inlägg av Icecap »

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.
SpanCox
Inlägg: 157
Blev medlem: 17 oktober 2004, 18:08:23
Ort: Götlaborg?

Re: Deklarera variabel för ett värde på 2000?

Inlägg av SpanCox »

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. ;)
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Deklarera variabel för ett värde på 2000?

Inlägg av Swech »

Vad är det du skall göra då?
Går det inte att återanvända variblerna?

Swech
Användarvisningsbild
Glenn
Inlägg: 36772
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: Deklarera variabel för ett värde på 2000?

Inlägg av Glenn »

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.
SpanCox
Inlägg: 157
Blev medlem: 17 oktober 2004, 18:08:23
Ort: Götlaborg?

Re: Deklarera variabel för ett värde på 2000?

Inlägg av SpanCox »

Låter litet sådär mellanmjölksintressant, vad är en PBP? ;)
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Deklarera variabel för ett värde på 2000?

Inlägg av vfr »

PicBasicPRO
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Deklarera variabel för ett värde på 2000?

Inlägg av sodjan »

dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Re: Deklarera variabel för ett värde på 2000?

Inlägg av dangraf »

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.

Kod: Markera allt

stort tal = litet tal<<3;  // såhär gör man i C.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Deklarera variabel för ett värde på 2000?

Inlägg av jesse »

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.
Skriv svar