Society of Robots - Robot Forum

Electronics => Electronics => Topic started by: Builder1 on July 11, 2008, 07:46:59 PM

Title: Multi-tasking Microcontroller
Post by: Builder1 on July 11, 2008, 07:46:59 PM
Hello Everyone,
Suppose I plan to use several motors to drive a robot and the motors need to communicate with one another. How can I multi-task a microcontroller or a group of microcontrollers so that several motors  can communicate with each other and do what they have to do? Is that possible ? I am a complete noob to building robots so the answers to my questions maybe real obvious to all you experts out there, so please excuse my inexperience. Please explain how what I have just described can be done if it is in fact possible. Thank you in advance for your help.
Title: Re: Multi-tasking Microcontroller
Post by: TrickyNekro on July 12, 2008, 02:36:27 AM
From my experience you can not multitask a microcontroller... that's bad I know....
But that's for common micros... Parallax Propeller I heard that handles multitasking but never got the chance to work with it...
And the bad thing about propeller for me is that the 3v3 operating voltage is quite restrictive for new users....
Anyway...

I don't know which microcontrollers can be multitasked.... but 8 bit AVR and PIC won't multitask...

But if you are good in programming and the architecture of the machine you are using you can handle time properly and
manage to get some things done will others are in progress...


Better use a main microcontroller with other "support" and smaller ones...

That's from me...
Lefteris,
Greece
Title: Re: Multi-tasking Microcontroller
Post by: izua on July 12, 2008, 05:29:22 AM
Ahem, hell knows what "motors need to communicate to one another" means.

Anyway, nothing can multitask unless it has 2+ cores. Not even your CPU. But it can be faked. Look into a RTOS (real time operating system) for your mcu.
Title: Re: Multi-tasking Microcontroller
Post by: Commanderbob on July 12, 2008, 10:02:31 AM
Like izua said you need two+ cores to truly multitask but I have faked multitasking by using the timers of a dsPIC to split up the processing time. I had it update a 3-D LED cube while it was also calculating the patterns. Using this style you have one main task (calculating the patterns) and a side task (updating the cube). I also added in another task, reading a microphone.

If you use more then one processor then you can multitask, one could be driving the motors while the other is watching out for obstacles. Once there is something in the way it could tell the micro controlling the motors to avoid it.

Justin
Title: Re: Multi-tasking Microcontroller
Post by: Steve Joblin on July 12, 2008, 10:08:11 AM
You can absolutely multi-task on a microcontroller... if the microcontroller is a muti-tasking microcontroller!  I only know of one true one... it is made by Parallax and called the Propeller... http://parallax.com/Default.aspx?tabid=407 (http://parallax.com/Default.aspx?tabid=407)
Title: Re: Multi-tasking Microcontroller
Post by: JesseWelling on July 12, 2008, 11:00:23 PM
No need to flame the new guys izua.

But it is indeed as izua says. If you truly need to do multiple things on a microprocessor, you need to look into an RTOS, or cook up your own timer based solution. I'd go with an RTOS because if you don't have your full requirements (what hobby robot builder ever does?) it will easier to add to an RTOS solution than it will be to add to a custom solution. The best place to start into acessable quality hobby RTOS is the FreeRTOS (http://www.freertos.org/) project. I've been using it for almost 2 years now and am completely happy with it on my ATmega, even more so than the RTOS we use at my work place.

The better question here, that izua alluded to, is what do you mean when you say you need the motors to talk to each other? What functional end requirement do you need? Give us a high level overview of what you want this robot to do and we will be able to help you more.
Title: Re: Multi-tasking Microcontroller
Post by: Steve Joblin on July 13, 2008, 07:20:53 AM
Sorry Jesse, but I do beg to differ with you... please see my post above... the Propeller by Parallax is a true multi-processor microcontroller.
Title: Re: Multi-tasking Microcontroller
Post by: JesseWelling on July 13, 2008, 10:41:58 AM
Indeed it you are correct. But for me personally there are a couple of things that I don't like about it.
The propeller takes an 160mhz processor and essentially turns it into eight 20mhz processors by clever hardware.
It has lower pin count, and less support hardware than the standard ATmega 128(where is SPI?)
At this moment it can't be programed in C.

I'm not saying it's not a good processor, I'm just saying that I can do better for my money with other processors at this junction.

If you like it, use it. However for my projects and their budgets, it is a poor fit when compared to an ATmega and FreeRTOS. YMMV.
Title: Re: Multi-tasking Microcontroller
Post by: Soeren on July 13, 2008, 08:43:22 PM
Hi,

Suppose I plan to use several motors to drive a robot and the motors need to communicate with one another.
I guess you mean something like you want a "brain" to keep track of what your motors do, since the motors in themselves have no reason (or means) to "chitchat"?

How can I multi-task a microcontroller or a group of microcontrollers so that several motors  can communicate with each other and do what they have to do?
For controlling a bunch of motors, you don't need multitasking. In the time it takes you to move a vehicle 1 mm, your average microcontroller can do lots of instructions.

Please explain how what I have just described can be done if it is in fact possible.
If you needed serious speed, true real time multitasking would be better done by parallel processing or processor clustering, but take a deep breath and make a realistic estimate of your needs (speed-wise) and compare that to what you can get out of even a slow ยต-controller - I think you will find a good overhead :)

