3pi R/C Code - Receivers Tested With?

Morning, Pololu Forums,

I figured this would be the appropriate place to post, seeing as I’m using the 3pi R/C project developed by Pololu to program my BabyO as a dual motor ESC. I have everything set up, code loaded, and wires soldered in. The BEC works and the red LED blinks, telling me the code is running. My only issue is that, when the control sticks are moved, there is no movement.

A combat robotics friend of mine uses BabyO’s to control Fleaweights all the time, and told me that the stock code works perfectly with his 2.4 GHz package. I have a 2.4 GHz setup myself, but a different brand and whatnot, so my problem must be that the PWM rate on my controller is different than his and the one the library was programmed with.

My question is, what was the transmitter/receiver the code was tested with, and do you have a list of compatible radio systems?

Thanks for the help
-WaterDuffalo

Hello.

RC receivers are typically designed to work with RC hobby servos, so it is unlikely that your receiver is outputting incompatible signals. Can you describe how you have everything powered and connected? A picture of your setup might help us spot a problem. Also, are you sure you are running the same program as your friend? Can you post the code here?

- Ben

I have the the red wire (V+) for both connectors soldered to the Vcc lines for power, and black (Grnd) to the Ground pads, and I have Signal Wire 1 hooked up to PD0, and Signal Wire 2 to PC5, as laid out in the code’s notes. The code I am running is an unmodified version of the 3pi code from the RC project from Pololu’s website, but imported and converted by Atmel Studio 6.

Hello.

To rule out any problems with the compilation, one thing you could do is to just have your friend send you the exact hex file he is using, and then you could program it using the Device Programming dialog in Atmel Studio.

I am currently investigating a bug in Atmel Studio. Could you please post your .map file here so I can see if that bug is causing you trouble? To do this, select View > Solution Explorer, find the Solution Explorer pane, expand the “Output Files” category, and double click on the file whose name ends with “.map”. This should open up your .map file. Please press Ctrl+A Ctrl+C to copy the whole thing and paste it here inside [ code] [ /code] tags (without the spaces).

–David

David,

My friend was actually in Vegas not too long ago on an extended vacation and visited the Pololu store, his name is David Graham. Awesome guy. But I digress. Here is the .map file from the conversion.

Archive member included because of file (symbol)

c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                              3piRC.o (lcd_goto_xy)
c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
                              3piRC.o (set_motors)
c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
                              3piRC.o (delay_ms)
c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_mulsi3.o)
                              3piRC.o (__mulsi3)
c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodhi4.o)
                              3piRC.o (__udivmodhi4)
c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodsi4.o)
                              3piRC.o (__udivmodsi4)
c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_divmodsi4.o)
                              3piRC.o (__divmodsi4)
c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_prologue.o)
                              c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o) (__prologue_saves__)
c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_epilogue.o)
                              c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o) (__epilogue_restores__)
c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_exit.o)
                              c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm168.o (exit)
c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_copy_data.o)
                              3piRC.o (__do_copy_data)
c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_clear_bss.o)
                              3piRC.o (__do_clear_bss)
c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(malloc.o)
                              c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o) (malloc)
c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(fdevopen.o)
                              c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o) (fdevopen)
c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(iob.o)
                              c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(fdevopen.o) (__iob)
c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(calloc.o)
                              c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(fdevopen.o) (calloc)
c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(memset.o)
                              c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(calloc.o) (memset)

Allocating common symbols
Common symbol       size              file

__brkval            0x2               c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(malloc.o)
__flp               0x2               c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(malloc.o)
ch                  0x14              3piRC.o
__iob               0x6               c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(iob.o)

