itoaで32766を超えると負の数になる→utoaを使う

PWMの実験で、OCR1Aの値が知りたかった。
itoaはint(avrだと16bit)なので32766=(65535/2)までしかいかず、その上は負の数になる。
unsigned intを使いたいときはのutoaを使う。これで65535までいけた。
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=74499&start=0

#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>

#define FOSC 16000000UL
#define BAUD 9600
#define MYUBRR ((FOSC/(16UL*BAUD))-1)

void PB1_PWM_init(){
  TCCR1A = _BV(COM1A1)|_BV(WGM11)|_BV(WGM10); //Fast PWM 10bit
  TCCR1B = _BV(WGM12);
  TIMSK1 = _BV(OCIE1A);  
  //Timer max value 4ms: Total time
  ICR1 = 65000;
}

void USART_init(unsigned int ubrr){
  UBRR0H = (ubrr>>8);
  UBRR0L = ubrr;
  UCSR0B = _BV(RXEN0)|_BV(TXEN0); //RX-TX enable
  UCSR0C = (3<<UCSZ00);//define data frame: CSZ = CharacterSiZe
}

void USART_Transmit(unsigned char data){
  loop_until_bit_is_set(UCSR0A,UDRE0);
  UDR0 = data;
}

char USART_recv(void)
{
  while(!(UCSR0A & (1<<RXC0)));
  return UDR0;
}

void putString(char msg[])
{
  int i;
  for(i=0;msg[i];i++){
    USART_Transmit(msg[i]);
  }
}

void PB1_dim(){
  int i;
  char buf[20];
  for(i=0;i<10;i++){
    unsigned long j;
    for(j=0;j<65000;j++){
    }
  OCR1A = 6500 * i;
  unsigned int vh = OCR1AH;
  unsigned int vl = OCR1AL;
  unsigned int v = (vh<<8) +vl;
  putString(", OCRA1:");
  utoa(v,buf,10);
  putString(buf);
  putString("\n");
  _delay_ms(200);
  }
}

int main(void){
  DDRB |= _BV(PORTB5);
  USART_init(MYUBRR); 

  char data;
  putString("Hello\n");
  putString("Hello\n");

  while(1){
      //data = USART_recv();
      //USART_Transmit(data);
      PB1_dim();
  }
  return 0;  
}