Прежде всего надо знать точный размер вашего стека. Во-вторых, переполнение стека как правило происходит в функциях, имеющих много локальных переменных, размещенных в стеке. Самый простой пример - переменная в виде массива данных. В третьих, использование прерываний. Наиболее вероятно переполнение стека тогда, когда прерывание возникает во время выполнения функции, занимающей и без прерывания большой объем стековой памяти. В WinAVR дело осложняется тем, что у него, насколько мне известно, имеется только один стек используемый как для адресов возврата, так и для данных. А в общем, требуется детальный анализ программы, который позволит определить возможную причину переполнения стека.