Discarded input sections

 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm168.o
 .bss           0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm168.o
 .bss           0x00000000        0x0 3piRC.o
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCDC2Ev
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCDC1Ev
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.void_getchar
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD10initPrintfEv
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD10initPrintfEhh
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.lcd_init_printf_with_dimensions
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.lcd_init_printf
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD10moveCursorEhh
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.lcd_move_cursor
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD10hideCursorEv
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.lcd_hide_cursor
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD10showCursorEh
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.lcd_show_cursor
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD5clearEv
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.clear    0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD11printBinaryEh
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.print_binary
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD14printHexNibbleEh
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD8printHexEh
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD8printHexEj
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.print_hex
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.print_hex_byte
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD5printEl
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.print_long
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD21printFromProgramSpaceEPKc
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.print_from_program_space
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD7printInEPKc
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD5printEc
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.print_character
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.lcd_putchar
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD19loadCustomCharacterEPKch
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.lcd_load_custom_character
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text._ZN12OrangutanLCD6scrollEhhj
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text.lcd_scroll
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
 .text._ZN15OrangutanMotorsC2Ev
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
 .text._ZN15OrangutanMotorsC1Ev
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
 .text.set_m1_speed
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
 .text.set_m2_speed
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
 .text.ticks_to_microseconds
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
 .text._ZN13OrangutanTime19ticksToMicrosecondsEm
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
 .text._ZN13OrangutanTime17delayMillisecondsEj
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
 .text._ZN13OrangutanTime5ticksEv
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
 .text.get_ticks
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
 .text._ZN13OrangutanTime5resetEv
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
 .text.time_reset
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_mulsi3.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_mulsi3.o)
 .bss           0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_mulsi3.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodhi4.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodhi4.o)
 .bss           0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodhi4.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodsi4.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodsi4.o)
 .bss           0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodsi4.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_divmodsi4.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_divmodsi4.o)
 .bss           0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_divmodsi4.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_prologue.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_prologue.o)
 .bss           0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_prologue.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_epilogue.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_epilogue.o)
 .bss           0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_epilogue.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_exit.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_exit.o)
 .bss           0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_exit.o)
 .text.libgcc   0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_exit.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_copy_data.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_copy_data.o)
 .bss           0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_copy_data.o)
 .text.libgcc   0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_copy_data.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_clear_bss.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_clear_bss.o)
 .bss           0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_clear_bss.o)
 .text.libgcc   0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_clear_bss.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(malloc.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(malloc.o)
 .bss           0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(malloc.o)
 .text.avr-libc
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(malloc.o)
 COMMON         0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(malloc.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(fdevopen.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(fdevopen.o)
 .bss           0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(fdevopen.o)
 .text.avr-libc
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(fdevopen.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(iob.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(iob.o)
 .bss           0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(iob.o)
 COMMON         0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(iob.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(calloc.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(calloc.o)
 .bss           0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(calloc.o)
 .text.avr-libc
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(calloc.o)
 .text          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(memset.o)
 .data          0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(memset.o)
 .bss           0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(memset.o)
 .text.avr-libc
                0x00000000        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a(memset.o)

Memory Configuration

Name             Origin             Length             Attributes
text             0x00000000         0x00020000         xr
data             0x00800060         0x0000ffa0         rw !x
eeprom           0x00810000         0x00010000         rw !x
fuse             0x00820000         0x00000400         rw !x
lock             0x00830000         0x00000400         rw !x
signature        0x00840000         0x00000400         rw !x
*default*        0x00000000         0xffffffff

Linker script and memory map

Address of section .data set to 0x800100
LOAD c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm168.o
LOAD 3piRC.o
START GROUP
LOAD c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a
END GROUP
LOAD c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a
LOAD c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5\libc.a
LOAD c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a

.hash
 *(.hash)

.dynsym
 *(.dynsym)

.dynstr
 *(.dynstr)

.gnu.version
 *(.gnu.version)

.gnu.version_d
 *(.gnu.version_d)

.gnu.version_r
 *(.gnu.version_r)

.rel.init
 *(.rel.init)

.rela.init
 *(.rela.init)

.rel.text
 *(.rel.text)
 *(.rel.text.*)
 *(.rel.gnu.linkonce.t*)

.rela.text
 *(.rela.text)
 *(.rela.text.*)
 *(.rela.gnu.linkonce.t*)

.rel.fini
 *(.rel.fini)

.rela.fini
 *(.rela.fini)

.rel.rodata
 *(.rel.rodata)
 *(.rel.rodata.*)
 *(.rel.gnu.linkonce.r*)

.rela.rodata
 *(.rela.rodata)
 *(.rela.rodata.*)
 *(.rela.gnu.linkonce.r*)

.rel.data
 *(.rel.data)
 *(.rel.data.*)
 *(.rel.gnu.linkonce.d*)

.rela.data
 *(.rela.data)
 *(.rela.data.*)
 *(.rela.gnu.linkonce.d*)

.rel.ctors
 *(.rel.ctors)

.rela.ctors
 *(.rela.ctors)

.rel.dtors
 *(.rel.dtors)

.rela.dtors
 *(.rela.dtors)

.rel.got
 *(.rel.got)

.rela.got
 *(.rela.got)

.rel.bss
 *(.rel.bss)

.rela.bss
 *(.rela.bss)

.rel.plt
 *(.rel.plt)

.rela.plt
 *(.rela.plt)

.text           0x00000000      0xb2e
 *(.vectors)
 .vectors       0x00000000       0x68 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm168.o
                0x00000000                __vectors
                0x00000000                __vector_default
 *(.vectors)
 *(.progmem.gcc*)
 *(.progmem*)
                0x00000068                . = ALIGN (0x2)
                0x00000068                __trampolines_start = .
 *(.trampolines)
 .trampolines   0x00000068        0x0 linker stubs
 *(.trampolines*)
                0x00000068                __trampolines_end = .
 *(.jumptables)
 *(.jumptables*)
 *(.lowtext)
 *(.lowtext*)
                0x00000068                __ctors_start = .
 *(.ctors)
                0x00000068                __ctors_end = .
                0x00000068                __dtors_start = .
 *(.dtors)
                0x00000068                __dtors_end = .
 SORT(*)(.ctors)
 SORT(*)(.dtors)
 *(.init0)
 .init0         0x00000068        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm168.o
                0x00000068                __init
 *(.init0)
 *(.init1)
 *(.init1)
 *(.init2)
 .init2         0x00000068        0xc c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm168.o
 *(.init2)
 *(.init3)
 *(.init3)
 *(.init4)
 .init4         0x00000074       0x16 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_copy_data.o)
                0x00000074                __do_copy_data
 .init4         0x0000008a       0x10 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_clear_bss.o)
                0x0000008a                __do_clear_bss
 *(.init4)
 *(.init5)
 *(.init5)
 *(.init6)
 *(.init6)
 *(.init7)
 *(.init7)
 *(.init8)
 *(.init8)
 *(.init9)
 .init9         0x0000009a        0x8 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm168.o
 *(.init9)
 *(.text)
 .text          0x000000a2        0x4 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr5/crtm168.o
                0x000000a2                __vector_22
                0x000000a2                __vector_1
                0x000000a2                __vector_24
                0x000000a2                __vector_12
                0x000000a2                __bad_interrupt
                0x000000a2                __vector_6
                0x000000a2                __vector_3
                0x000000a2                __vector_23
                0x000000a2                __vector_25
                0x000000a2                __vector_11
                0x000000a2                __vector_13
                0x000000a2                __vector_17
                0x000000a2                __vector_19
                0x000000a2                __vector_7
                0x000000a2                __vector_2
                0x000000a2                __vector_21
                0x000000a2                __vector_15
                0x000000a2                __vector_8
                0x000000a2                __vector_14
                0x000000a2                __vector_10
                0x000000a2                __vector_16
                0x000000a2                __vector_18
                0x000000a2                __vector_20
 .text          0x000000a6      0x35a 3piRC.o
                0x000000a6                __vector_5
                0x00000282                main
                0x0000011c                __vector_4
                0x00000192                updateChannels
                0x00000400                . = ALIGN (0x2)
 *(.text.*)
 .text._ZN12OrangutanLCD8busyWaitEv
                0x00000400       0x98 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                0x00000400                OrangutanLCD::busyWait()
 .text._ZN12OrangutanLCD8sendDataEh
                0x00000498       0x64 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                0x00000498                OrangutanLCD::sendData(unsigned char)
 .text._ZN12OrangutanLCD5init2Ev
                0x000004fc       0x7e c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                0x000004fc                OrangutanLCD::init2()
 .text._ZN12OrangutanLCD4initEv
                0x0000057a       0x14 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                0x0000057a                OrangutanLCD::init()
 .text._ZN12OrangutanLCD4sendEhhh
                0x0000058e       0x68 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                0x0000058e                OrangutanLCD::send(unsigned char, unsigned char, unsigned char)
 .text._ZN12OrangutanLCD8send_cmdEh
                0x000005f6        0xa c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                0x000005f6                OrangutanLCD::send_cmd(unsigned char)
 .text._ZN12OrangutanLCD6gotoXYEhh
                0x00000600       0x3e c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                0x00000600                OrangutanLCD::gotoXY(unsigned char, unsigned char)
 .text.lcd_goto_xy
                0x0000063e        0x6 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                0x0000063e                lcd_goto_xy
 .text._ZN12OrangutanLCD9send_dataEh
                0x00000644        0xa c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                0x00000644                OrangutanLCD::send_data(unsigned char)
 .text._ZN12OrangutanLCD5printEm
                0x0000064e       0xc0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                0x0000064e                OrangutanLCD::print(unsigned long)
 .text.print_unsigned_long
                0x0000070e        0x6 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                0x0000070e                print_unsigned_long
 .text._ZN12OrangutanLCD5printEPKc
                0x00000714       0x1a c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                0x00000714                OrangutanLCD::print(char const*)
 .text.print    0x0000072e        0x6 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                0x0000072e                print
 .text._ZN12OrangutanLCD13send_4bit_cmdEh
                0x00000734        0xa c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                0x00000734                OrangutanLCD::send_4bit_cmd(unsigned char)
 .text._ZN16OrangutanDigital9setOutputEhh
                0x0000073e       0x98 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
                0x0000073e                OrangutanDigital::setOutput(unsigned char, unsigned char)
 .text._ZN15OrangutanMotors5init2Ev
                0x000007d6       0x50 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
                0x000007d6                OrangutanMotors::init2()
 .text._ZN15OrangutanMotors4initEv
                0x00000826       0x14 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
                0x00000826                OrangutanMotors::init()
 .text._ZN15OrangutanMotors10setM1SpeedEi
                0x0000083a       0x3c c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
                0x0000083a                OrangutanMotors::setM1Speed(int)
 .text._ZN15OrangutanMotors10setM2SpeedEi
                0x00000876       0x44 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
                0x00000876                OrangutanMotors::setM2Speed(int)
 .text._ZN15OrangutanMotors9setSpeedsEii
                0x000008ba       0x16 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
                0x000008ba                OrangutanMotors::setSpeeds(int, int)
 .text.set_motors
                0x000008d0        0x6 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
                0x000008d0                set_motors
 .text.__vector_9
                0x000008d6       0x74 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
                0x000008d6                __vector_9
 .text.delay_ms
                0x0000094a       0x1e c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
                0x0000094a                delay_ms
 .text._ZN13OrangutanTime5init2Ev
                0x00000968       0x30 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
                0x00000968                OrangutanTime::init2()
 .text._ZN13OrangutanTime4initEv
                0x00000998       0x14 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
                0x00000998                OrangutanTime::init()
 .text._ZN13OrangutanTime2msEv
                0x000009ac       0x2a c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
                0x000009ac                OrangutanTime::ms()
 .text.get_ms   0x000009d6        0x6 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
                0x000009d6                get_ms
 .text.libgcc   0x000009dc       0x3e c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_mulsi3.o)
                0x000009dc                __mulsi3
 .text.libgcc   0x00000a1a       0x28 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodhi4.o)
                0x00000a1a                __udivmodhi4
 .text.libgcc   0x00000a42       0x44 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_udivmodsi4.o)
                0x00000a42                __udivmodsi4
 .text.libgcc   0x00000a86       0x36 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_divmodsi4.o)
                0x00000a86                __divmodsi4
 .text.libgcc   0x00000abc       0x38 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_prologue.o)
                0x00000abc                __prologue_saves__
 .text.libgcc   0x00000af4       0x36 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_epilogue.o)
                0x00000af4                __epilogue_restores__
                0x00000b2a                . = ALIGN (0x2)
 *(.fini9)
 .fini9         0x00000b2a        0x0 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_exit.o)
                0x00000b2a                exit
                0x00000b2a                _exit
 *(.fini9)
 *(.fini8)
 *(.fini8)
 *(.fini7)
 *(.fini7)
 *(.fini6)
 *(.fini6)
 *(.fini5)
 *(.fini5)
 *(.fini4)
 *(.fini4)
 *(.fini3)
 *(.fini3)
 *(.fini2)
 *(.fini2)
 *(.fini1)
 *(.fini1)
 *(.fini0)
 .fini0         0x00000b2a        0x4 c:/winavr/bin/../lib/gcc/avr/4.3.3/avr5\libgcc.a(_exit.o)
 *(.fini0)
                0x00000b2e                _etext = .

.data           0x00800100       0x18 load address 0x00000b2e
                0x00800100                PROVIDE (__data_start, .)
 *(.data)
 .data          0x00800100       0x17 3piRC.o
                0x00800115                maxLowPulseTime
                0x0080010f                minPulseTime
                0x00800113                maxPulseTime
                0x00800111                neutralPulseTime
 *(.data*)
 *(.rodata)
 *(.rodata*)
 *(.gnu.linkonce.d*)
                0x00800118                . = ALIGN (0x2)
 *fill*         0x00800117        0x1 00
                0x00800118                _edata = .
                0x00800118                PROVIDE (__data_end, .)

.bss            0x00800118       0x29
                0x00800118                PROVIDE (__bss_start, .)
 *(.bss)
 .bss           0x00800118        0x9 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                0x00800118                printf_chars
                0x0080011c                lcdTimeout
                0x0080011b                col
                0x00800120                OrangutanLCD::init()::initialized
                0x0080011a                row
 .bss           0x00800121        0x1 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
                0x00800121                OrangutanMotors::init()::initialized
 .bss           0x00800122        0xb c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
                0x0080012c                OrangutanTime::init()::initialized
                0x00800122                tickCount
                0x00800126                msCounter
                0x0080012a                us_over_10
 *(.bss*)
 *(COMMON)
 COMMON         0x0080012d       0x14 3piRC.o
                0x0080012d                ch
                0x00800141                PROVIDE (__bss_end, .)
                0x00000b2e                __data_load_start = LOADADDR (.data)
                0x00000b46                __data_load_end = (__data_load_start + SIZEOF (.data))

