Sari la conținut
ELFORUM - Forumul electronistilor

Timer Attiny2313


criss

Postări Recomandate

Buna seara Doresc sa realizez un timer cu control al tipului ON si OFF de randul minutelor(ex. timpul ON sa fie de 1secunda, iar OFF de max 1 minute(sa il pot controla de la 3s pana la 1min) ).Numai timpul OFF doresc sa-l ajustez, cel ON va fi intotdeauna de 1s.Am inceput sa studiez PWMul, dar Fast PWMul nu-mi este bun (comand relee) + nici nu pot cobora sub 1hz, imi trebuie ceva ce nu tine 'ocupat' microcontrolerul, ca sa am acces la 'intrari' (3 intrari imi trebuie si la comutare sa-mi modifice timpul).Am incercat ceva prin soft dar pe timpul temporizarii nu-mi raspunde MCul la nici o comanda.Orice recomandare/ajutor este binevenit.MCul este Attiny 2313 la 1Mhz(intern).Multumesc.

Link spre comentariu
  • Răspunsuri 5
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • criss

    2

  • nana

    1

  • nickrvl

    1

  • edy_wheazel

    1

Top autori în acest subiect

Buna seara Doresc sa realizez un timer cu control al tipului ON si OFF de randul minutelor(ex. timpul ON sa fie de 1secunda, iar OFF de max 1 minute(sa il pot controla de la 3s pana la 1min) ).Numai timpul OFF doresc sa-l ajustez, cel ON va fi intotdeauna de 1s.Am inceput sa studiez PWMul, dar Fast PWMul nu-mi este bun (comand relee) + nici nu pot cobora sub 1hz, imi trebuie ceva ce nu tine 'ocupat' microcontrolerul, ca sa am acces la 'intrari' (3 intrari imi trebuie si la comutare sa-mi modifice timpul).Am incercat ceva prin soft dar pe timpul temporizarii nu-mi raspunde MCul la nici o comanda.Orice recomandare/ajutor este binevenit.MCul este Attiny 2313 la 1Mhz(intern).Multumesc.

Pai s-ar putea cu Do ... Loop si Timer.Adica o bucla Do ... Loop in care pui Iesiri/Intrari ce vrei tu si care nu va fi intrerupta decit de Timer timp de fractiune de secunda, destul ca sa nu te incurce la comenzi. Asta in Bascom...Eu am reusit sa fac un cronometru cu afisaj cu leduri, muuuult mai complicat (soft) decit unul cu LCD. Si avea si doua butoane pentru setare si start.
Link spre comentariu

multumesc pt sfat.

@nana in C mi-ar trebui ca in ea lucrez(invat).

 

am incercat ceva sa fac dar cu if ... dar nu mi-a reusit. A iesit un simplu timer la care timpul setat era aceeasi pt ON si OFF, pe mine ma intereseaza sa le pot seta separat.

Din ce am citit nu pot cobora sub 1s cu timerul hardware ci din soft trebuie sa-l fac, iar ce am incercat sa fac 'tine' ocupat MCul pe perioada intarzierii.

 

Din acesta am pornit.Acesta este in modul NORMAL! Am mai lucrat doar cu FAST PWM nu stiu daca cu PWM PHASE AND FREQUENCY CORRECT am sa pot rezolva?! sau recomandati un alt mod.

 

#include <avr/io.h>int main (void){   unsigned char IntarziereSecunde = 0;    DDRB |= (1 << 0);   TCCR1B |= ((1 << CS10) | (1 << CS11));    for (;;)   {            if (TCNT1 >= 15624)      {         TCNT1 = 0;          IntarziereSecunde++;         if (IntarziereSecunde == 20)         {            IntarziereSecunde = 0;             PORTB ^= (1 << 0);         }      }   }}

Nu-mi trebuie sa comande un LCD sau un alt afisaj doar un releu.

 

Multumesc

Link spre comentariu

Eu as folosi Timer0 in felul urmator: de cate ori are loc intreruperea incrementezi un registru. Calculezi de cate ori trebuie sa-l incrementezi pt. a avea o secunda pt. 1Mhz si incrementezi un alt registru, toate acestea intr-o subrutina. La final ai un registru care este incrementat la fiecare secunda pe care il poti folosi atat pt. ON cat si pt. OFF. Daca apesi taste pt. reglare uC raspunde la comenzi si sare la alta subrutina dedicata acestei operatii.

Link spre comentariu

Daca nu vrei sa tina procesorul ocupat evident e necesara utilizarea intreruperilor cauzate de timer. Iata un exemplu in care activeaza releul la interval de 5 secunde , timp de 1 secunda.#include #include #include int sec=0;int main(void){ DDRD=0xFF;PORTD=0x00; TCCR1B |= (1 << WGM12); TIMSK |= (1 << OCIE1A); OCR1A = 20000; TCCR1B |= ((0<=5) { cli(); PORTD |=(1<<0); //activeaza releul _delay_ms(250); _delay_ms(250); _delay_ms(250); _delay_ms(250); PORTD^=(1<<0); //dezactiveaza releul sec=0; TCNT1=0; sei(); } }

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări