Teensy Support ?

This forum is dedicated to software development related to MultiWii.
It is not the right place to submit a setup problem.
Software download
Post Reply
itain
Posts: 75
Joined: Tue Aug 23, 2011 10:32 pm

Teensy Support ?

Post by itain »

How about porting to a Teensy?

Main issue IMHO will be with using the serial port. Host interface can be either USB or USART1. Current code has a contains both direct access to USART0 and using the Serial library.

USART0 does not exist on the Teensies.
The teensyduino Serial library is using the USB.
The teensyduino Uart library is using the UART1.

Otherwise, only remap the IO pins and go. The Tensy2.0 has a few pins more than the arduino mini.
The Teensy2.0++ has about the same pin count as the arduino mega, in a smaller board.

-- Itai

cass3825
Posts: 14
Joined: Thu Mar 31, 2011 3:09 am

Re: Teensy Support ?

Post by cass3825 »

Itai,
Sorry for the late reply. I have looked into this in the past, and the downside of the Teensy processor is the reduced number of pins that utilize 'pin change' interrupts, which the multiwii code uses. I'm a big fan of the Teensy, but it's not a good fit for this project.

Regards,
Billy

timecop
Posts: 1880
Joined: Fri Sep 02, 2011 4:48 pm

Re: Teensy Support ?

Post by timecop »

One word,
PPM

wapko
Posts: 3
Joined: Sun Sep 04, 2011 1:55 pm
Location: Denmark

Re: Teensy Support ?

Post by wapko »

i have a couple of teensy boards and would love a port.. ppm would solve the pin change interrupt issue. another is the timer regs. they also differ..
i'm not that well versed in mcu's.. especially timers and such.. i can blink leds no problem, wont get me flying however..
maybe i should try and read up on timers in different atmels.. i've been meaning to for quite a while.

anybody with the knowledge to change the timers to correspond to the ATMEGA32U4 and AT90USB1286 mcus ?

if youre in EU and want to avoid import duties, www.floris.cc should have teensy boards..

User avatar
ciskje
Posts: 34
Joined: Sat Mar 26, 2011 12:24 am

Re: Teensy Support ?

Post by ciskje »

Taken from Baronpilot:

B0, B1 B2 B3 B4 have PCINT also on Teensy 2.0+

Code: Select all

void setupRx() {
#ifdef TEENSYP
  pinMode(PIN_B0,INPUT);
  pinMode(PIN_B1,INPUT);
  pinMode(PIN_B2,INPUT);
  pinMode(PIN_B3,INPUT);
  pinMode(PIN_B4,INPUT);

  PCICR |= (1<<PCIE0);
  PCMSK0 = (1<<PCINT0) |
    (1<<PCINT1) |
    (1<<PCINT2) |
    (1<<PCINT3) |
    (1<<PCINT4) ;
#else
  pinMode(2, INPUT); // 3 is used for esc
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);
  // interrupt on pin change PCINT
  PCICR |= (1 << PCIE2);

  PCMSK2 = (1 << PCINT18) | // pin2
  (1 << PCINT20) | // pin4
  (1 << PCINT21) | // pin5
  (1 << PCINT22) | // pin6
  (1 << PCINT23) ; // pin7 // not need if you don't use RXDIRECT
#endif
  for(int i=0;i<MAXCHANIN;i++)
    rawIn[i]=CENTER;
}

itain
Posts: 75
Joined: Tue Aug 23, 2011 10:32 pm

Re: Teensy Support ?

Post by itain »

I'm looking at the Teensy 2.0 (ATMega32U4). There are 8 "pin change interrupt" pins and 4 16-bit pwm outputs. 3 of which are conflicting so it's possible to use 5 channel receiver and 4 "high res pwm" outputs for the motors.
With little effort it's also possible to use the two input compare pins for channels 6 & 7, and then one 8-bit pwm and one 10-bit pwm.

It should be OK to use PB0, PB1, PB2, PB3, PB4 for the radio and PB5, PB6, PB7 and PC6 for the motors.

Haven't yet completed checking the Teensy 2.0++ (AT90USB1286). There are still only 8 PCINT inputs but more PWM outputs.

ziss_dm
Posts: 529
Joined: Tue Mar 08, 2011 5:26 am

Re: Teensy Support ?

Post by ziss_dm »

Hi itain,

Did you make any progress on this port? ;)
Could you please share your ideas on pin assigment?

regards,
ziss_dm

User avatar
UndCon
Posts: 293
Joined: Mon Feb 21, 2011 2:10 pm

Re: Teensy Support ?

Post by UndCon »

I had a Teensy++ (2.0) and I sold it as timelapse remote for Nikon cameras :D

ziss_dm
Posts: 529
Joined: Tue Mar 08, 2011 5:26 am

Re: Teensy Support ?

Post by ziss_dm »

Hi,
This is powerful remote.. ;)

I have played with Teensy++ 2.0, yesterday and managed to compile 1.8 with following configuration:
6 PWM (motors)
5 receiver channels (PCI interrupt)
GUI -> USB serial
HW TWI

With little effort, I think it would possible to get:
8 PWM (with soft TWI)
8 receiver channels (external interrupts)

Not sure, Is it worth it.. ;) But I like 128K flash and 8K SRAM... And USART is free.

regards,
ziss_dm

User avatar
UndCon
Posts: 293
Joined: Mon Feb 21, 2011 2:10 pm

Re: Teensy Support ?

Post by UndCon »

Actually it is not only timelapse - it is also works a camera dolly powering 2 motors so far (a 3rd might be added)

It is programmable by the leftover joystick from nunchuck and a few buttons
And it features a 2*16 LCD


On the wishlist is "waypoint-like" navigation where you preset a few directions for the camera 3-5 positions or so...
I am currently working on the LCD backend for menues.

//UndCon

ronco
Posts: 317
Joined: Thu Aug 18, 2011 2:58 pm

Re: Teensy Support ?

Post by ronco »

Hi,

it may be possible to flash the arduino leonardo bootloader on the Atmega32u4 Teensys ..

see this instrucktion (just the flash to leonardo part)
http://txapuzas.blogspot.com/2009/12/pa ... duino.html

i dont speak spain? but what i understand:

connect a normal arduino to the Atmega32u4 like this:
Bootloader_Leonardo.jpg


- uncomment the arduino leonardo parts in the arduino/hardware/boards.txt (remove the # in front of the lines) (arduino 1)
- upload to the normal arduino the sketch arduino/examples/ArduinoISP (arduino 1)
- go to tools -> programmer select Arduino as ISP
- keep the normal arduino connected and select tools->board->arduino leonardo
- select tools->burn bootloader
(not shure)

ill test this if i get my Atmega32u4 board


i made a Atmega32u4 - to leonardo pin image(also not shure if its right)
Atmega32u4_to_Leonardo_pins.jpg


.. and i ordered one of the Atmega32u4 breakouts ;)

if we do it like this we can use the arduino IDE and if the real leonardo becomes available we have support for it :)

Regards Felix

ronco
Posts: 317
Joined: Thu Aug 18, 2011 2:58 pm

Re: Teensy Support ?

Post by ronco »

Hi,

i added a teensy 2.0 support to the actual shared trunk. its not much code because the ATmega32u4 is already there for the ProMicro
to use the teensy with teensduino instead of loading the leonardo bootloader i had to change some small things.

here is a fast pinout for it:
Teensy_2_0_pins.jpg


i will do a wiki for both (teensy2.0 and Promico) soon.

regards Felix

PaulStoffregen
Posts: 2
Joined: Fri Apr 20, 2012 7:04 pm

Re: Teensy Support ?

Post by PaulStoffregen »

Hi, Paul here, from PJRC -- the guy who made Teensy.

Please please please:

Do NOT flash the Leonardo bootloader onto Teensy!!

The Leonardo bootloader (of the Sparkfun ProMicro) does not work with Teensyduino.

The Leonardo code has known USB bugs, which don't affect everyone, but when they do happen, it's no fun. There's a very good reason Sparkfun's web page says "this bootloader is still in its infancy so expect some glitchiness here and there"! And frankly, it's pretty astounding Sparkfun sells such a product where even the Arduino Team refuses to officially release Leonardo, even though they showed the Leonardo hardware at Maker Faire last last year. They know the software isn't ready. There's a very good reason they removed the examples and commented the lines in boards.txt before releasing Arduino 1.0.

Teensyduino is very stable and well tested, with over 3 years of widespread use.

Felix has done great work here. Just uncomment TEENSY20 to work with Teensyduino, and please ignore these many messages about reflashing bootloaders.