Should you need more apparent speed than what linear programming will let you get, read up on state machines, where the routine in most need of control gets it first, then give control to the next most needy, so to speak.
The same approach can be used to (apparently) speed up response time in time slice multiplex, which is one of the early (and still very useable) forms or multitasking.


Whether you use a single processor with say 4 cores or 4 independent processors for doing 4 tasks gives almost the same yield if you really need true multitasking, but very few apps need that kind of speed and controlling motors is about as far as you get from needing multitasking.

If you need more speed for an app. first optimize your code. If that's not enough, choose a faster processor/controller. Only when these options are not enough, bring in more cores/processors.

But first... Sit down and calculate what speed you need - 1 second will easily give you millions of instructions and you have to be a quite sloppy programmer to waste enough of them to not be able to handle a handfull of motors.
Title: Re: Multi-tasking Microcontroller
Post by: AndrewM on July 14, 2008, 08:40:47 AM
It has lower pin count, and less support hardware than the standard ATmega 128(where is SPI?)
At this moment it can't be programed in C.

The only thing I don't like about the propeller is having to use SPIN or assembly, I prefer C myself.  The good thing about the propeller is that while it doesn't have a very high pin count, just about every IO pin can be used for anytype of IO action.  ADC, SPI, I2C, etc.  There is no one pin is just for this function.  People have created 10 pin parallel busses between devices using the propellers, which to me is a very nice feature.

As to answer the original question, multiple controllers is probably going to be your best bet.  I would imagine that each motor controller would need a huge amount of processing power, so you can go with lite weight atmels, and use something beefier for the main controller.  Connect them all up using SPI or I2C and each motor controller can send and receive info from the main controller.  But before embarking on that route, take Soeren's advice and assess what you actually need to accomplish and whether a single controller could handle it all.
Title: Re: Multi-tasking Microcontroller
Post by: TrickyNekro on July 14, 2008, 12:22:05 PM
Also, I don't mean to flame you but the only processors you can multitask for real is
FPGA style processors but.... don't even think about it....  :P
Title: Re: Multi-tasking Microcontroller
Post by: izua on July 14, 2008, 01:08:09 PM
Now, I don't mean to add to the flame, but a FPGA is not a processor ;D
*cartman voice: flame wars!*
Title: Re: Multi-tasking Microcontroller
Post by: brijesh on July 15, 2008, 11:21:27 AM
From wikipedia

Multitasking:
In computing, multitasking is a method by which multiple tasks, also known as processes, share common processing resources such as a CPU. In the case of a computer with a single CPU, only one task is said to be running at any point in time, meaning that the CPU is actively executing instructions for that task.


Multiprocessing:
Multiprocessing is the use of two or more central processing units (CPUs) within a single computer system. The term also refers to the ability of a system to support more than one processor and/or the ability to allocate tasks between them.

Based on above definition, Atmel AVR chips can do both Multitasking and Multiprocessing. The Parallax Propeller chip is a Multi-core chip.

Multi-Core:
A multi-core CPU (or chip-level multiprocessor, CMP) combines two or more independent cores into a single package composed of a single integrated circuit (IC), called a die, or more dies packaged together. A dual-core processor contains two cores, and a quad-core processor contains four cores. A multi-core microprocessor implements multiprocessing in a single physical package.



Title: Re: Multi-tasking Microcontroller
Post by: airman00 on July 15, 2008, 11:39:50 AM
Now, I don't mean to add to the flame, but a FPGA is not a processor ;D
*cartman voice: flame wars!*

lmao , find a video of him saying that , that would make my day
Title: Re: Multi-tasking Microcontroller
Post by: izua on July 15, 2008, 12:19:23 PM
"With Apologies to Jesse Jackson". When cartman fights the midget. Episode 1154, or s11e01.
Title: Re: Multi-tasking Microcontroller
Post by: bens on July 15, 2008, 12:55:19 PM
Now, I don't mean to add to the flame, but a FPGA is not a processor ;D
*cartman voice: flame wars!*

It can be.  Many microcontroller architectures can be implemented on FPGAs.

- Ben
Title: Re: Multi-tasking Microcontroller
Post by: izua on July 15, 2008, 12:59:26 PM
Yes, but its usually slower than the discrete thing.
A virtual machine can implement any CPU architecture too, but that doesn't make the piece of software a real machine.
Title: Re: Multi-tasking Microcontroller
Post by: bens on July 15, 2008, 02:50:36 PM
But the point is that it isn't virtual.  It's an actual hardware microcontroller implemented out of the gates on the FPGA.  Its potentially being slower than a version built directly out of silicon doesn't negate the fact that it's functioning as a true processor.  You could make something far more powerful than an 8-bit AVR with an FPGA, and you have the flexibilty to make FPGA processors that are much faster at uncommon applications than standard microcontrollers (e.g. 35-bit multiplication).

