[Tinyos-help] Problems with GenericComm and PWM
BiBe
bibe2001 at gmx.de
Wed Jul 26 05:33:03 PDT 2006
Hi!
Thanks a lot for your fantastic help! PWM works now on a node, which is
remote controlled by radio. I just used
TOSH_ASSIGN_PIN(MOTOR1DIR, C, 1);
TOSH_ASSIGN_PIN(MOTOR1PWM, B, 5);
TOSH_MAKE_MOTOR1PWM_OUTPUT();
TOSH_MAKE_MOTOR1DIR_OUTPUT();
TOSH_CLR_MOTOR1PWM_PIN();
TOSH_CLR_MOTOR1DIR_PIN();
instead of
outp(0x20, DDRB);
and there were no conflicts with radio anymore.
BiBe
> -----Original Message-----
> From: Michael Schippling [mailto:schip at santafe.edu]
> Sent: Wednesday, July 26, 2006 6:19 AM
> To: BiBe
> Cc: tinyos-help at Millennium.Berkeley.EDU
> Subject: Re: [Tinyos-help] Problems with GenericComm and PWM
>
> Oh, now you're going to make me work AND explain what I did...oy...
>
> First I stole my PWM stuff from Sarah B's cotsbots board code that
> uses different pins and a somewhat different idea, vis motor direction.
> I then left the direction pin defs in but never used them, so at least
> three layers of confusion can ensue...my code is for the mica cards
> themselves.
>
> Second here's a quote from a previous post that might help explain the
> macros:
>
> >> Ian Welch wrote:
> >> I was wondering where I could find the TOSH function commands. I'm
> going through the CC1000 modules in hopes to write my own drivers. Was
> wondering what command like " TOSH_MAKE_CC_CHP_OUT_INPUT() " and "
> TOSH_SET_CC_PCLK_PIN() " do. I have an idea on what these functions do
> but would I like to know the details. I'm guessing there is a file
> locate somewhere that gives all these function. Where I might I find this
file.
> >>
> >> Thanks,
> >> Ian
> >>
> > They are generated by a macro mechanism that run two or three levels
> > deep, so there is basically no hope of finding the actual definition
> > without searching on each _*_ sub-string.
> > Good luck with that...
> >
> > In any case there is one more missing component you haven't stumbled
> > over yet (this is not the real definition, I just pulled it out of a
> > hat as an example....):
> >
> > // assign the name "CC_CHP_OUT" to port C, pin 0
> > TOSH_ASSIGN_PIN( CC_CHP_OUT, C, 0 ); // PC0
> >
> > Then your initial puzzles:
> > // set CC_CHP_OUT pin to Input mode (can also use _OUTPUT)
> > TOSH_MAKE_CC_CHP_OUT_INPUT()
> > // (after using TOSH_MAKE_CC_PCLK_OUTPUT) set pin to high
> > TOSH_SET_CC_PCLK_PIN()
> > // or, e.g., clear to low
> > TOSH_CLR_CC_PCLK_PIN()
> >
> > The TOSers did a pretty good job of keeping the pin names the same
> > as those on the schematic, which are of course slightly different
> > from those in the ATMEGA manual. But once you get over the hump it's
> > not too hard to intuit.
> >
> > MS
> >
> >
>
> So basically, from the above you should be able to intuit the TOS
> mechanism for assigning pins, names, and levels. So you need to make
> the PortB pins that can do PWM into outputs by diddling the right BITS
> on DDRB, which is done with the TOSH_MAKE_*_OUTPUT() macro, and do all
> the other PWM setup. This is done in the init() method of my
> HPLMotorIIM.nc file, but only so as to do the exact thing I wanted, so
> your pulse rates may change.
>
> Was that enough gobbledegook to get you going?
> MS
>
>
>
>
> BiBe wrote:
> > Hi!
> > Thanks a lot for your answer!
> >
> > With the DDRB register, I set the output pins for PWM. In your code,
> this is
> > done by:
> >
> > TOSH_MAKE_MOTOR1PWM_OUTPUT();
> > TOSH_MAKE_MOTOR1DIR_OUTPUT();
> >
> > TOSH_CLR_MOTOR1PWM_PIN();
> > TOSH_CLR_MOTOR1DIR_PIN();
> >
> > Where are those functions defined and how can I use them to get PWM
> > to
> Port
> > OC1A and OC1B? Can I even use these functions without having the
> > cotsbots-board?
> >
> > Furthermore I found that in a header file:
> >
> > /** after cotsbots motor/hardware.h for PWM output: **/ // it
> > appears that the PWM and DIR appellations are reversed // and also
> > that the pins assigned to PWM (sic) are not available // due to
> > their being used by the radio:
> > // PB1 -- SPI_SCK
> > // PB2 -- SPI_MOSI
> > // so gotta try somethong else....
> >
> > TOSH_ASSIGN_PIN(MOTOR1DIR, C, 0); // PC0
> > TOSH_ASSIGN_PIN(MOTOR1PWM, B, 6); // PB6
> >
> > TOSH_ASSIGN_PIN(MOTOR2DIR, C, 1); // PC1
> > TOSH_ASSIGN_PIN(MOTOR2PWM, B, 5); // PB5
> >
> > So there seems to be problems to use radio and PWM together, because
> > of corporate use of PB registers.
> >
> > Can I use TOSH_ASSIGN_PIN() without cotsbots-board in nesC? I tried
> > to compile and there were no errors. But will it work expectedly or
> > do I
> have
> > to use any more header files like hardware.h?
> >
> > Thanks a lot,
> > BiBe
> >
> >
> >
> >> -----Original Message-----
> >> From: tinyos-help-bounces at Millennium.Berkeley.EDU
> >> [mailto:tinyos-help- bounces at Millennium.Berkeley.EDU] On Behalf Of
> >> Michael Schippling
> >> Sent: Tuesday, July 25, 2006 6:14 AM
> >> To: Birger Becker
> >> Cc: tinyos-help at Millennium.Berkeley.EDU
> >> Subject: Re: [Tinyos-help] Problems with GenericComm and PWM
> >>
> >> sbi() and cbi() should work fine, as long as you are careful to not
> >> touch pins used by the radio. I wouldn't go writing whole registers
> >> with outp() if there is any shared pins.
> >> Double check the schematic for the mote you are using to make sure.
> >>
> >> I have some PWM code in my code bolus:
> >> http://www.etantdonnes.com/Motes/robocode.tar.gz
> >> I forget what reg DDRB is, but I use the timer/counter pins on the
> >> ATMEGA 128 so either I did something right, or you don't need to
> >> touch DDRB...
> >>
> >> MS
> >>
> >>
> >>
> >> Birger Becker wrote:
> >>> Hi!
> >>> I'm currently programming PWM (pulse width modulation) on an
> >>> ATMega
> 128
> >> in a
> >>> tinyOS-environment. Programming of PWM is ready, but now I wanted
> >>> to
> >> remote
> >>> control one Mote with the PWM by another, which is connected to a
> >>> programming board.
> >>>
> >>> So I used TOSBASE and SimpleCmd for basic and put my PWM code in
> >>> the command-process of SimpleCmd. The TOSBase-Mote is then
> >>> administrated
> by
> >>> programming board using UART and it sends commands via
> >>> RadioCRCPacket
> to
> >>> SimpleCommand, which receives them by GenericComm. The remote
> >>> control
> >> works
> >>> fine, I checked by LEDs.
> >>>
> >>> To realize PWM, I used register DDRB of ATMega 128 to set output-Pins.
> >> But
> >>> when any bit of this register is set to 1, no Radio-Packets will
> >>> be
> >> received
> >>> anymore.
> >>>
> >>> Code like outp(0x20, DDRB) (in tinyOS 1.1.0) and manually set bits
> >>> by
> >> sbi()
> >>> and cbi() (in tinyOS 1.1.11) results the same curious effect.
> >>>
> >>> How does GenericComm or RadioCRCPacket use DDRB-register and how
> >>> can I
> >> use
> >>> PWM-ports without getting every Radio-Connection crashed.
> >>>
> >>> Many thanks,
> >>> BiBe
> >>>
> >>>
> >>> _______________________________________________
> >>> Tinyos-help mailing list
> >>> Tinyos-help at Millennium.Berkeley.EDU
> >>> https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tiny
> >>> os-
> >> help
> >> _______________________________________________
> >> Tinyos-help mailing list
> >> Tinyos-help at Millennium.Berkeley.EDU
> >> https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyo
> >> s-
> help
> >
> >
More information about the Tinyos-help
mailing list