.noinit         0x00800141        0x0
                0x00800141                PROVIDE (__noinit_start, .)
 *(.noinit*)
                0x00800141                PROVIDE (__noinit_end, .)
                0x00800141                _end = .
                0x00800141                PROVIDE (__heap_start, .)

.eeprom         0x00810000        0x0
 *(.eeprom*)
                0x00810000                __eeprom_end = .

.fuse
 *(.fuse)
 *(.lfuse)
 *(.hfuse)
 *(.efuse)

.lock
 *(.lock*)

.signature
 *(.signature*)

.stab           0x00000000     0x1db8
 *(.stab)
 .stab          0x00000000      0xfd8 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)
                               0x1e84 (size before relaxing)
 .stab          0x00000fd8      0x7b0 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanMotors.o)
                                0x900 (size before relaxing)
 .stab          0x00001788      0x630 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanTime.o)
                                0x900 (size before relaxing)

.stabstr        0x00000000     0x2d74
 *(.stabstr)
 .stabstr       0x00000000     0x2d74 c:/winavr/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib\libpololu_atmega168.a(OrangutanLCD.o)

.stab.excl
 *(.stab.excl)

.stab.exclstr
 *(.stab.exclstr)

.stab.index
 *(.stab.index)

.stab.indexstr
 *(.stab.indexstr)

