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: [EMAIL PROTECTED] [mailto:tinyos-help-
[EMAIL PROTECTED] On Behalf Of Michael Schippling
Sent: Tuesday, July 25, 2006 6:14 AM
To: Birger Becker
Cc: [email protected]
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
[email protected]
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-
help
_______________________________________________
Tinyos-help mailing list
[email protected]
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help


_______________________________________________
Tinyos-help mailing list
[email protected]
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to