Home
JAQForum Ver 24.01
Log In or Join  
Active Topics
Local Time 15:49 29 Nov 2024 Privacy Policy
Jump to

Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.

Forum Index : Microcontroller and PC projects : New Micromite PULSIN Function

Author Message
Goeytex
Regular Member

Joined: 12/05/2014
Location: United States
Posts: 74
Posted: 01:51pm 21 May 2014
Copy link to clipboard 
Print this post

Geoff has added a PULSIN function to MMBasic for the Micromite. Pulsin can read the width of a pulse from 1us to 1 sec with a resolution of 100ns.

More info can be found HERE

This opens up a lot of possibilities. Below is a sample program I did to calculate period / frequency using Pulsin. With a 10kHz applied signal, accuracy is within about .5%. But the good part is that a frequency can be acquired * calculated in < 3ms instead of the 1 second needed by FIN. Of course this time will increase with slow signals.

To use Pulsin you will need Micromite V4.5D (Beta)

Here is the code I used for testing.

CODE
[code]
'======================================
'Micromite MMBasic Ver4.5D (Beta)
'Using Pulsin to get Period / Frequency
'======================================

CPU 40
SetPin(15),DIN

get_period:
Do
Timer = 0
Mark = Pulsin(15,1) '// Get Mark
Space = Pulsin(15,0) '// Get Space
If Mark = -1 Or Space = -1 Then GoTo err1 '// Check for error
Period = Mark + Space '// Sum
Frequency = 1000000 / period '// Calc Freq
TT = Timer

Print "Period =" period "us"
Print "Frequency =" Frequency "Hz"
Print "Code Execution Time: " TT "ms"
Print
mark = 0 : Space = 0 '//clear variables
Pause 500
Loop

err1:
Print "Error"
Pause 20
GoTo get_period
[/code]

Bill

 
Bill.b

Senior Member

Joined: 25/06/2011
Location: Australia
Posts: 226
Posted: 02:56pm 21 May 2014
Copy link to clipboard 
Print this post

Do think it may be possible to use the pulsing / pulsout on the same pin
to communicate with the SRF 005 ultrasonic transducer, using one connection as
is done with the picaxe.

pulsout c.1,2 ' produces about 20uS pulse (must be minimum of 10uS)
pulsin c.1,1,range ' measures the range in 10uS steps
pause 10 ' SRF005 mandatory 10mS recharge period
' after ranging completes
let range = range * 10 /58

Bill
In the interests of the environment, this post has been constructed entirely from recycled electrons.
 
TassyJim

Guru

Joined: 07/08/2011
Location: Australia
Posts: 6103
Posted: 04:55pm 21 May 2014
Copy link to clipboard 
Print this post

Bill,
The SRF005 looks to be the same as the HC-SR04 which the microMite can talk to as is.
The microMite can also use the 3 terminal versions where the trigger and echo share the same pin.

You should be able to use the PULSEIN command but have you tried the SRF005 with the microMite's DISTANCE command?

Jim
VK7JH
MMedit   MMBasic Help
 
Bill.b

Senior Member

Joined: 25/06/2011
Location: Australia
Posts: 226
Posted: 05:10pm 21 May 2014
Copy link to clipboard 
Print this post

Thanks Jim

No not yet as I only received my blank Pic32s yesterday.
I had just finished downloading 4.6c when I read this.
Will have to reprogram the chips with 4.5d and give it a try.

maybe I should read the manual first.


BillEdited by Bill.b 2014-05-23
In the interests of the environment, this post has been constructed entirely from recycled electrons.
 
Goeytex
Regular Member

Joined: 12/05/2014
Location: United States
Posts: 74
Posted: 05:48pm 21 May 2014
Copy link to clipboard 
Print this post

  Bill.b said   Do think it may be possible to use the pulsing / pulsout on the same pin
to communicate with the SRF 005 ultrasonic transducer, using one connection as
is done with the picaxe.

pulsout c.1,2 ' produces about 20uS pulse (must be minimum of 10uS)
pulsin c.1,1,range ' measures the range in 10uS steps
pause 10 ' SRF005 mandatory 10mS recharge period
' after ranging completes
let range = range * 10 /58

Bill


I would try it with both the Distance command and with Pulsin and see which works better. Seems to me that the Distance command should be more efficient

With MMBasic PULSE / PULSIN I think you will need to toggle the I/O Pin direction.

eg. (untested)
[code]
Get_distance:
SetPin(15), DOUT
pulse 15, .02 '// 20us pulse
SetPin(15), DIN
range = FIX(Pulsin(15,1)) '// Get Data / Conv to integer / (in us)
'do the math
Pause 20
Return
[/code]


Edited by Goeytex 2014-05-23
 
Bill.b

Senior Member

Joined: 25/06/2011
Location: Australia
Posts: 226
Posted: 10:45pm 21 May 2014
Copy link to clipboard 
Print this post

The distance command works OK with the SRF 0005 using one pin
for tripper and echo.

[code]
do
d = Distance(15)
print d
pause 1000
loop
[/code]

Now I have installed 4.5D I will try Goeytex's Code

Edit:

[code]
do
setpin(15), dout
Pulse 15, .02
Setpin(15), Din
d = Fix(PulsIn(15,1))
d = d/60
Print d
pause 1000
loop
[/code]

this worked OK.
I would say the Distance function would be similar in operation.
I have not check the timing of either.

BillEdited by Bill.b 2014-05-23
In the interests of the environment, this post has been constructed entirely from recycled electrons.
 
Print this page


To reply to this topic, you need to log in.

© JAQ Software 2024