ronco
Posts: 317
Joined: Thu Aug 18, 2011 2:58 pm

Re: Teensy Support ?

Post by ronco »

Hi,

My first teensy board is complete now :)

it looks like everything works well (atm. just on the ground) ill do some flight tests soon .. but i think it will behave just like the promicro does.
the good things on it (compared with the sparkfun promicro) are:

- it has all pins of the ATmega32u4 broken out (6 hardware PWM outputs, 6 RX channels with a free Serial port possible)
- it has a miniUSB (not a micro)
- its bootloader loads up very fast (~0.5 sec)
- it is smaller
- it is cheaper

its just the 5 LDO and the usb power fuse that is better on the Promicro (on the bottom of the teensy is a footprint for 5 or 3,3v LDOs)


my ATM. unused ATmega32u4 colletion :D (the teensy fits well to it)
CIMG3886.jpg

KoekieMonster
Posts: 27
Joined: Tue May 15, 2012 9:57 am

Re: Teensy Support ?

Post by KoekieMonster »

Hi,

I've followed above pinout diagram for teensy but can't get my yaw servo to move.
all 3 motors work, just the servo doesn't.
I'm using gyro, acc and mag. and using dev build 20120504.
I am using HWPWM6 and I did uncomment the #define TEENSY20.

does anyone know why my tail servo isn't moving?

KoekieMonster.

ronco
Posts: 317
Joined: Thu Aug 18, 2011 2:58 pm

Re: Teensy Support ?

Post by ronco »

hi,

ill check this soon.. and fix it if needed

regards Felix

User avatar
polo_fly2
Posts: 34
Joined: Fri Aug 05, 2011 1:12 pm
Location: Munich - Bavaria

Re: Teensy Support ?-NanoWii

Post by polo_fly2 »

Hello,

I have exact the same issue like KoekieMonster but with a NanoWii and the last dev_20120622. In the Tricopter config the pin (6) is dead - 0V . In the
Bi-copter config the servos (5+6) do move.

I have looked in the code, but my level of understanding does not allow me to find a solution at the moment.

many thanks for any help...

Georg

ronco
Posts: 317
Joined: Thu Aug 18, 2011 2:58 pm

Re: Teensy Support ?

Post by ronco »

Hi,

it is fixed now in the current dev (shared trunk)

if you want to use it in 2.0 or the released devs.. here is the fix..

replace this (in def.h):

Code: Select all

  #define SERVO_5_PINMODE   DDRD |= (1<<7); // 6
  #define SERVO_5_PIN_HIGH  PORTD |= 1<<7;
  #define SERVO_5_PIN_LOW   PORTD &= ~(1<<7);
  #define SERVO_6_PINMODE   DDRC |= (1<<6); // 5
  #define SERVO_6_PIN_HIGH  PORTC|= 1<<6;
  #define SERVO_7_PIN_LOW   PORTC &= ~(1<<6);



with this:

Code: Select all

  #define SERVO_5_PINMODE   DDRC |= (1<<6); // 5
  #define SERVO_5_PIN_HIGH  PORTC|= 1<<6;
  #define SERVO_5_PIN_LOW   PORTC &= ~(1<<6);
  #define SERVO_6_PINMODE   DDRD |= (1<<7); // 6
  #define SERVO_6_PIN_HIGH  PORTD |= 1<<7;
  #define SERVO_6_PIN_LOW   PORTD &= ~(1<<7);


there was also a problem with the serial code in the dev20120622
you can fix it by replacing one line in the serialAvailable function in serial.ino

replace this:

Code: Select all

 if(port == 0) return T_USB_Available(USB_CDC_RX);


with:

Code: Select all

 if(port == 0) return T_USB_Available();


regards Felix

User avatar
polo_fly2
Posts: 34
Joined: Fri Aug 05, 2011 1:12 pm
Location: Munich - Bavaria

Re: Teensy Support ?

Post by polo_fly2 »

Halo Felix,

thank you for the new code. It works :-)- servo is moving now in the Tri- config.

Just another question. Is there any easy way to get the status LED pin ( D13 on ProMini) also on the NanoWii board somewhwre ?

Thanky you
Georg

ronco
Posts: 317
Joined: Thu Aug 18, 2011 2:58 pm

Re: Teensy Support ?

Post by ronco »

hi Georg,

