Sari la conținut
ELFORUM - Forumul electronistilor

Contor Ah cu PIC 12F675


Ticu

Postări Recomandate

Cred ca de vina e frontul prea abrupt al MCU, care genereaza interferente de radiofrecventa. Doua filtre 'trece jos' la iesirea pinilor D si CL din MCU, pentru a rotunji putin frontul. Astfel, pinul iese direct intr-o rezistenta de 1k. Dupa rezistenta vine un condensator de 5nF care duce la masa, dar si firul propriuzis care duce la 4094.

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

Top autori în acest subiect

  • Ticu

    13

  • 10vid

    9

  • francezu

    2

  • ratoiul

    2

Top autori în acest subiect

Imagini postate

Nu s-a rezolvat cu filtre. Se vede pe afisaj defilarea datelor prin registre in timpul transmisiei de date.Pana la urma i-am adaugat doua monostabile (CD4098) care dupa terminarea trenului de impulsuri de ceas (2,9 ms) mai asteapta cam 1,5 ms si apoi genereaza un puls pozitiv pe strobe, care transfera in latchuri datele deja incarcate in registre. In felul asta s-a normalizat afisarea. Constantele de timp ale monostabilelor care rezulta cu valorile indicate in schema nu sunt critice. Mi-a functionat si fara condensatorul 3,3nF (pe capacitatile parazite), cu 0,15 microsecunde durata impulsului strobe! Evident, impulsul poate fi generat si prin soft, daca va fi disponibil un pin de la controller.

Link spre comentariu
  • 2 săptămâni mai târziu...

Foarte ciudata problema cu parazitii pe intrarea strobe, poate trebuia decuplat fiecare cip 4094 cu cate un mic condensator, dar oricum bine ca ai rezolvat si asa.Ok, am finalizat codul. Am vazut ca ai folosit in schema un led separat legat la sursa, pentru indicarea punctului. Digitii 7seg pe care ii ai nu au punct? Oricum ar fi bine sa il legi la iesirea 8 a lui 4094, pentru ca punctele sunt comandate de program. Astfel, in modul mA sunt stinse (0000), in modul Ah cel din mijloc e aprins (00.00), iar in modul Timp clipesc cei doi din mijloc (00:00) (se poate folosi doar unul sau amandoi daca se rastoarna digitul 3 cum a zis francezu).Modurile de afisare sunt indicate pe ecran la apasarea butonului. (Ah, mA si tmp). La tinerea butonului apasat 2.5s, se reseteaza. Butonul se leaga la GP3 si GND cu o rezistenta de pull-up de 10k (eventual si un mic condensator de 10nF de la GP3 la GND).Am pus si simularea.

contor_Ah_v2.zip

Link spre comentariu

Semnalele sunt curate. Incercam sa demonstrez necesitatea unui strobe decuplat de la clock si aplicat dupa ce s-a terminat transferul datelor in registre.Cu punctele nu e nici o problema: la voltmetru erau independente pt. ca erau aprinse de comutatorul de domenii de lucru.Varianta 2 pare foarte promitatoare si raman dator pentru efortul facut. Partea proasta e ca deocamdata la mine nu vrea sa functioneze. Incarcarea programului este OK, dar pe placa este blocata intr-o pozitie in care la iesirea clock apar permanent pulsuri cu perioada cca. 90 microsecunde, iar la iesirea de date (pin 7) se repeta o secventa ca cea din poza atasata. Insensibil la buton, tensiune de intrare, start cu sau fara buton apasat ori tensiune aplicata.Verificat pe 3 controlere, care inainte si dupa test au fost programate pe varianta 1 si acolo totul este OK.As vrea sa recapitulam cativa pini: pin 2 liberpin 4 la + prin 10k si la masa prin apasarea butonuluipin 5 la + prin 10k (sau liber ?) si la el nu se mai leaga nimic.

Link spre comentariu

Pare un exemplu tipic de procesor care executa gunoaie.

Am gasit o variabila neinitializata care ia parte in calculul unor salturi in program si care la power-up ia o valoare nedefinita :speriat astfel ca poate sa sara oriunde si sa iasa de sub controlul programului. Sper sa fie asta.

 

pin 2 ---> liberpin 3 ---> intrare ADCpin 4 ---> butonpin 5 ---> Strobe (sau liber)pin 6 ---> Clockpin 7 ---> Data

contor_Ah_v3.zip

Link spre comentariu

Multam pentru depanare. Maine pe la pranz o testez. Eu ma mai gandisem la o verificare partiala a functionarii cronometrului, dar ramane la aprecierea dv. daca e cazul.

Link spre comentariu

Ura! Merge in general bine.Semnalul strobe a rezolvat palpaiala si nu mai e nevoie de nimic suplimentar.Cele trei tipuri de afisare se selecteaza prin apasarea butonului (vezi poza).Ceasul (ore:minute) este destul de bun, cu o tendinta de ramanere in urma de circa 1 sec/minut (cam 1,5%), cu mici variatii de la exemplar la exemplar (4,95V, 29 gradeC, osccalurile din fabrica). Destul de normal zic eu, fara cuart.O problema apare la punerea sub tensiune. Am trei tipuri de pornire:1- afiseaza Ah si asteapta o apasare lunga pentru resetare, odata cu schimbarea indicatiei pe mA2- uneori insa dupa Ah afiseaza segmentele (b, e, f) pe toti digitii, pana la resetare din buton3- rareori se blocheaza pe Ah si trebuie decuplata alimentarea pentru a-l scoate din blocaj. Ar fi posibila o pornire mai sigura, eventual cu resetare automata?Odata pornit, functionarea este OK, cel putin pe cateva ore cat am testat.O observatie de la un coleg: Ah si mA sunt unitati de masura; poate era mai logic h_m, ORE sau HOUR pentru timp.

