PDA

View Full Version : A simple and basic question



Ted's
- 25th June 2008, 08:22
The code


DEFINE OSC 20
WHILE A <> 0
Zaehler_Byte = Zaehler_Byte + 1
WEND

is given.

Assuming that Zaehler_Byte = 60000, how long did the loop take?

BrianT
- 25th June 2008, 11:33
I think the following will happen. At startup all variables are cleared so A = 0. Therefore the While A <> 0 test will fail and the WHILE/WEND block will be skipped.

HTH
BrianT

Acetronics2
- 25th June 2008, 12:23
Hi, ted

Supposing you use Zaeler_BYTE as a Word ( Good question ... indeed ) :

As you increment Zaeler_BYTE , you'll reach an overflow ( and return to Zero ) for Zaeler_BYTE = 65536 ...

so, you'll count from 60 000 to 60535 ...

that makes ??? loops ...



BUT ... as it is Zaeler_BYTE ...

Overflow will occur for Zaeler_BYTE = 256

And you'll count only from 96 ( 60 000 Lower Byte ) to 255 ...

that really makes ??? ... loops

Jawohl ???


Alain

PS: we suppose A is an input state ... and can be 0 or 1 ...

T.Jackson
- 25th June 2008, 12:29
I think what Ted is actually asking is something like this ...



DEFINE OSC 20

WHILE Zaehler_Word <> 60000
Zaehler_Word = Zaehler_Word + 1
WEND


With a 20MHz osc, how long did it take for Zaehler_Word to reach 60,000?

Trent Jackson

Acetronics2
- 25th June 2008, 12:37
Hi, Trent

Once, the littles things I raised up have been solved ... a little round in MPSIM is the next step ...

To be sure ...

Alain

T.Jackson
- 25th June 2008, 12:42
I think that the question is very "meaningful" and not so easy to accurately answer without going into assembly routines. I say this because you need to know the number of instruction cycles needed for each mnemonic, the time taken for each cycle (around 1uS at 4MHz I think), and finally what OP codes are driving the PBP instructions. You need to have a good understanding of assembly code to be able to work it out, which I don't have, otherwise I'd provide an answer.

Trent Jackson

Acetronics2
- 25th June 2008, 12:53
Hi,

I remember Darrel wrote a little bit of program to measure program parts duration ... a SEARCH through those columns will be welcome.

The second way is to use MPSIM ( part of MPLAB ) with the stopwatch : result is quite perfect !

Alain

T.Jackson
- 25th June 2008, 13:05
@20MHz I'm guessing ~3uS per iteration of the loop.

Trent Jackson

Ted's
- 25th June 2008, 13:13
I do not understand your answers.

What you need to take out of this:

If you loop a variable from zero to 60000 on a pic being driven by a 20Mhz Quartz using the pbp code WHILE without adding a Pauseus XY into the loop, what does this value tell me about the time being elapsed.

Acetronics2
- 25th June 2008, 14:09
I do not understand your answers.

What you need to take out of this:

.

So, WE CANNOT ANSWER YOUR QUESTION ...

IF A = 0 ... the loop won't be executed ...

IF A != 0 ... The loop is infinite ...

so, the loop will last as long as A != 0 ...


This is what you have to take out of your hasty code snippet ...

Alain

Ted's
- 25th June 2008, 14:40
We? Are you schizophrenic?

Acetronics2
- 25th June 2008, 20:44
your answers.


