Sari la conținut
ELFORUM - Forumul electronistilor

BASCOM


yo9hnf

Postări Recomandate

Ma poate lamurii cineva cum se realizeaza un tahometru? Am reusit sa fac uC-ul sa numere impulsurile primite de la un buton, dar problema e cu baza de timp. Unitatea de masura pentru turatie este rot/min -> rotatiile le numar cu un contoar, dar cum ma raportez la minut pentru a afla rpm ?

Link spre comentariu

Folosesti TIMER0 ca baza de timp si TIMER1 ca numarator.Pentru a seta TIMER0 ca baza de timp cauta pe google "AVR timer calculator" sau apeleaza la foaia de catalog a uC si la notele de aplicatii cu timere ale aceluiasi uC.Si pana la urma ai reusit sa faci programul cu DS1307 sa functioneze?

Link spre comentariu

Iti alegi o rezolutie de citire dorita (sa zicem 1 sec).

Asta inseamna ca la fiecare secunda resetezi contorul.

Cu o intrerupere externa (pe front urcator/coborator) incrementezi contorul.

 

Pentru baza de timp de o secunda, poti folosi un timer (setat corespunzator) si o intrerupere (overflow/compare/etc.). In intrerupere afisezi turatia (turatie(rpm) = 60 * contor / baza_timp(s)) si resetezi contorul.

 

Ceva in genul:

volatile uint8_t timp_scurs = 0;volatile uint16_t contor = 0;ISR(EXT_INT_vect){  contor++;}ISR(TIMER_OVF_vect){    timp_scurs = 1;}main(){ ... while (1) {  if (timp_scurs)  {    timp_scurs = 0;    //opreste intreruperi, contor fiind modificat din intrerupere    cli();    uint16_t aux = contor;    sei();    uint16_t rpm = 60 * contor;     //afisare rpm  } }}
Link spre comentariu
  • 2 săptămâni mai târziu...

Folosesti TIMER0 ca baza de timp si TIMER1 ca numarator.Pentru a seta TIMER0 ca baza de timp cauta pe google "AVR timer calculator" sau apeleaza la foaia de catalog a uC si la notele de aplicatii cu timere ale aceluiasi uC.Si pana la urma ai reusit sa faci programul cu DS1307 sa functioneze?

Am intels...urmeaza...Cu DS1307 inca ma mai lupt.
Link spre comentariu

Am realizat pentru test montajul de aici : http://extremeelectronics.co.in/avr-tutorials/interfacing-ds1307-rtc-chip-with-avr-microcontroller/

...si merge (!)....intr-un final : eu initial aveam rezistentele de pull-up de la DS1307 de 10k si nu mergea, am pus de 4k7 si tot nu mergea, i-am pus si bateria de back up si acum merge.

 

Urmeaza sa ma mai chinui cu programul postat cu 2 pagini in urma.

Link spre comentariu

Merge si softul pe care l-am incercat initial. Am respectat cu "strictete" schema. Totusi ora nu merge reglata ; decat butonul de "minute" functioneaza, dar foarte greu - cred ca intre doua apasari citite trebuie sa treaca 2 secunde.

Link spre comentariu
  • 1 lună mai târziu...

Salut, am si eu o dilema!

Deci am un port de intrare EX:

Config PORTD.0= inputdoIf Pind.0=0 then.....end ifloop
In multe aplicati puneam o rezistenta de 1k intre +5V si PORTD.0 iar comada se facea cu un buton push legat la masa!

Toate bune, dar am simulat cu urmatoarea comanda in plus, in simulator este OK dar in realitate cum e? se arde MCU?

Asta ca sa scap de rezistenta externa!

Config PORTD.0= inputSet PORTD.0doIf Pind.0=0 then.....end ifloop
Eu ma gandesc ca este ca un scurt!

Prin datasheet nu zice nimik de aceasta treaba!

Un port folosit ca intrare dar setat ca iesire!

Link spre comentariu

ba zice si prin datasheet. Ce ai facut tu acolo este activarea pull_up-ului intern la pinul respectiv. Rezultatul este cel care il doresti, renuntarea la rezistenta externa.

Link spre comentariu

Salut, am si eu o dilema!Deci am un port de intrare EX:

Config PORTD.0= inputdoIf Pind.0=0 then.....end ifloop
In multe aplicati puneam o rezistenta de 1k intre +5V si PORTD.0 iar comada se facea cu un buton push legat la masa!Toate bune, dar am simulat cu urmatoarea comanda in plus, in simulator este OK dar in realitate cum e? se arde MCU?Asta ca sa scap de rezistenta externa!
Config PORTD.0= inputSet PORTD.0doIf Pind.0=0 then.....end ifloop
Eu ma gandesc ca este ca un scurt!Prin datasheet nu zice nimik de aceasta treaba!Un port folosit ca intrare dar setat ca iesire!
Confirm si eu ca merge, aici un mic exemplu pentru aprindere led la apasarea unui buton pentru un Attiny13:$regfile = "attiny13.dat"Ddrb = &B111111$hwstack = 16$swstack = 16$framesize = 16$noramclearDdrb = &B111100Pinb.4 = 1 'inButon Alias Pinb.4 'inLed Alias Portb.3 'outDo If Buton = 0 Then Led = 1 Else Led = 0 End IfWaitms 20LoopEnd
Link spre comentariu

Cand am folosit comada asta "PIN.D=1" la un atmega8535 , o cam lua razna isirile care erau configurate pentru pinul respectiv!De aceea am intrebat!Acum nu stiu cum se comporta comanda "SET PORTD", si nici nu as vrea sa ard vreun port!

Link spre comentariu

Comanda "PINX.Y" este indica utilizarea portului x, pinul y ca intrare."Set (sau Reset) Portx" indica utilizarea portului x ca port de iesire si poate fi cu rezistentele pull-up activate (set), respectiv dezactivate (reset), cu unele exceptii prevazute in foaia de catalog.

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