Archive for the Graphics Category

Animation on the MikroE PIC32MX4 Multimedia Board

I must admit, the MikroElektronika PIC32MX4 Multimedia Board has recently stolen the little that was left of my free time. I found myself toying around until late at night with it, and I have resurrected a number of old projects. The little QVGA display is so attractive, and I could not resist but try to port some of my favorite graphics programs to it.

Basically, if you have seen the MikroE web site,  you have already seen a screenshot of the Mandelbrot project ported to the PIC32MMB. But if you have tried any of the advanced projects I posted on the PIC32 explorer web site, then you already know what I did next.

Graphics animation is more fun!  It is different from basic graphics GUI design and support, because you have to add a real time element to it. To provide fluid motion you have to use double buffering techniques, and if there is 3D, linear algebra needs to be mixed in.

While this is all still very much a big work in progress, I would like to share with you a couple of previews of the kind of things you can do with the PIC32MMB.

This is the basic wireframe 3D cube animation (link)

There are four more videos for you to explore:

A more complex 3D wireframe (link)

More objects animated in 3D (link)

Using the onboard accelerometer to move around objects (link)

And finally a Solid (filled faces) rotating cube with hidden face removal  (link)

Now things are getting real entertaining…  any ideas?

MikroE MX4 Multimedia Board

It’s out! They did it!

MikroE PIC32MX4 MMB

The new PIC32 multimedia board  from MikroElektronika has been officially announced today!     http://www.mikroe.com/en/tools/pic32mx4-multimedia-board/

MikroE is world reknown for its well designed, documented and fully featured demo boards and development tools for all Microchip microcontroller families. But if you liked their Big Boards…  you are going to love this “small” one.

For less than $150 you get a board that can truly put the PIC32MX460F512 chip to work, allowing you to exercise all its peripherals, including:

  • Drive a TFT QVGA  (320×240) display with a fast 16-bit parallel interface
  • Read Touch screen input or Joystick inputs
  • Play and record sound interfacing to WM8731 16-bit audio codec (including headphone amplified stereo outputs)
  • Access files on SD/MMC cards
  • Access files on USB memory sticks (USB Host)
  • Connect to a PC (USB device) using HID, CDC or MSD classes
  • Connect to a Mouse, Keyboard or printer (USB Host)
  • Connect with a IEEE802.15.4 (MiWi/Zigbee) wireless network
  • Access additional 1Mbyte of serial flash memory
  • Access 1Kbit of serial EEPROM
  • Exercise the Real Time Clock and Calendar with a 32kHz external crystal
  • Interface to an MCP9700 temperature sensor
  • RS232 port selectable (UART1/2)
  • Interface to a 3 axes accelerometer (ADXL345)
  • Use an ICD2/3, Real ICE or even a simple PICKit2/3 to program and debug
  • Further expand the board using standard 100mils spaced side connectors

Also you can take full advantage of the entire set of Microchip Application libraries to create complex applications fast! In fact the board is designed to be compatible with the following Microchip (free of charge) libraries:

  •  Advanced Graphics Libraries
  • USB Framework (Host/Device)
  • MDD File System (FAT16 and FAT32)
  • MiWi / Zigbee
  • 32-bit Audio library
  • Peripheral library (I2C, SPI, UART, RTCC, PWM…)

I want one!… CORRECTION.., I need one!… CORRECTION I need a bunch of them!

3D Graphics

Using the new double buffered graphic library (see previous post) we can now create simple animations. In chapter 12 we have already seen how to visualize a 2D function using a grid and a bit of perspective (isometric). The next obvious step is to look into 3D objects and how to animate them by moving and rotating them in space. Read the rest of this entry »

Graphic Animation

In the good old times, when studying at the University of Trieste, I particularly enjoyed Rational Mechanics, a required class for any EE Master back then, presented by professor Enzo Tonti. One of the things that were always making his lectures a pleasure (and a challenge) was his constant reference to, and practical use of, personal computers to illustrate visually the concept at hand.

Mind those were the early days of the Apple II, the Commodore C64, the Sinclair Spectrum and for the few lucky (and rich) ones among us the first IBM XT personal computers. The graphic capabilities of those personal computers were primitive to say the least. In fact, a single PIC24F128GA010 has today more program memory than any of those personal computers and the resolution of the video output, using the AV16 board we developed in the book (without any hardware assistance), is actually pretty close. Yet prof. Tonti used to teach us how to develop effective demos using little more than a few lines of BASIC or, I should say, of the “soup” of BASIC dialects that were popular at the time… (Actually prof. Tonti developed a brilliant scheme to identify a sort of minimum common denominator among all those disparate systems and Basic dialects that he called Inter-Basic if I recall correctly… there must be a web site somewhere where all this is documented)…

We simulated graphically the motion of planets around a sun, the complex motion of pendulums of various kinds, we animated objects in 2D and 3D! Key to all those graphic exercises was the ability to alternate fast images on the display to obtain the illusion of motion….

Read the rest of this entry »

Optimizing the graphic library

While working on the porting to the PIC32 of the code developed for the original PIC24 book it occurred to me that there were some obvious optimizations I had yet to explore.

For a starter, the graphic.c library was using several resources including Timer3, the Output Compare 3 module, the Output Compare 4 module and the SPI1 port in addition to one general purpose I/O (RG0 in this case). The OC3 module was used to generate the Horizontal Synchronization pulse portion of the composite video signal, but the module output pin RD2 (active as soon as the module is enabled) was not used. Rather RG0 was “manually” set during the OC3 interrupt service routine and reset during the Timer3 interrupt service routine. This added unnecessary overhead to the application as the OC3 module could easily be configured to do it all by itself…

Read the rest of this entry »

|