_delay_ms() задает задержку в миллисекундах, если я правильно понимаю. Тогда почему, чтобы получить задержку 30 сек, мне пришлось записать _delay_ms(4500), а не _delay_ms(30000)?
Чтобы все везде было хорошо, надо, чтобы частота, указанная на этапе компиляции, частота в Proteus и частота реального контроллера совпадали.
На стр. 26 даташита в разделе Default Clock Source написано:
The device is shipped with CKSEL = “10”, SUT = “10”, and CKDIV8 programmed. The default
clock source setting is therefore the Internal RC Oscillator running at 9.6 MHz with longest startup
time and an initial system clock prescaling of 8. This default setting ensures that all users can
make their desired clock source setting using an In-System or High-voltage Programmer.
То есть, когда вы его только-только купили, после включения он будет запускаться на частоте 1.2 МГц. Естесственно, функции задержек, скомпилированные для других значений частоты, будут работать некорректно.
Разница между теорией и практикой на практике гораздо больше, чем в теории.