Ojo que una varible int16 va de -32768 a 32767 sólo si está declarada como "signed"... es decir, para almacenar valores negativos.
Si la tienes declarada como signed pues claro que pasa eso, pero si la declaras "unsigned" el int16 va de 0 a 65535, o sea que no debería darte ese error.
De todos modos sería bueno que postearas todo el código.
Saludos, nos leemos!
Edito: ya había escrito la respuesta cuando MLO publicó su mensaje.
Pero sólo para reafirmar:
Una variable unsigned intx (x=8,16,32) su rango de valores es: 0 a +2^x -1
Una variable signed intx (x=8,16,32) su rango de valores es: -2^(x-1) a +2^(x-1) -1