Hur koda en timer i PBasic Pro?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Kretskort
Inlägg: 182
Blev medlem: 5 februari 2008, 08:07:45
Ort: Göteborg

Hur koda en timer i PBasic Pro?

Inlägg av Kretskort »

Jag har märkt att pause kommandot skapar problem i program längre än ca 6 rader :)

Hur gör man en timer i PBP som inte stannar processorn? Jag har sökt men inte funnit något.
Användarvisningsbild
Icecap
Inlägg: 26628
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Hur koda en timer i PBasic Pro?

Inlägg av Icecap »

Det gör man inte helt enkelt!

Man använder en Timer i hårdvaran i stället och det kan lösas på många sätt. Jag brukar ha en timer på 10Hz till olika ändamål, t.ex. Delay.

Kod: Markera allt

volatile unsigned int Delay_Timer;

unsigned char Delay(unsigned int Length, unsigned char WaitForIt)
  {
  if(Length) Delay_Timer = Length;
  if(WaitForIt) while(Delay_Timer);
  if(Delay_Timer) return(true);
  return(false);
  }
Man ser då till att Timer-ISR'n räknar ner:
if(Delay_Timer) Delay_Timer--; <PBP: if(Delay_Timer > 0) then Delay_Timer = Delay_Timer - 1; kanske>

När man sedan behöver delayen kan man antingen vänta på att tiden går ut:
Delay(100, true);

eller ge den ett värde och sedan kolla om den är gått ut:
Delay(100, false);

Sedan i loopen kan man kolla:

Kod: Markera allt

if(Delay(0,false))
  { // Time still running
  }
else
  { // Timed out
  }
OBS: Inget av detta kan en PBP-användare tydligen förstå (se kommentarer nedan), bortse därför från detta inlägg.
Senast redigerad av Icecap 9 mars 2009, 11:01:40, redigerad totalt 1 gång.
Användarvisningsbild
jojje
Gått bort
Inlägg: 6380
Blev medlem: 20 januari 2006, 01:53:33
Ort: Stockholms utkant
Kontakt:

Re: Hur koda en timer i PBasic Pro?

Inlägg av jojje »

Har man { och } i PBasic Pro?

Trodde man slapp såna konstigheter, hmm... :vissla:
Användarvisningsbild
Icecap
Inlägg: 26628
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Hur koda en timer i PBasic Pro?

Inlägg av Icecap »

Kanske man släpper det men vad hjälper det?
Användarvisningsbild
jojje
Gått bort
Inlägg: 6380
Blev medlem: 20 januari 2006, 01:53:33
Ort: Stockholms utkant
Kontakt:

Re: Hur koda en timer i PBasic Pro?

Inlägg av jojje »

Det hjälper väl till att koden blir riktig. Tror man får massa irriterande error's. :humm:
Användarvisningsbild
Adde
Inlägg: 78
Blev medlem: 2 september 2008, 14:12:06
Ort: Linköping

Re: Hur koda en timer i PBasic Pro?

Inlägg av Adde »

Kanske interrupts är något?
http://darreltaylor.com/DT_INTS-14/intro.html eller
http://darreltaylor.com/DT_INTS-18/home.html

Annars har PicBasic ett eget forum. Användarna här på EF brukar inte uppskatta PicBasic så vidare mycket.
Användarvisningsbild
Andy
Inlägg: 5893
Blev medlem: 26 september 2004, 18:24:52
Ort: Södern

Re: Hur koda en timer i PBasic Pro?

Inlägg av Andy »

Adde skrev:Annars har PicBasic ett eget forum. Användarna här på EF brukar inte uppskatta PicBasic så vidare mycket.
Nä, det är mycket tråkigt! Kanske skulle EF förbjuda PBP för att slippa meningslösa kontroverser i ämnet.
Annars kan man ju låta bli att svara på inlägg som inte är av intresse.
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hur koda en timer i PBasic Pro?

Inlägg av sodjan »

> Jag har märkt att pause kommandot skapar problem i program längre än ca 6 rader

Korrekt, det fungerar om applikationen är rellativt enkel, men annars är
det ingen bra ide att "hänga upp" applikationen på det sättet.

> Hur gör man en timer i PBP...

"Gör" är inte rätt uttryck, man *använder* en timer. Läs på i databladet (för din processor) om "timers".
Det borde även finnas något i dokumentationen till PBP.

> Jag har sökt men inte funnit något.

*Var* har du sökt och *vad* har du sökt efter ??
Användarvisningsbild
Icecap
Inlägg: 26628
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Hur koda en timer i PBasic Pro?

Inlägg av Icecap »

Att strukturen i programmet är dålig har inget med språkvalet att göra och det känns konstigt att när man faktisk ger ett vettigt svar (problemet är ju inte PBP) kommer det kommentarer om att { & } inte hör hemma där...

Om PBP nu är så himla bra som förespråkarna påstår skulle det vara en enkel match att omvandla C-syntax till PBP, det är ju inte ens speciellt avancerat kod som det pratas om här.