because of some more status LED pin requests i added pin 4 as Status pin in the shared trunk now.

if you like to use it now here is the code :)

replace the nanowii defines in def.h to this:

Code: Select all

#if defined(NANOWII)
  #define MPU6050
  #define ACC_ORIENTATION(X, Y, Z)  {accADC[ROLL]  = -Y; accADC[PITCH]  =  X; accADC[YAW]  =  Z;}
  #define GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] = -X; gyroADC[PITCH] = -Y; gyroADC[YAW] = -Z;}
  #undef INTERNAL_I2C_PULLUPS
  // move motor 7 & 8 to pin 4 & A2
  #define SOFT_PWM_3_PIN_HIGH        PORTD |= 1<<4;
  #define SOFT_PWM_3_PIN_LOW         PORTD &= ~(1<<4);
  #define SOFT_PWM_4_PIN_HIGH        PORTF |= 1<<5;
  #define SOFT_PWM_4_PIN_LOW         PORTF &= ~(1<<5);
  #define SW_PWM_P3                  4       
  #define SW_PWM_P4                  A2
  #define HWPWM6
  // move servo 3 & 4 to pin 12 & 11
  #define SERVO_3_PINMODE   DDRD |= (1<<6); // 12
  #define SERVO_3_PIN_HIGH  PORTD |= 1<<6;
  #define SERVO_3_PIN_LOW   PORTD &= ~(1<<6);
  #define SERVO_4_PINMODE   DDRB |= (1<<7); // 11
  #define SERVO_4_PIN_HIGH  PORTB |= 1<<7;
  #define SERVO_4_PIN_LOW   PORTB &= ~(1<<7);
  // use pin 4 as status LED output if we have no octo
  #if !defined(OCTOX8) && !defined(OCTOFLATP) && !defined(OCTOFLATX)
    #define LEDPIN_PINMODE             DDRD |= (1<<4);            //D4 to output
    #define LEDPIN_TOGGLE              PIND |= (1<<5)|(1<<4);     //switch LEDPIN state (Port D5) & pin D4
    #define LEDPIN_OFF                 PORTD |= (1<<5); PORTD &= ~(1<<4);
    #define LEDPIN_ON                  PORTD &= ~(1<<5); PORTD |= (1<<4); 
  #endif
#endif


.. if you have more questions related to the nanowii .. there is a thread in hardware forum http://www.multiwii.com/forum/viewtopic.php?f=6&t=1337&p=10137#p10137 .. just to keep this one for the teensy

regards felix

User avatar
polo_fly2
Posts: 34
Joined: Fri Aug 05, 2011 1:12 pm
Location: Munich - Bavaria

Re: Teensy Support ?

Post by polo_fly2 »

Hi Felix,

OK. I´ll follow you there ... and thanks a lot .

Georg

KoekieMonster
Posts: 27
Joined: Tue May 15, 2012 9:57 am

Re: Teensy Support ?

Post by KoekieMonster »

yay, servo works, stupid I haven't checked the pinout in the code...
Now, next question:P I would like to use the uart on the teensy for gps, is this allready implemented? or just on the arduino mega?

KoekieMonster.

ronco
Posts: 317
Joined: Thu Aug 18, 2011 2:58 pm

Re: Teensy Support ?

Post by ronco »

Hi,

The gps should work if you set its serial in the config.h to 1.. it depends on the baro type (if you use a baro) if the sketch fits to it.. the atmega 32u4 has 3.6K less flash because of the larger USB bootloader.

the ms baro takes much more flash then the BMP085..

it fits for sure with a i2c GPS.

regards felix

KoekieMonster
Posts: 27
Joined: Tue May 15, 2012 9:57 am

Re: Teensy Support ?

Post by KoekieMonster »

Hi,

I'm nog using a baro(yet), also since it is a teensy it has the halfkay bootloader(wich only uses(like its name says) 0.5K)
Is the gps status visible in the GUI?

KoekieMonster

curseur59
Posts: 1
Joined: Mon Sep 03, 2012 8:31 pm

Re: Teensy Support ?

Post by curseur59 »

Hello,
I'm tring to buid a specific teensy board for multiwii, but some informations don't match code in version 2.1. For example the trigger pin that interact with vbat with fullpin configuration. Please help, i Will post my board for every one. Thanks a lot. Curseur.

Post Reply