Sari la conținut
ELFORUM - Forumul electronistilor

Cum opresc un timer cu un switch cand e apasat (pic12f675 in mplab)?


Vizitator incepatoare94

Postări Recomandate

Vizitator incepatoare94

Abia m-am apucat de programare in mplab si incerc sa-mi dau seama cum ar arata secventa care sa foloseasca un switch care atunci cand il apas imi opreste un timer.Concre,t ca sa pricep pe un exemplu,cum as putea modifica programul atasat ca sa obtin ce am spus mai sus?

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

Top autori în acest subiect

  • Liviu M

    4

  • MifTy

    1

  • UDAR

    1

  • 10vid

    1

Top autori în acest subiect

Imagini postate

Pentru ca n-ai pus programul de modificat, si n-ai spus in ce limbaj programezi (mplab e un "banal" IDE), un fel de Ceudocod (C amestecat cu pseudocod).

Cand pornesti timerul x *), folosesti comanda TMRxON = 1. Ca sa-l opresti o sa folosesti TMRxON = 0.  :rade:

Ca s-o faci in functie de starea unui pin, citesti pinul **) si opresti timerul intr-un bloc if

if(pinStopTimer){   TMRxON = 0;}

Spor!

 

*) Asta presupunand ca ai configurat bine TMRx

**) Asta presupunand ca ai configurat pinStopTimer ca intrare si ai dezactivat eventualele periferice analogice.

Editat de Liviu M
Link spre comentariu
Vizitator incepatoare94

acesta este programul initial care trebuie modificat

este in assembler sau assembly language cum ii spun unii,nu prea pot folosi secvente de c,c++(de aceea mi-e si mai greu sa inteleg)

post-230180-0-51765700-1400441880_thumb.jpg

Link spre comentariu

A trebuit sa iau o lupa sa citesc ce scrie acolo.

 

Primul lucru, va trebui sa stergi bitul 7 de la OPTION_REG, pentru a activa rezistentele de pull-up la pini (acolo unde e incercuit pe foaie). Butonul se va lega la GP0 (pinul 7) si GND.

 

Apoi trebuie sa inlocuiesti secventa:

 

main

 goto main

 

cu:

main	    btfsc   GPIO,0				  ;E butonul apasat? Daca da, sarim peste urmatoarea	    bcf	 OPTION_REG,T0CS		 ;Butonul nu e apasat, pornim timer-ul	    btfss   GPIO,0				  ;E butonul neapasat? Daca da, sarim peste urmatoarea	    bsf	 OPTION_REG,T0CS		 ;Butonul e apasat, oprim timer-ul	    goto    main

Mai exista si o soultie hardware, dar cu timer1 (pinul T1G/GP2). Ar cam trebui insa rescris tot programul.

Editat de 10vid
Link spre comentariu
Vizitator incepatoare94

Sarumana:)...poti sa-mi explici totusi de ce gpio,0?

switchul este pe GP3

main
  btfsc GPIO
,3                ;E butonul apasat? Daca da, sarim peste urmatoarea
  bcf OPTION_REG
,T0CS ;Butonul nu e apasat, pornim timer-ul
  btfss GPIO
,3                ;E butonul neapasat? Daca da, sarim peste urmatoarea
  bsf OPTION_REG
,T0CS ;Butonul e apasat, oprim timer-ul
 
goto   main

nu ar fi bine asa?:*

iar la timer 1 tot la fel m-ar interesa doar secventa cu switchul ,in rest stiu sa rescriu programul

 Ar veni: 

main
  btfsc GPIO,4               ;E butonul apasat? Daca da, sarim peste urmatoarea
  bsf OPTION_REG,T1G       ;Butonul nu e apasat, pornim timer-ul
  btfss GPIO,4               ;E butonul neapasat? Daca da, sarim peste urmatoarea
  bcf OPTION_REG,T1G       ;Butonul e apasat, oprim timer-ul
goto   main

E bine la timer 1 asa ca sa opresc timerul cu un switch?Ma gandeam ca bitul TMR1ON ar trebui sa conteze daca timer1 este oprit sau nu.

Link spre comentariu

... dacă aia e temă de facultate, chiar dacă-i iese, ia 4, pentru că a corectat problema dată greşit.mai ştiu câţiva care au păţit figura asta.

Link spre comentariu
Vizitator incepatoare94

Dar nu incerc sa corectez  nimic ca ea e bine facuta deja ci sa o modific in diverse moduri pt. a invata sa stapanesc assembler mai bine .

Link spre comentariu

Eu inca o data admir posturile lui 10vid, dar inca o data constat ca nu e deloc "pedagogic"

Incepatoarea n-a incercat nimic. Nici macar n-a "dactilografiat" programul de modificat, nu mai zic de citit foaia de catalog a controllerului.

In cazul temelor, mie mi se pare util ajutorul dat cuiva care arata ca a incercat ceva.

