Sida 1 av 4

Hur koda en timer i PBasic Pro?

Postat: 7 mars 2009, 19:44:35
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.

Re: Hur koda en timer i PBasic Pro?

Postat: 7 mars 2009, 19:58:05
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.

Re: Hur koda en timer i PBasic Pro?

Postat: 7 mars 2009, 21:24:20
av jojje
Har man { och } i PBasic Pro?

Trodde man slapp såna konstigheter, hmm... :vissla:

Re: Hur koda en timer i PBasic Pro?

Postat: 7 mars 2009, 21:27:56
av Icecap
Kanske man släpper det men vad hjälper det?

Re: Hur koda en timer i PBasic Pro?

Postat: 7 mars 2009, 23:22:40
av jojje
Det hjälper väl till att koden blir riktig. Tror man får massa irriterande error's. :humm:

Re: Hur koda en timer i PBasic Pro?

Postat: 9 mars 2009, 04:33:03
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.

Re: Hur koda en timer i PBasic Pro?

Postat: 9 mars 2009, 07:45:18
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.

Re: Hur koda en timer i PBasic Pro?

Postat: 9 mars 2009, 08:13:00
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 ??

Re: Hur koda en timer i PBasic Pro?

Postat: 9 mars 2009, 08:49:33
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.

Re: Hur koda en timer i PBasic Pro?

Postat: 9 mars 2009, 10:01:52
av jojje
Det får du tåla Icecap. Det är ju du som "jävlas" mest med BASIC-förespråkarna.

Re: Hur koda en timer i PBasic Pro?

Postat: 9 mars 2009, 10:11:13
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... :-) :-)

Re: Hur koda en timer i PBasic Pro?

Postat: 9 mars 2009, 10:22:30
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*

Re: Hur koda en timer i PBasic Pro?

Postat: 9 mars 2009, 11:00:34
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.

Re: Hur koda en timer i PBasic Pro?

Postat: 9 mars 2009, 11:09:00
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.

Re: Hur koda en timer i PBasic Pro?

Postat: 9 mars 2009, 12:13:30
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.