post-29403-13982930814_thumb.jpg

Link spre comentariu

Corect, "tmp" nu e unitate de masura, am schimbat cu "hour". N-am vrut sa pun "ore", pentru a ramane in ton cu Ah, si nu cu Ao.Ceasul este derivat din frecventa oscilatorului intern de 4Mhz. Nu are cum sa ramana in urma decat daca oscilatorul ramane in urma dupa acei 4Mhz. In simulator nu ramane in urma.Aici intervine modificarea valorii OSCCAL din ultima locatie de memorie. Aceasta consta din doi octeti. Primul, 34h e un cod si ramane neschimbat. Al doilea ia valori de la 00h la FFh in multiplii de 4. 00h corespunde celei mai mici frecvente programabile, iar FCh (cel mai mare multiplu de 4) celei mai mari frecvente. Notezi intai valoarea existenta si pornesti de la ea, adaugand pentru inceput sa zicem 4. N-ai de unde sa stii cat.Am mai facut niste modificari. La power-up contoarele nu erau sterse si contineau alte cocarle in loc de numere.

contor_Ah_v4.zip

Link spre comentariu

L-ai rezolvat perfect. Pornire stabila pe pozitia Ah,urmata de resetare automata pe 00.00 Nu stiu ce s-ar mai putea face la el. Poate o varianta cu multiplexare pentru economie de componente.Imi place si indicatia domeniului prin puncte, desi nu am intors digitul 3 fiindca aveam placa gata cablata. De fapt pentru indicare este suficient un singur punct intre digitii 2 si 3:aprins = Ah, stins = mA, intermitent = ceas.Am facut un test de variatie cu temperatura a frecventei oscilatorului intern, dar rezultatul nu a fost semnificativ. Speram sa creasca frecventa cu scaderea temperaturii. Ca sa nu mai spun de resetarile de la pornirea motorului de la frigider, fiindca am pastrat alimentarea de la retea. Ramane varianta cu modificarea osccal. Cineva zicea pe net ca fabrica le-ar calibra la 3,5V alimentare.

Link spre comentariu

Revin cu niste rezultate practice.Reglajul osccal functioneaza neasteptat de amplu, pe aproape plus/minus 20% din frecventa medie, adica aprox. 0,16% / unitate. Deriva termica este undeva pe la +0,04% / grd C. Valori aproximative, pe un singur exemplar. O observatie din exploatare, daca mai umbla cineva la cod: valoarea maxima pentru curent (1023) ar fi bine sa fie schimbata cumva pentru ca este falsa in cazul depasirii curentului la intrare, de exemplu prin ----, sau cccc intors stanga/dreapta (un fel de >>>>) cum facea pe vremuri convertorul C520D. S-ar mai putea aprinde ultimul punct zecimal ca indicatie vizuala, la care se va putea cupla eventual si o avertizare sonora pentru depasire.In alta ordine de idei, primul digit ar putea fi permanent stins pe domeniul mA, pentru a nu crea impresia ca se asteapta si valori mari. Sigur ca acum am ajuns la rasfat...

Link spre comentariu
  • 2 luni mai târziu...

Salutare,Buna ideea acestui contor, chiar interesanta, toata consideratia celor care au realizat acest contor Ah,mai ales pentru softul realizat. M-ar interesa tot un contor cu 4 digiti, sa masoare si sa afiseze de la dreapta la stanga, din ora in ora, (9999 de ore ar fi suficiente), sa am posibilitatea sa programez acest contor ca la un anumit numar de ore sa-mi aprinda un led intermitent si sa numere (masoare) numai cat timp agregatul este in functiune, cand este oprit nu mai numara, dar ce a numarat sa memeoreze, chiar daca uC-ul nu mai este alimentat (contorul se alimenteaza din sursa agregatului) partea cu sursa ma descurc, asta este tot. Deci un pin este pus la masa cand agregatul este pornit, iar pentru programare sa folosesc un pin set, un pin incrementare si un pin decrementare, sau numai incremntare fara decrementare, mi-ar place sa folosesc un PIC12F675.Toate cele bune

Link spre comentariu

Salutare,Revin iar cu ideea unui contor care numara doar orele (fara minute, zile, etc). Daca contorul numarapana la 1000 si este oprit el trebuie sa memoreze cat a numarat si la urmatoarea lansare sa inceapa sa numere de la 1000 mai departe (un mod de memorare ar fi sa retina impulsul numarat in timp real, daca la urmatorul impuls uC-ul nu sesiseaza ca trebuie sa opreasca numararea va schimba impulsul retinut mai devreme si va retine urmatorul impuls), spre exemplu daca la impulsul 999 uC-ul mai are acel pin pus la masa (ceea ce inseamna ca trebuie sa numere), urmatorul impuls este 1000, in acest moment uC-ul sterge 999 si retine 1000, deasemenea sursa pentru uC va fi back-up.

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