Link spre comentariu
Vizitator incepatoare94

Eu totusi ii apreciez ajutorul lui 10vid care m-a facut sa pricep mai bine chiar daca nu sunt pe profil "electronica si telecomunicatii". Intrebarile mele cu propuneri (nu ar fi mai bine asa?)arata implicarea mai mult decat o dactilografiere prin care am trecut deja pe alt calculator la care am conectat si microcontrollerul sa pot vedea ce se intampla acolo .Acum,fiecare cu parerea lui.

In plus,simplul fapt ca postez aici arata ca vreau sa stiu mai multe si ies din spatiul "facultate".As aprecia daca ar comenta cineva sa ma ajute si sa imi raspunda la ultimele intrebari nu doar sa comenteze ca nu vad rostul de ce ar pierde si timpul lui si al meu.

Link spre comentariu

M-am uitat acum prin data-sheet (Capitolul 5) la Timer1 ai mai multe posibilitati:

- soft - TMR1ON=1 - pornesti timerul TMR1ON = 0 il opresti. Secventa e asemanatoare cu ce a scris 10vid pentru tmr0, numai ca nu folosesti OPTION_REG ci TMR1ON. 

- hard, conectand butonul la T1G. Faci TMR1ON = 1 & TMR1GE = 1 la inceputul programului si activezi/deactivezi timerul extern (automat), din butonul de la T1G (pinul 3). Cand butonul pune masa ("0) pe pinul 3 timerul functioneaza, cand pune "1" timerul se opreste.

 

 

TMR1GE: Timer1 Gate Enable bit

If TMR1ON = 0:
This bit is ignored
If TMR1ON = 1:
1 = Timer1 is on if T1G pin is low
0 = Timer1 is on
 

PS Raman la parerea mea ca intai trebuie sa citesti/intelegi data-sheetul. Intrebarile pe care le apreciez sunt cele: "am incercat asa (si vine ce ai incercat) dar nu merge" sau "in exemplu scrie ca..., dar eu nu inteleg de ce, ca mie mi se pare ca ar trebui sa...". Ma rog, posturi din care sa se vada ca nu ceri sa ti se faca tema, ci incerci sa-ti faci tema si ceva nu merge.

Din postul la care m-am referit anterior eu intelg "faceti-mi voi tema". Cel cu Timer1 e OK.

Link spre comentariu
Vizitator incepatoare94

Ok ,fie,de acord cu tine cu partea practica desi nu asta a fost intentia mea de a imi face cineva tema. Am cateva intrebari pe parte teoretica(am citit datasheet-ul deja):

1. Cate functii are modulul TMR0CS?Eu am zis ca are o singura functie:aceea de a selecta sursa tactului(interna sau externa),iar doamna profesoara a spus ca are 2 (counter pt clock extern si timer pt clk intern) ,dar acestea 2 nu erau functiile lui TIMER0? Lamuriti-ma va rog.

2. Daca am un nr in hexa pe care il convertesc in binar si are 20 biti de exemplu,iar intrebarea mea suna cam asa:Cati biti sunt necesari pt scrierea acestui nr ?Raspunsul este 20 sau 32?

Link spre comentariu

1 Din data-sheet:

Timer mode is selected by clearing the T0CS bit(OPTION_REG<5>). In Timer mode, the Timer0 module will increment every instruction cycle (without prescaler)....Counter mode is selected by setting the T0CS bit (OPTION_REG<5>). In this mode, the Timer0 module will increment either on every rising or falling edge of pin GP2/T0CKI.

Asa ca dupa parerea mea, aveti dreptate amandoua, fiind chestie de interpretare. Cand folosesti ceasul intern, e destul de clar - frecventa ceasului e fixa, asa ca poti folosi timerul sa "reactioneze dupa un anumit timp" - timer (desi se poate interpreta si "dupa un anumit numar de cicluri instructiune => counter).In cazul "ceasului extern", poti avea situatia anterioara - o sursa stabila de ceas, cu o anumita frecventa, caz in care se repeta situatia anterioara (si in cazul asta e varianta ta) sau, mai interesant, poti avea evenimente aleatoare in timp (fara o frecventa stabila/cunoscuta) pe care le poti "numara". In cazul asta e clar ca avem de-a face cu un... numarator.2. Sau 24?Bitii necesari sunt 20. Bitii folositi vor fi probabil 24 - 3 octeti, pentru ca e vorba de controllere pe 8 biti (asa ca datele sunt reprezentate in "grupuri" de octeti). In cazul asta 20 de biti vor fi utili, restul de 4 vor fi "risipiti".

 

PS Astea sunt pareri pe forum, da? N-am nici o pretentie ca sunt si corecte.  :rade: PS Am incercat sa raspund cu citate, da' nu ma lasa forumul (prea multe citate - erau 3 :scarpin ).

 

 

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