.comment
 *(.comment)

.debug
 *(.debug)

.line
 *(.line)

.debug_srcinfo
 *(.debug_srcinfo)

.debug_sfnames
 *(.debug_sfnames)

.debug_aranges  0x00000000       0x20
 *(.debug_aranges)
 .debug_aranges
                0x00000000       0x20 3piRC.o

.debug_pubnames
                0x00000000       0x9e
 *(.debug_pubnames)
 .debug_pubnames
                0x00000000       0x9e 3piRC.o

.debug_info     0x00000000      0x22a
 *(.debug_info)
 .debug_info    0x00000000      0x22a 3piRC.o
 *(.gnu.linkonce.wi.*)

.debug_abbrev   0x00000000      0x102
 *(.debug_abbrev)
 .debug_abbrev  0x00000000      0x102 3piRC.o

.debug_line     0x00000000      0x27a
 *(.debug_line)
 .debug_line    0x00000000      0x27a 3piRC.o

.debug_frame    0x00000000       0x50
 *(.debug_frame)
 .debug_frame   0x00000000       0x50 3piRC.o

.debug_str      0x00000000      0x13f
 *(.debug_str)
 .debug_str     0x00000000      0x13f 3piRC.o
                                0x173 (size before relaxing)

.debug_loc      0x00000000       0xdc
 *(.debug_loc)
 .debug_loc     0x00000000       0xdc 3piRC.o

