USnooBie Kit - AVR USB Device Dev Kit

The USnooBie is a microcontroller kit that does not require any sort of AVR programmer or USB-to-serial converters to load and run compiled code. It’s hardware design allows the user to develop low cost USB devices with Atmel’s AVR ATmega microcontrollers. It can also be used to develop projects which are not USB devices.


Check out more details and all the tutorials I wrote and filmed

http://frank.circleofcurrent.com/usnoobie/

Why does it have two pushbuttons?

The 2nd push button is used to activate the bootloader, please see the usage guide to learn how it works http://frank.circleofcurrent.com/usnoobie/usageguide.php

There is no good way to make a auto-reset function because I am not using a USB-RS232 converter. A timed bootloader is also annoying. The button occupies one of the USB data lines being reserved so it causes minimal loss of available pins.

I just wrote a page detailing how this can be used with the Arduino http://frank.circleofcurrent.com/usnoobie/arduino.php

5 stars from me.

Really nice work. Using the arduino IDE to upload programs direct is a real plus.

If you use the Arduino IDE then you can't use V-USB though, I'm going to see about writing a core that works with V-USB. The problems will arise from whether or not Arduino is smart enough to compile .S files, the timer interrupts, and also functions which disable interrupts.

The arduino uses AVR GCC compiler for Atmel AVR RISC processors.

http://www.nongnu.org/avr-libc/user-manual/pages.html

All available interupts are handled by the compiler:

http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html#gad28590624d422cdf30d626e0a506255f

When you upload using the arduino IDE it loads a hex file(program) into flash memory.

I thought I understood what you were intending. In your instructions you state:

To upload a sketch, just activate the bootloader (press and release the reset-button while holding down the bootloader-activation-button, see the usage guide) and then press the "Upload" button in Arduino.

What is being uploaded?

If it's the sketch program then that would be good enough to qualify for the 5 stars.

Looking at:

http://www.obdev.at/products/vusb/index.html

Being able to use that from the IDE would give extra credits.

Have a look at the metaboard how they implemented the bootloader. They use usbasp loader which is also based on V-USB and it works with the arduino IDE except for the serial monitoring.

Yep that’s my question too.

Can you use the arduino Serial commands over the USB port?

Sorry couldn’t see the answer on your website.

Thanks

Carl, I think I worded my last post wrong, what I meant was

The timer overflow interrupts used by the Arduino core to keep track of millis may cause higher interrupt latency for the INT0 external interrupt. Also there are Arduino core functions which disable interrupts globally such as the microsecond delay functions.

V-USB requires low interrupt latency and also for the interrupts to be enabled all the time. Hence I think I need to modify the Arduino core so that it is friendly with V-USB


trialex, you can't use the serial monitor without connecting a serial port or a serial port to USB converter.

I hope all Arduino users understand that the serial port functionality usually comes from a built-in FT232 chip, a FT232 cable or similar, or the ATmega8U2 (on the Uno board) which does the exact same thing as a FT232.

I did not include this FT232 because it would add to the cost and size significantly, and many Arduino derivatives do not include this chip or cable.

You are free to purchase an FT232 cable separately in order to use the serial port monitor, but unlike Arduino, it is not a requirement for USnooBie to be programmed.

Thanks for your answer. You completely explained the interrupts question.

I understand now.

For the arduino user the lack of serial coms could be a minus for some applications.

It was never originally designed for Arduino users. I hoped to create something that lets people experiment with real USB devices before taking their design from a development platform to a standalone device.

I don't even think it's practical to compile V-USB with Arduino. I'm hoping some brave Arduino users will get bored with just reporting data back from the serial port and switch to a good development environment instead and try out V-USB. I have a few videos showing you how to work with V-USB and also writing computer side drivers. http://frank.circleofcurrent.com/usnoobie/tut_proj.php

If you really need the serial port, just buy the FTDI cable and connect it to the TX and RX of the ATmega, just like how most Arduino derivatives requires you to anyways.

Frank I did not mean to detract from your achievement.

USB is very complicated, but it is also the future of PC connections.

From my brief look at your work, I can see that you are proficient in what are the “black arts” to some of us.

I would really like to learn from your work, unfortunately time is very limited.

When I first looked at your kit I thought it could be a holy grail. Full arduino without the serial chip.

I hope that you have inspired some arduino uses to get into USB projects.

I'm sure your kit would be a great entry point.

Frank I did not mean to detract from your achievement.

I didn't take it as such, I was just explaining.

USB is not complicated once you take some time to understand. What I think USB is great for is when you need to give meaning to your data. HID reports are organized into "usages" and requests have a header that contains parameters such as "request type", "index", and "value". This makes code easier to write, maintain, and understand.

http://www.beyondlogic.org/usbnutshell/usb1.shtml is a great resource

It is also possible to program the USnooBie itself to become a serial port device but according to what I've read, this may not work on all platforms and will take up a lot of CPU time on the ATmega.

If you use the Arduino IDE then you can't use V-USB though, I'm going to see about writing a core that works with V-USB. The problems will arise from whether or not Arduino is smart enough to compile .S files, the timer interrupts, and also functions which disable interrupts.

The Arduino IDE (as of ~0018 onwards) will happily compile .S files as that's what I use for my VUSB for Arduino project (http://code.google.com/p/vusb-for-arduino/ a.k.a http://code.rancidbacon.com/ProjectLogArduinoUSB).

In order to get it working I disabled the millis() related timers as the ISR take too long to complete. The guy that wrote V-USB thought there was room to make the ISR used for the timer more efficient but I went with the easy option (partly because doing otherwise would mean editing the core Arduino files) and no-one else has provided anything different, yet.

--Philip

I like your initiative to abstract USB keyboard functionality (and others) into a C++ library/class. It's also great to read some of your Python examples (even though I don't know it).

I just tried to write a core with V-USB, and it seemed like there would be no good way to make each project independently configurable. This is mainly because of Arduino's build steps, which do not allow any part of the core to depend on a part of a sketch.

V-USB and Arduino's IDE just don't mix well.