Error Nilai Delay (delay.h) Pada AVR studio 4

Terkadang ada masalah saat kita menggunakan library delay pada AVR Studio 4. Nilai delay tidak tepat. Sempat saya megalaminya. Tapi saya otak-atik setingannya dan kemudia saya kembalikan seperti awal  ternyata malah dengan setingan awal bisa juga bekerja dengan baik. Tepatnya saya juga tidak mengerti sebab tepat mengapa nilai delay ini pada awal-awal membuat project ada error pada nilai delay. Asumsi sementara error software. Tapi setelah beberapa kali build dan coba otak-atik, akhirnya nilai delay yang ditulis di program sesuai harapan.

Mungkin buat referensi saja saya menemukan artikel ini, http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html. Berikut terjemahannya.

<util/delay.h>: Fungsi nyaman untuk penggunaan busy-wait delay loops
Fungsi
void _delay_ms     (double      __ms )
void _delay_us     (double      __us )
Detil Deskripsi

# Define F_CPU 1000000UL / / 1 MHz
/ / # Define 14.7456E6 F_CPU
# Include <util/delay.h>

Catatan:
Sebagai metode alternatif, adalah mungkin untuk menyambungkan makro F_CPU ke compiler dari Makefile. Jelas, dalam kasus itu, tidak ada # define pernyataan harus digunakan.

Fungsi dalam header file ini adalah yang berada pada basic busy-wait functions dari <util/delay_basic.h>. Mereka dimaksudkan sebagai fungsi yang nyaman untuk digunakan di mana nilai sebenarnya dapat dispesifikasikan dengan sejumlah siklus delay (tunggu). Ide di belakang adalah bahwa waktu kompilasi konstan yang ditunjukan akan dihilangkan dengan optimasi compiler sehingga nilai yang ditunjukan floating-point dapat digunakan untuk menghitung jumlah siklus delay yang  diperlukan berdasarkan frekuensi CPU yang disahkan oleh F_CPU makro.

Catatan:
Agar fungsi-fungsi untuk bekerja sebagaimana dimaksud, optimasi kompilator harus diaktifkan, dan waktu delay harus berupa ekspresi yang konstan yang dikenal pada saat kompilasi. Jika persyaratan ini tidak terpenuhi, penundaan yang dihasilkan akan lebih lama (dan pada dasarnya tidak terduga), dan aplikasi yang lain tidak menggunakan perhitungan floating-point akan mengalami keadaan yang tidak diinginkan dikarenakan penggunaan floating-point library routine pada aplikasi/project file.

Fungsi yang tersedia memungkinkan spesifikasi delay dalam mikrodetik, dan milidetik yang dinyatakan secara directly(nilai delay dinyatakan secara langsung), menggunakan makro F_CPU pada aplikasi yang disediakan sebagai frekuensi clock CPU (dalam Hertz).
Fungsi Dokumentasi
void _delay_ms     (double      __ms )

melakukan delay dalam milidetik __ms, menggunakan _delay_loop_2 ().

The F_CPU makro seharusnya pasti menjadi konstan mendefinisikan frekuensi clock CPU (dalam Hertz).

nilai delay maksimal 262,14 ms / F_CPU dalam MHz.

Ketika permintaan delay melebihi nilai maksimum yang dimungkinkan, _delay_ms () menyediakan penurunan fungsi resolusi. Dalam mode ini _delay_ms () akan bekerja dengan resolusi 1 / 10 ms, memberikan nilai delay sampai dengan 6,5535 detik (independen dari frekuensi CPU). Pengguna tidak akan diberitahukan tentang penurunan resolusi ini.
void _delay_us     (double      __us )

Melakukan delay dalam mikrodetik __us, menggunakan _delay_loop_1 ().

The F_CPU makro seharusnya pasti menjadi konstan yang mendefinisikan frekuensi clock CPU (dalam Hertz).

Penundaan maksimal yang memungkinkan adalah 768 us / F_CPU dalam MHz.

Jika permintaan penggunaan delay lebih besar daripada nilai maksimal yang memungkinkan, _delay_us () secara otomatis akan memanggil _delay_ms () sebagai gantinya. Pengguna tidak akan diberitahu tentang kasus ini.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s