Tonton Timer Anjing + Arduino

8

Bagaimana cara mengatur timer anjing menonton perangkat keras dengan Arduino?

littlebirdceo
sumber
2
Saya pikir Anda harus memilih jawaban lain karena Arduino memiliki pengawas di dalamnya.
Matt Williamson

Jawaban:

7

Ada sejumlah chip pengawas perangkat keras khusus yang tersedia, tetapi cukup mudah untuk melakukannya menggunakan IC timer 555 biasa dan beberapa bagian pendukung. Dengan 555 yang dikonfigurasikan dalam mode astable dengan periode "TINGGI" yang sangat panjang dan periode "RENDAH" yang relatif singkat (mungkin 0,3 detik), output dapat dihubungkan ke pin reset Arduino melalui dioda untuk menjadikan pengawas kolektor terbuka alat. Arduino kemudian dapat mengatur ulang pengawas secara berkala menggunakan output digital untuk menyalakan transistor yang melepaskan kapasitor waktu yang terpasang pada 555, mencegahnya mencapai titik pemicu yang akan menyebabkannya untuk mengatur ulang Arduino.

Beberapa informasi dasar tentang proyek untuk melakukan ini tersedia di http://www.practicalarduino.com/news/id/471

Jonoxer
sumber
1
phooky benar-benar benar, tetapi WDT internal memiliki keterbatasan: itu tidak dapat berjalan selama lebih dari 6 detik (tergantung pada model CPU) dan tidak ada cara untuk melakukan "reboot" bersih dari perangkat lunak. Anda dapat memberi tahu CPU untuk melompat ke posisi 0 dan memulai kembali bootloader, tetapi kemudian Anda mungkin dibiarkan dengan hal-hal yang cerdik dalam RAM dan hal-hal seperti bendera interupsi masih diatur dalam CPU. Menegaskan RESET dalam perangkat keras memastikan Arduino akan menghasilkan lingkungan yang bersih.
34818 jonoxer
2
membiarkan waktu WDT habis akan menyebabkan "reset bersih" karena semua register akan dijamin untuk memulai dalam keadaan yang ditentukan. Menyelesaikannya dalam perangkat lunak semudah menonaktifkan interupsi dan berulang tanpa henti.
Nick T
14

Sudah ada pengawas waktu yang dibangun ke dalam chip atmega; Anda dapat menggunakannya avr/wdt.huntuk memanipulasinya.

Contoh cepat:

#include <avr/wdt.h>

void setup() {  
  wdt_enable(WDTO_500MS); // have the wdt reset the chip
  // if 500ms passes without a reset
}

void loop() {   
  wdt_reset(); // reset the wdt
}
phooky
sumber
3

Saya telah mendengar tentang beberapa masalah yang dilaporkan dengan WDT dan bootloader biasa, jadi Anda mungkin ingin mencoba bootloader lain dengannya, misalnya Adaboot.

Selain itu, Anda dapat melakukan lebih banyak hal dengan WDT selain hanya reset. Saya merekomendasikan http://www.atmel.com/dyn/resources/prod_documents/doc2551.pdf

Beladau
sumber