.debug_macinfo
 *(.debug_macinfo)
OUTPUT(3piRC.elf elf32-avr)
LOAD linker stubs

.debug_ranges   0x00000000       0x18
 .debug_ranges  0x00000000       0x18 3piRC.o

Yes, we know Dave! Thanks for posting that file. It looks like you are not suffering from the bug I thought you were, so we should go back to checking other things. As Ben said, a picture of your setup would be useful.

–David

Ok, I took a few pictures of everything hooked up without the battery connected.

This photo has the signal pins labeled:


A closer shot of PD0: (Note: it does look like the wire is touching pin PB5, but it isn’t.)


And a closer shot of PC5:


Also, sorry for the large photos, they’re the best I could do right now.

Thanks for the pictures. Large, high-resolution pictures are actually helpful, so long as they’re in focus. It’s pretty hard to discern details in your first two pictures, but the third one lets me see your solder connections well enough to identify that as a potential problem area. The solder connection between your wires and PD0/PC5 are quite bad, and I wouldn’t be surprised if the signal is not actually getting through. Your solder connections should look more like the ones in the following picture:

(taken from one of ladyada’s tutorials)

The key is that the solder needs to clearly wet to both the wire and the header pin, which requires you to heat both the wire and header pin sufficiently when applying solder. One trick is to put a small blob of solder on the header pin and another on the wire, and then melt both blobs together with your iron.

Also, I cannot see what’s going on with your power connections. Could you post some in-focus pictures of the underside of the Baby Orangutan? If your camera has a macro mode, you should try using that. Otherwise, you will need to hold it at least a few feet away from the board in order for the picture to be in focus.

- Ben