Rafinare pe fitile de aer avr automate de aer aerpr freshmatic

Rafinare pe fitile de aer avr automate de aer aerpr freshmatic

Versiunea mea de rafinament a celebrului odorizant de pe microcontroler Atmel ATtiny13A.

Rafinament este de a conecta controlerul cu răspunsul senzorului la sistemul nativ cu ajutorul motorului din acesta cu LED-uri de legare cu banda, iar acest lucru este conectat numai la sursa de alimentare. Există un contor de alarmă pentru avertizarea apropierii lichidului din sticlă până la capăt.








Comutatorul pentru dezaburire trebuie să fie în poziția oprit.

Algoritmul de împrospătare este următorul:
1. Când senzorul este declanșat, se verifică dacă călătoria anterioară a fost mai devreme decât timpul de expirare (implicit este de 15 minute),
2. O pauză este în așteptare (implicit este de 16 secunde), LED-ul pentru informații clipește,
3. Apăsați supapa cilindrului cu o odorizantă.

Rafinare pe fitile de aer avr automate de aer aerpr freshmatic

A fost adăugat un buton care poate anula operația în faza 2 sau declanșa declanșatorul în orice moment.
De asemenea, setează setările și resetează contorul.

Programul are un contor încorporat și numărul maxim de călătorii pe cilindru (implicit este 2300).
Site-ul producătorului prezintă o valoare aproximativă de 2400.
Primul cilindru a lucrat undeva 2340 operațiuni.

Valoarea împărțită la 10 este stocată în EEPROM. După schimbarea cilindrului, celula de memorie este schimbată pentru a-și spori durata de viață.

calibrarea oscilatorului intern prin OSCCAL (luate când celula EEPROM 0) se face trimitere mai mult sau mai puțin precise de timp, având în vedere frecvența corespunzătoare - 2621440.






Timpul este contorizat în întreruperea timpului de temporizare a temporizatorului (se declanșează de 10 ori pe secundă).

Butonul este procesat în PCINT0 prin schimbarea stării pinului, apoi se utilizează un temporizator pentru întârziere, pentru a evita blocarea contactelor.

Senzorul - LED-ul cu infraroșu și fotodioda, sunt direcționate una de cealaltă deasupra butonului de spălare a toaletei. Fotodioda este pusă pe cambric pentru a exclude fals pozitive. Declanșarea pe intersecția fasciculului.
Am decis să încerc această metodă, dar puteți răsuci și senzorul de mișcare.
Declanșarea INT0 - pe marginea descendentă.

Bateriile native sunt utilizate pentru a economisi energie la controler când lumina este oprită.
Programul este scris în C în Atmel Studio 6.1.

Atunci, așteaptă surprize. Pot să vă spun cum va fi.
Să presupunem că, așa cum spui, MinRepeatTime este 0. Atribuirea non-atomice în funcții DoNow au un șir de caractere MinRepeatTime = EEPROM_read (EPROM_MinRepeatTime) * 60;
Care este noua valoare calculată MinRepeatTime - nu contează, lăsați-o să fie 0x0100. Este important ca alocarea se intampla non-atomice, octet „pentru 2 admitere“: 01 și 00. Acum, ma uit la mâna mea: după atribuirea senior
byte 01 a avut loc o întrerupere. Ca „nedoprisvoennaya nostru» MinRepeatTime este acum presupune că este 0x0100, atunci linia de întrerupere va fi executată în cazul în care (MinRepeatTime) MinRepeatTime--; și MinRepeatTime devine 0x0100 - 1 = 0x00FF. După aceasta, întreruperea este "în siguranță" și controlul revine la DoNow. Acolo se va întâmpla tragedia finală: o MinRepeatTime variabilă prisobachit octetul scăzută și va fi egal cu 0x0000.

Înțelegi că numerele sunt condiționate, iar situația poate fi mai abruptă.

PS. Apropo, cazul descris nu este singura surpriză. Optimizatorul poate, în general, dezordonat pentru a gestiona MinRepeatTime variabilă - de exemplu, nu obține ea sau zaoptimiztrovat dincolo de recunoaștere, deoarece optimizatorul nu știu știu ce este utilizat în altă parte într-un „flux“ complet diferit - este întreruptă (mai ales în cazul în care conductorul va fi într-un alt fișier) . Nu ați spus compilatorului pentru variabila MinRepeatTime cuvântul volatil: "nu optimizați această variabilă".

Vezi mai jos, a fost conceput.

Primul octet de ordin scăzut al variabilei este umplut și chiar dacă întreruperea are loc și variabila este redusă înainte de a umple octetul de înaltă ordine, acest lucru nu va afecta nimic.

Uh-huh. Pentru versiunea compilatorului 123454321FF acest lucru va fi cazul. Și deja pentru versiunea 23454321AA - puteți garanta că compilatorul va fi același?
Și când încă mai scrieți volatil - această ordine va fi păstrată. )

Această variabilă nu a fost învelită în mod special - puțină memorie.
Am rescris întreruperea în asamblare aici, ca să mă încorporez în kilobyte ...

EasyEDA: Free Cloud CAD

live acum







Articole similare

Trimiteți-le prietenilor: