Sida 1 av 2

PicBasic problem

Postat: 3 december 2004, 22:43:57
av ristomemo
Jag har 2 st temperaturgivare anslutna till var sitt ben.
Hade tänkt att spara lite minne genom att använda samma subrutin, och bara byta ben beroende på vilen som ska läsas av. Dock får jag felmeddelande när man compilerar. "Duplicate Variable 'SENSOR'"
Kan man på nått sätt ta bort kopplingen "sensor VAR PORTE.0" innan man byter ben ??


sensor VAR PORTE.0 'sensorn DS1820 Outside
GoSub checksensor 'anropar subrutin
outside = temp 'tempvärdet från subrutinen sparas i outside
sensor VAR PORTE.1 'sensorn DS1820 Inside
GoSub checksensor 'anropar subrutin
inside = temp 'tempvärdet från subrutinen sparas i inside

Postat: 3 december 2004, 23:45:26
av Hedis
Ngn stans i programmet har du namnet SENSOR som variabel 2ggr.
Det är så jag fattar felmeddelandet iaf.

Postat: 3 december 2004, 23:57:49
av ristomemo
Jo det är ju med 2 ggr om du ser kodsnutten jag klippt in.
Det jag önskar är att kunna växla variabeln "sensor" fram o tillbaka mellan 2 fysiska portar.

Alltså först ska tempen läsas av på PORTE.0
sedan ska samma procedur upprepa sig på PORTE.1

Eftersom proceduern är exakt lika på de båda portarna hade jag tänkt att använda samma subrutin, bara ändra porten.

Det går kanske inte att göra så, men jag hoppas på det, skulle vara smidigt.

Postat: 4 december 2004, 00:13:16
av Hedis
att köra en subrutin ifrån flera ställen skall inte vara några problem, men att 2 subrutiner har samma namn skapar problem. Nu är jag ingen höjdare på basic..... men vad är det som heter enbart sensor?

Postat: 4 december 2004, 09:54:03
av ToB
Jag är inte heler någon hejare på basic men jag tycker det ser ut som du deklarerar variabeln sensor varje gång du kör subrutinen, d.v.s skapar en ny variabel varje gång. Eftersom dom har samma namn så får du felmeddelande.

Jag tror du får göra något sånt här:

Kod: Markera allt

<Deklarera varialbeln sensor>
:start
sensor = PORTE.0
GoSub checksensor 'anropar subrutin 
outside = temp 'tempvärdet från subrutinen sparas i outside 
sensor = PORTE.1 'sensorn DS1820 Inside 
GoSub checksensor 'anropar subrutin 
inside = temp 'tempvärdet från subrutinen sparas i inside 
goto start

Postat: 4 december 2004, 11:43:36
av ristomemo
Jag kanske är dålig på att förklara vad jag hade tänkt med det hela.
Det är INTE 2 subrutiner med samma namn, det är en o samma subrutin.
Jag försöker förklara igen.

Jag deklarerar variabeln SENSOR mot PORTE.0
Sedan anropas subrutinen som jobbar mot variabeln SENSOR alltså PORTE.0

När den subrutinen är färdig vill jag deklarera om variabeln SENSOR mot PORTE.1 istället. Sedan anropas samma subrutinen som jobbar mot variabeln SENSOR alltså PORTE.1 i denna gång.

Detta börjar förståss om så att samma subrutin växelvis läser av 2 fysiska portar. På så vis skulle jag bara behöva bara en subrutin i stället för 2, vilket sparar minne för mig.

Tyvärr gick inte din idé heller ToB, då sparas bara testen PORTE.0 i variabeln sensor. Sensor blir inte knuten till den fysiska PORTE.0

Postat: 4 december 2004, 12:02:26
av ensten
Jag kan iofs bara VB men måste man inte resetta variabeln på något sätt?

Postat: 4 december 2004, 12:07:56
av ristomemo
Jo jag tror också den måste resetas på något vis. Dock hittar jag inget om det i manualen. Kanske inte går :(

Postat: 4 december 2004, 12:39:56
av ToB
Problemet är nog snarare att du måste ange adressen till porten.
Istället för : "sensor=PORTE.0" så får du skriva: "sensor=<adress till PORTE.0>"
Jag kan inte utantill vilken adress det är och jag vet inte hur man skriver det i Basic. Kan man använda pekare i Basic?

Postat: 4 december 2004, 23:46:11
av ToB
Kan man inte göra så här?

Kod: Markera allt

sensor_out VAR PORTE.0
sensor_in VAR PORTE.1
:start 
sensor = sensor_out 
GoSub checksensor 'anropar subrutin 
outside = temp 'tempvärdet från subrutinen sparas i outside 
sensor = sensor_in 'sensorn DS1820 Inside 
GoSub checksensor 'anropar subrutin 
inside = temp 'tempvärdet från subrutinen sparas i inside 
goto start 
Eller blir det samma sak?? :? :?:

Postat: 5 december 2004, 13:53:37
av $tiff
ToB

du ha inte deklarerat "sensor". Men om man deklarerar den som en "bit" så funkar det, iaf i min primitiva test.

Postat: 5 december 2004, 17:02:23
av ristomemo
Fick inte det att fungera heller.

Jag har får lära mig att använda BRANCH istället. Det finns ju faktiskt flera 2048 areor.

Postat: 5 december 2004, 22:07:05
av ToB
Bra $tiff att du är uppmärksam. Jag ger upp, tror det är bättre att någon som kan Basic ger sig in i matchen istället.
Varsågoda... $tiff?

Postat: 5 december 2004, 22:16:49
av $tiff
Nerå, det är bra med kommentarer från de som inte är lika insnöade. Jag har faktist aldrig stött på ett problem som detta, utan bara tagit för givet att det inte går i PICBasic.

Det skumma är ju att min testkod:

Kod: Markera allt

temp1 VAR PORTA.1
temp2 VAR PORTA.2
temp  VAR BIT


loop:
temp = temp1
GoSub test
temp = temp2
GoSub test
GoTo loop

End

test:
temp = 1
Pause 500
temp = 0
Return
...fungerar att kompilera. Däri ej sagt att det är exekverbart.

>> ristomemo
Har du provat denna lösning? Det kanske blir ett dolt exekveringsfel som visar sig först när det börjar bli lite mer komplext kodmässigt?

Postat: 5 december 2004, 23:23:34
av ristomemo
Tyvärr ingen lycka med det heller. Men tack så hemskt mycke att ni försöker hjälpa.

Kan inte kompilera din testkod.
ändrar jag tempvariabeln till BYTE eller WORD kan jag kompilera, men det fungerar ändå inte i praktiken. Subrutinen jobbar inte mot de önskade portarna.