I only remember having responded ONCE to you ... and I do think no one here can give you a precise time as an answer. ( except Fernand REYNAUD's " a certain time" ... Lol )

End of File for me ...

Alain

falingtrea
- 25th June 2008, 21:49
The best way to get your answer is to compile the code, look at the assembly listing, and compute the time to execute one cycle from that. Then multiply it by the number of cycles the loop is expected to run. You also need to check the PIC assembly code docs to see how long it takes to execute each assembly code. I have done this a lot in order to determine how long my interrupt routines are.

Also I think some of the comments are about the fact that the code sample you gave may not run the way you expect. "A" is not defined so the WEND duration is unknown. Also, A does not change so it is not a good loop control variable.

I wonder if someone has written a program that reads assembler files and tags execution times to all the microcode.

T.Jackson
- 26th June 2008, 11:52
We? Are you schizophrenic?

Don't worry about Alain, he doesn't bite, as long as he takes his meds he's fine. But when he forgets to take them :eek:

Ted's
- 26th June 2008, 12:21
Don't worry about Alain, he doesn't bite, as long as he takes his meds he's fine. But when he forgets to take them :eek:
Please muzzle him to be sure he won't bite.

T.Jackson
- 26th June 2008, 12:45
Please muzzle him to be sure he won't bite.

Nah, I think we'll put his medication up to 1000mg of Chlorpromazine

T.Jackson
- 27th June 2008, 16:38
You'll be a new a man in a couple of weeks Alain ...
Chlorpromazine is used to treat psychotic disorders and symptoms such as hallucinations, delusions, and hostility. Take two tablets twice a day with food.

Side Effects

- Shaking (like Parkinson's Disease)
- Stiffness
- Restlessness
- Problems with sex life
- Decreased appitite

Shocking side effects with Chlorpromazine -- I don't know what's worse, being schizophrenia or taking Chlorpromazine!

But I guess that the good news is that you're not schizophrenic Alain, at least I don't think so ...

Trent Jackson

Acetronics2
- 27th June 2008, 16:55
Hi, Trent

I really admire your knowledge about those border subjects ...

Seems you are really used to psychiatric advice.

One thing is sure : your doubts are really boring ... and have been boring for too long a time.

Sorry not to be one of the SuperTrent's fans ...

Alain

T.Jackson
- 27th June 2008, 17:00
Definitely not schizophrenic.

Trent Jackson
____________
Undergraduate b.tech

T.Jackson
- 27th June 2008, 17:27
One thing is sure : your doubts are really boring ... and have been boring for too long a time.

Sorry not to be one of the SuperTrent's fans ...


Don't ever try pleading insanity Alain, I guarantee it'll backfire as usual.

Trent Jackson

skimask
- 27th June 2008, 17:49
Seems you are really used to psychiatric advice.
One thing is sure : your doubts are really boring ... and have been boring for too long a time.
Sorry not to be one of the SuperTrent's fans ...
Anyone for a SuperTrent-Non-Fan Club? :D


Don't ever try pleading insanity Alain, I guarantee it'll backfire as usual.
Trent Jackson
Can I point out something (again)?


Date of Birth:
February 8, 1977
Age:
31
Biography:
Fulltime student - Bachelor of Applied Science in IT
Location:
Australia
Interests:
Cars, Computers, Electronics
Occupation:
Currently not employed

Still?

skimask
- 27th June 2008, 17:50
Nah, I think we'll put his medication up to 1000mg of Chlorpromazine

How 'bout we get you 1mg of STFU?

Ted's
- 28th June 2008, 00:18
falingtrea, thank you for your detailed answer. (Un)fortunately I left assembler behind me a few years ago when I started with PBP. And I would like to not go back.

So do you all agree that it is roughly 3uS per loop as T.Jackson states?

Offtopic:
I am sure that T.Jackson has his reasons to react the way he did.

Coming from his kind of answer compared to all answers in this thread, Acetronics does have mental issues.

It is something between T.Jackson and Acetronics, and you were not invited to be a freeloader, skimask. So stay out of this.

Darrel Taylor
- 28th June 2008, 00:36
So do you all agree that it is roughly 3uS per loop ...

Actually, I think they all agree that you should measure it for yourself.

instruction execution time
http://www.picbasic.co.uk/forum/showthread.php?t=365

And I also think that the Rest of the forum agrees that everyone here needs to calm down.
I have the complaints to back that up.

Mellow out! Or stop posting.
<br>

T.Jackson
- 28th June 2008, 02:24
Date of Birth:
February 8, 1977
Age:
31
Biography:
Fulltime student - Bachelor of Applied Science in IT
Location:
Australia
Interests:
Cars, Computers, Electronics
Occupation:
Currently not employed
Can I point out something (again)?

Still?

You know I really should update my profile on here -- I'm actually no longer doing a science degree (it's beyond my ability), instead I'm now doing the b.tech degree (bachelor of information technology)

Trent Jackson

T.Jackson
- 28th June 2008, 02:44
But Jeremy (skimask) ...

The biggest difference between you and I is that I have nothing to hide, whereas you obviously do to some extent. Your public profile is blank, not even a mention of your location (there used to be), and you seem to go off the rails when ever someone calls you by your name! Incidentally I have recently discovered that your profile did contain some information at one stage, you stated that your location was North Dakota I believe.

Trent Jackson

skimask
- 28th June 2008, 06:49
Ya know, I was going to PM this, but screw it...This might be good for a few laughs...and it's my B/Day and I feel froggy (of course that last fishbowl doesn't help things either! :D)