An FPGA configured with a microcontroller architecture is kind of like a motor driver H-bridge built with discrete MOSFETs while a permanently etched silicon microcontroller is like the motor driver H-bridge built directly into an IC.  You can't really argue that the discrete MOSFET version isn't a legitimate motor driver; all you can argue is that the IC version is more efficient/has higher performance.

- Ben
Title: Re: Multi-tasking Microcontroller
Post by: ahab on July 15, 2008, 05:39:27 PM
I'm just going to suggest that some of you read this:

http://www.embedded.com/columns/technicalinsights/192503587?_requestid=424085

Last semester I ran a model train layout with 50+ threads on one 586.

I won't consider doing a real time system with fewer than 5 threads. I don't care how many processors it has.

But there aren't any free Ada compilers for common microcontrollers.
Title: Re: Multi-tasking Microcontroller
Post by: bulkhead on July 16, 2008, 12:38:09 AM
Propeller C compiler $99 http://parallax.com/Store/Microcontrollers/BASICStampModules/tabid/134/txtSearch/imagecraft/List/1/ProductID/510/Default.aspx?SortField=ProductName%2cProductName

There's a free 45 day trial.  The compiler is more geared towards making C-trained engineers' transition to the Propeller easier.  For the hobbyist, learning SPIN isn't that big of a deal.  If you didn't already know C, SPIN's syntax is arguably easier to learn.  The complete protoboards start at $20, but require a $30 programmer.  There's also the $45 PRC (http://wulfden.org/PRC/index.shtml) especially geared towards robotics, with jumper configurable ports for up to ~28 servos/peripherals, breadboarding space, and serial port programmer.

Multitasking is as simple as launching a function call into another of the Propeller's 8 cogs (processors).
Title: Re: Multi-tasking Microcontroller
Post by: AndrewM on July 16, 2008, 09:18:22 AM
Propeller C compiler $99 http://parallax.com/Store/Microcontrollers/BASICStampModules/tabid/134/txtSearch/imagecraft/List/1/ProductID/510/Default.aspx?SortField=ProductName%2cProductName

There's a free 45 day trial.  The compiler is more geared towards making C-trained engineers' transition to the Propeller easier.  For the hobbyist, learning SPIN isn't that big of a deal.  If you didn't already know C, SPIN's syntax is arguably easier to learn.  The complete protoboards start at $20, but require a $30 programmer.  There's also the $45 PRC (http://wulfden.org/PRC/index.shtml) especially geared towards robotics, with jumper configurable ports for up to ~28 servos/peripherals, breadboarding space, and serial port programmer.

Multitasking is as simple as launching a function call into another of the Propeller's 8 cogs (processors).

I think $99 is well worth not having to learn a new language.  As it is I have to stop myself when doing any coding to make sure I am using the correct syntax for a given language and not trying to do something the language forbids (ie java).
Title: Re: Multi-tasking Microcontroller
Post by: Builder1 on July 16, 2008, 02:55:28 PM
Hi guys,
Are you guys saying that if I decide to go with regular, nonmulti-tasking microcontrollers, I would need as many microcontrollers as there are sensors and motors? If that is so then how do I supply them all with power from the same power source? I don't want to give each device its own power source 'cause I'd like to cut down on weight and cost. Would powering the different devices and microcontroller with the same power source be a problem?
Title: Re: Multi-tasking Microcontroller
Post by: bens on July 16, 2008, 03:08:08 PM
You just need one microcontroller.
Title: Re: Multi-tasking Microcontroller
Post by: paulstreats on July 16, 2008, 05:15:52 PM
Back to the original question....

 As Bens said above, you just need 1 microcontroller and dont really have to multitask either, just running the commands liearly would work well enough. (most people who use motors use at least 2 so its not a assive problem)

 When you say communicate with each other I think that you need to know better how to implement the software, the reason being that the software on the microcontrollers represent what the hardware is doing (as in the software tells the hardware what to do). So in effect you just need the software building in such a way that the different parts of the software can communicate effectively with each other.

e.g. in software you tell the left motor to go forwards so a variable is set in software, if the right motor needs to know what the left motor is doing then the part of the software that controls the right motor can just look at the variable set by the left motor.
Title: Re: Multi-tasking Microcontroller
Post by: Admin on July 20, 2008, 05:40:37 PM
lol this thread got waaaay off topic (but it was still an interesting read)

Hey Builder1, just check this out:
http://www.societyofrobots.com/step_by_step_robot.shtml
It'll give you a good idea how one microcontroller can control many different things.