PicBasic problem

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
ristomemo
Inlägg: 1028
Blev medlem: 29 mars 2004, 14:12:18

PicBasic problem

Inlägg 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
Användarvisningsbild
Hedis
Inlägg: 2488
Blev medlem: 8 december 2003, 15:10:44
Ort: Vänersborg
Kontakt:

Inlägg av Hedis »

Ngn stans i programmet har du namnet SENSOR som variabel 2ggr.
Det är så jag fattar felmeddelandet iaf.
ristomemo
Inlägg: 1028
Blev medlem: 29 mars 2004, 14:12:18

Inlägg 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.
Användarvisningsbild
Hedis
Inlägg: 2488
Blev medlem: 8 december 2003, 15:10:44
Ort: Vänersborg
Kontakt:

Inlägg 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?
Användarvisningsbild
ToB
Inlägg: 678
Blev medlem: 22 februari 2004, 10:32:58
Skype: tobias_bjork
Ort: Sollentuna

Inlägg 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
ristomemo
Inlägg: 1028
Blev medlem: 29 mars 2004, 14:12:18

Inlägg 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
Användarvisningsbild
ensten
EF Sponsor
Inlägg: 3759
Blev medlem: 19 oktober 2004, 15:55:20
Ort: Hudiksvall

Inlägg av ensten »

Jag kan iofs bara VB men måste man inte resetta variabeln på något sätt?
ristomemo
Inlägg: 1028
Blev medlem: 29 mars 2004, 14:12:18

Inlägg 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 :(
Användarvisningsbild
ToB
Inlägg: 678
Blev medlem: 22 februari 2004, 10:32:58
Skype: tobias_bjork
Ort: Sollentuna

Inlägg 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?
Användarvisningsbild
ToB
Inlägg: 678
Blev medlem: 22 februari 2004, 10:32:58
Skype: tobias_bjork
Ort: Sollentuna

Inlägg 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?? :? :?:
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

ToB

du ha inte deklarerat "sensor". Men om man deklarerar den som en "bit" så funkar det, iaf i min primitiva test.
ristomemo
Inlägg: 1028
Blev medlem: 29 mars 2004, 14:12:18

Inlägg 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.
Användarvisningsbild
ToB
Inlägg: 678
Blev medlem: 22 februari 2004, 10:32:58
Skype: tobias_bjork
Ort: Sollentuna

Inlägg 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?
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg 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?
ristomemo
Inlägg: 1028
Blev medlem: 29 mars 2004, 14:12:18

Inlägg 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.
Skriv svar