Listen up there Trent Jackson, UNEMPLOYED COLLEGE STUDENT, and Supa-Genius (think back to the ol' Wile E. Coyote and Road Runner cartoons) and listen good and hard...Surely your continuous (continuing I might add) institutional education and your connections have enabled you to listen and listen well, even if the average person has to yell up to your level...UP as in the angle sense...as in the vertical sense.
I had a problem with ID theft awhile back that I just recently got fixed...not your standard ID theft either (credit cards, bank accounts, etc), this jerkoff enlisted in the U.S. Navy as me. So all of the sudden, I went from a 20+ year USAF MSgt to a 1 year Seaman Basic, credentials gone, pay grade gone, test scores out, clearances---C'ya!...blah blah blah blah.
I may go 'off the rails' when somebody calls me by name (which I earned that nickname about 20+ years as a result of a cold cold winter and numerous strong beverages), but...well, I don't go into some crazy psycho B.S. rambling crap-ola... Emptying out a profile here is one of the least of my worries when it comes to that whole ID thing...but every little bit of cleaning out information couldn't hurt...

And "Ted's"...if you hang out here enough (which you obviously haven't yet), you'll figure out that Acetronics (Alain) is one of the more educated people around here. So while you're having problems figuring out exactly how many cycles a simple loop runs, all it really takes is a look at the .lst file generated by the compilation process and a bit of math would easily give you your answer. And figuring out how to use MPSIM is a good thing. After all, I don't think anybody here has YOUR hardware, with YOUR configuration. So, even if we were able to give you a correct answer for the majority, who knows...something in YOUR configuration might be just a tad bit off and cause you to have a completely different answer. So, the only true answer is for you to handle it yourself.
And besides that, Alian is absolutely right...your first post is an unanswerable question without having a definition for A.
And while this Trent Jackson, while obviously educated in certain things, sits WAY up there, with his big words and his big acronyms and big medical terms...

Ahhhhhh......that was good.....and I feel.....well, a year older...

Ted's
- 28th June 2008, 10:14
Actually, I think they all agree that you should measure it for yourself.
I understand your thought. But don't take other people's right to state their view.

Ted's
- 29th June 2008, 09:26
skimask, happy birthday.

I created a new code:



Zahl VAR WORD
DEFINE OSC 20
WHILE Zahl < 60000
Zahl = Zahl + 1
WEND


There was no lst created but a mac, asm and hex.

mac:



NOLIST

LABEL?L macro Label
RST?RP
ifdef PM_USED
LALL
Label
XALL
else
Label
endif
endm

ADD?WCW macro Win, Cin, Wout
if (Wout == Win)
if (Cin == 1)
CHK?RP Wout
incf Wout, F
btfsc STATUS, Z
incf Wout + 1, F
else
movlw low (Cin)
CHK?RP Wout
addwf Wout, F
if (((Cin) >> 8) == 0)
btfsc STATUS, C
incf Wout + 1, F
else
movlw (Cin) >> 8
btfsc STATUS, C
addlw 1
addwf Wout + 1, F
endif
endif
else
movlw low (Cin)
CHK?RP Win
addwf Win, W
MOVE?AB Wout
if (((Cin) >> 8) == 0)
MOVE?BA Win + 1
btfsc STATUS, C
addlw 1
MOVE?AB Wout + 1
else
movlw (Cin) >> 8
btfsc STATUS, C
addlw 1
CHK?RP Win
addwf Win + 1, W
MOVE?AB Wout + 1
endif
endif
endm

CMPGE?WCL macro Win, Cin, Label
MOVE?WW Win, R0
MOVE?CB (Cin) >> 8, R1 + 1
MOVE?CA low (Cin)
L?CALL CMPGE
BIT?GOTO 0, STATUS, Z, Label
endm
CMPGE_USED = 1

GOTO?L macro Label
L?GOTO Label
endm


LIST


asm:


PM_USED EQU 1

INCLUDE "16F628A.INC"


; Define statements.
#define OSC 20

RAM_START EQU 00020h
RAM_END EQU 0014Fh
RAM_BANKS EQU 00003h
BANK0_START EQU 00020h
BANK0_END EQU 0007Fh
BANK1_START EQU 000A0h
BANK1_END EQU 000EFh
BANK2_START EQU 00120h
BANK2_END EQU 0014Fh
EEPROM_START EQU 02100h
EEPROM_END EQU 0217Fh

R0 EQU RAM_START + 000h
R1 EQU RAM_START + 002h
R2 EQU RAM_START + 004h
R3 EQU RAM_START + 006h
R4 EQU RAM_START + 008h
R5 EQU RAM_START + 00Ah
R6 EQU RAM_START + 00Ch
R7 EQU RAM_START + 00Eh
R8 EQU RAM_START + 010h
FLAGS EQU RAM_START + 012h
GOP EQU RAM_START + 013h
RM1 EQU RAM_START + 014h
RM2 EQU RAM_START + 015h
RR1 EQU RAM_START + 016h
RR2 EQU RAM_START + 017h
_Zahl EQU RAM_START + 018h
_PORTL EQU PORTB
_PORTH EQU PORTA
_TRISL EQU TRISB
_TRISH EQU TRISA
INCLUDE "KKK.MAC"
INCLUDE "PBPPIC14.LIB"

LABEL?L L00001
CMPGE?WCL _Zahl, 0EA60h, L00002
ADD?WCW _Zahl, 001h, _Zahl
GOTO?L L00001
LABEL?L L00002

END


How do you filter out the information needed?

skimask
- 29th June 2008, 10:06
skimask, happy birthday.
I created a new code:
..........
There was no lst created but a mac, asm and hex.
.....
How do you filter out the information needed?

There's a checkbox in MCS for telling MCS to kick out a .lst file during the compilation.
Put easily recognizable labels before and after the code section that your after in your PBP source and when the .lst file gets created, do a search (Ctrl-F) for those labels and you should be able to see them right off.

Ted's
- 29th June 2008, 10:41
This is what is written in between



48 LABEL?L L00001
+ LALL
+ 0019- L00001
49 CMPGE?WCL _Zahl, 0EA60h, L00002
+ 0019- 0838 movf _Zahl, W
+ 001A- 00A0 movwf R0
+ 001B- 0839 movf (_Zahl) + 1, W
+ 001C- 00A1 movwf (R0) + 1
+ 001D- 30EA movlw low ((0EA60h) >> 8)
+ 001E- 00A3 movwf R1 + 1
+ 001F- 3060 movlw low (low (0EA60h))
+ 0020- 2001 call CMPGE
+ 0021- 1D03 btfss STATUS, Z
+ 0022- 2827 goto L00002
50 ADD?WCW _Zahl, 001h, _Zahl
+ 0023- 0AB8 incf _Zahl, F
+ 0024- 1903 btfsc STATUS, Z
+ 0025- 0AB9 incf _Zahl + 1, F
51 GOTO?L L00001
+ 0026- 2819 goto L00001
52 LABEL?L L00002
+ LALL
+ 0027- L00002
53


What is more, there is no question about my configuration. It is a timing issue. The osc value determines the speed to let the program know how many cycles one millisecond will take f.i.. Knowing the speed there is enough information to reproduce the question and to give an answer. I am not here to relearn what would take others just a few seconds to reproduce - less than writing a "do it yourself" takes.

I am going to use Jackson's 3us and this is the end of the story.

Do not make things more complicated than they have to be.

Acetronics2
- 29th June 2008, 11:08
Your result is :

504.027000 ms ... @ 8.4 µs per loop !!!

3 minutes to get it with MPSIM , as we had explained you ...

Alain

Ted's
- 29th June 2008, 11:25
You see, simple and easy for an experienced programmer.

Why did you not just do that in the first place?

So my code will be:



Zahl VAR WORD
time_in_us VAR WORD
DEFINE OSC 20
WHILE Zahl < 60000
Zahl = Zahl + 1
WEND

time_in_us = Zahl * (84/10)

Ted's
- 29th June 2008, 12:42
One thing to clarify: Is there a difference regarding the time being elapsed when using BYTE for Zahl instead of WORD?

So

Zahl VAR WORD

is being replaced by

Zahl VAR BYTE

Acetronics2
- 29th June 2008, 13:02
You see, simple and easy for an experienced programmer.

Why did you not just do that in the first place?



1) Cause here, we teach people how to catch the fish ... it's not a PbP "Drive in" !!!



as we had explained you ...


2) Cause there was NO answer to what you had asked ... and no way to understand what you wanted to do ...

3) Still no way to understand ... :




Zahl VAR WORD
time_in_us VAR WORD
DEFINE OSC 20
WHILE Zahl < 60000
Zahl = Zahl + 1
WEND

time_in_us = Zahl * (84/10)



... with this code, "Time_in_us" WON' T be 504 027 ... so, why re-calculate it ???

... I do not joke : with the calculation errors ( roundings ) , the showed result will be ... FALSE !!!


Was I Spiritual enough ???

Alain

skimask
- 29th June 2008, 19:01
One thing to clarify: Is there a difference regarding the time being elapsed when using BYTE for Zahl instead of WORD?
Yes, because comparing 2 words could take 2 comparisons....Check the high byte, if it's equal, then you have to go on and check the low byte.