Men OK, jag börjar fatta varför det blir så mycket snack när man påstår att BASIC inte håller måttet, det är lite som att som agnostiker prata religion med en pingstvän.
Användarvisningsbild
jojje
Gått bort
Inlägg: 6380
Blev medlem: 20 januari 2006, 01:53:33
Ort: Stockholms utkant
Kontakt:

Re: Hur koda en timer i PBasic Pro?

Inlägg av jojje »

Det får du tåla Icecap. Det är ju du som "jävlas" mest med BASIC-förespråkarna.
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hur koda en timer i PBasic Pro?

Inlägg av sodjan »

Vadå Icacap "tåla". Vi andra som tyckte sin kommenter var lite onödig då ?? Ska vi också "tåla" det ?

I detta fall var det ju ganska tydligt att det var ett principexempel som Icecap visade.
Jag tycker kanske inte att det var ett *bra* exempel, även jag har lite svårt att
läsa C-kod så där rakt av. Och eventuellt kunde Icacap ha gjort en liten notering att
"detta är i C, men i alla fall...", men det är en mindre kommentar...

Men din kommentar, Jojje, var däremot helt onödig och tillförde ingenting. Jag tänkte
inte kommentera det vidare, men nu blev det ju en fortsättning på det...

> Det är ju du som "jävlas" mest med BASIC-förespråkarna.

Där måste jag däremot hålla med dig, Icecap's anti-Basic-inlägg kan ibland
vara lite onödigt "vassa" i tonen... :-) :-)
Användarvisningsbild
Glenn
Inlägg: 36527
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: Hur koda en timer i PBasic Pro?

Inlägg av Glenn »

Icecap skrev: Om PBP nu är så himla bra som förespråkarna påstår skulle det vara en enkel match att omvandla C-syntax till PBP, det är ju inte ens speciellt avancerat kod som det pratas om här.
Jaha, så man mäter hur bra ett programmeringsspråk är genom att kontrollera hur enkelt det är att översätta C-kod till det ?

*suck*
Användarvisningsbild
Icecap
Inlägg: 26628
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Hur koda en timer i PBasic Pro?

Inlägg av Icecap »

Näpp men om det är så himla enkelt bör man kunde "omvandla" kod från vilket som helst språk till PBP eller hur?

Jag har t.ex. varit tvunget att göra C-kod av en assembler-kodsnudd, jag har gjort C-kod av BASIC och Pascal också och jag ser faktisk inte varför det skulle vara så svårt att göra i PBP. Men det kanske är DÄRFÖR vissa håller stenhårt i PBP... det är det enda de förstår???!!!

Nåväl, jag ska låta bli att ge tips och råd när PBP är inblandat om det är så illa sett.
Användarvisningsbild
Glenn
Inlägg: 36527
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: Hur koda en timer i PBasic Pro?

Inlägg av Glenn »

Icecap: Det har inte föresvävat dig att det har mer att göra med den som kodar än det aktuella språket kanske ?

Det är ju ungefär som att säga att svenska är ett dåligt språk efterssom det är så svårt att översätta från spanska, helt ignorerandes ifall personen som ska översätta det kan varken svenska eller spanska, eller att det är det absolut användbaraste språket i Sverige, efterssom i princip alla här talar det.

Det är väl förvisso inget fel med att dra ett exempel skrivet i ett annat språk, det jag vänder mej emot var just den dumma kommentaren.
H.O
Inlägg: 5895
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Hur koda en timer i PBasic Pro?

Inlägg av H.O »

Om du, Kretskort kunde förklara lite närmare vad det är du försöker göra så kanske en lösning kan arbetas fram istället för det vanliga BASIC-är-kass tugget. Det här problemet har ju INGET ALLS att göra med språket i sig.

Det "bästa" sättet är att använda en hårdvaru-timer i din PIC som du antingen sätter upp att generera en interrupt efter önskad tid (inte alltid möjligt beroende på hur lång tid du behöver) eller, som i Icecap's exempel, en tidbas på 10 eller 100Hz. Titta på Darrel Taylors interrupt-rutiner som Adde länkade till innan, där finns bra exempel.

Om du vill vänta 1 sekund och ändå göra något "under tiden", t.ex kolla en ingång, så är ju en lösning att vänta många korta perioder.

Kod: Markera allt

i VAR BYTE
For i = 0 to 100
 If PortB.2 = 1 then
 PortB.1 = 1
 EndIf
 PauseUs 9990   '<-Justera för bäst noggranhet.
Next i
Detta är ju såklart ingen bra lösning om man det man gör i loopen tar olika lång tid. Man får också justera pause-tiden och/eller antalet gånger genom loopen beronde på hur noggrann timing men behöver - men som sagt, det är EN möjlig lösning. Detta är naturligtvis ingen specifik BASIC-work-around. Du hamnar i samma situation oavsett vilket språk du väljer, PIC'en kan bara göra EN sak i taget.

Att Pause-kommandot inte funkar i program längre än 6 rader är ju rent felaktigt, det funkar precis som det ska.
Skriv svar