Sari la conținut
ELFORUM - Forumul electronistilor

ATMega16 - ajutor


dorelb

Postări Recomandate

  • Răspunsuri 68
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • dorelb

    33

  • godFather89

    13

  • fratello

    5

  • nickrvl

    1

Top autori în acest subiect

Imagini postate

Nu mai da nimeni niste sfaturi ? Am ramas la stadiul de cifre inpietrite . Afisaza cele sase segmente - 00 : 00 : 00 - , si cam atat . Se pot regla orele si minutele, dar ceasul nu porneste . Nu am habar la programare .

Link spre comentariu

In codul sursa ai:

/*Global Variables Declarations*/unsigned char hours = 0;unsigned char minutes = 0;unsigned char seconds = 0;
care apoi sunt incrementate din intreruperea de 1 sec.

Trebuie marcate cu 'volatile' ca sa mearga din intrerupere.

 

Deci, schimba cu:

/*Global Variables Declarations*/volatile unsigned char hours = 0;volatile unsigned char minutes = 0;volatile unsigned char seconds = 0;

si recompileaza.

Link spre comentariu

@godFather89. Salut ! Cum am scris mai sus, nu am cu ce sa generez hex-ul. L-am modificat si il atasez mai jos. Daca poate cineva sa genereze hex-ul, mii de multumiri.

Link spre comentariu

@godFather89 si

@keller946 . Despre asta este vorba . Merge . Acum sa vad ce precizie are. Mersi foarte mult ! Pentru cei care vor sa faca ceasul, au toata documentatia mai jos :

 

http://www.avr-tutorials.com/projects/a ... ital-clock

 

Revin . Precizia lasa de dorit. Grabeste foarte tare. Deja are vreo 30 de secunde avans.

 

Deci se impune un quart extern.

post-38484-139829470981_thumb.jpg

DigitalClock_h e x.txt

post-38484-139829470994_thumb.jpg

Link spre comentariu

@godFather89 . Buna dimineata ! Si eu m-am gandit la un cristal de 32.768 KHz extern . De fapt ai si anticipat ca precizia lui o sa lase de dorit . Poti sa adaugi la program acest cristal, sau trebuie refacut tot programul ? Are un avans foarte mare . De la ora 6 are cam 30 sec.

Link spre comentariu

Nu numai softul e cu bube, dar şi schema lasă de dorit.

 

1. Nu există rezistenţe de limitare a curentului pentru fiecare segment (LED) în parte din afişajul unei cifre. Din cauza asta, vei avea variaţii ale intensităţii luminoase a cifrelor. Cifrele cu mai puţine segmente aprinse, cum ar fi cifra "1" vor lumina mult mai puternic decât cifrele cu multe segmente aprinse, cum ar fi cifra "8".

 

Remediu: pune în serie cu PB0...PB6 câte o rezistenţă de câteva zeci de ohmi. Valoarea exactă a rezistenţelor depinde de tensiunea de alimentare şi de căderea de tensiune pe un LED. Calculezi cu legea lui ohm.

 

2. Singura limitare de curent este făcută cu R1, dar e făcută greşit, pentru că afectează valoarea şi stabilitatea tensiunii de alimentare a MCU-ului (MCU = Micro Controller Unit - aici, e Atmega-ul nostru).

 

Remediu: pune 7 rezistenţe ca la punctul 1, şi apoi desfiinţează R1.

 

3. Nu are condensatoare pe alimentarea MCU-ului. Condensatoarele sunt esenţiale pentru o funcţionare stabilă a circuitelor digitale, circuite în care apar comutaţii şi fronturi abrupte. Fronturile abrupte înseamnă spectru larg şi bogat în frecvenţe înalte. Dacă nu există condensatoare de filtrare pe alimentare, frecvenţele mari vor circula în afara montajului, prin firele de alimentare. Firele de alimentare se vor transforma astfel în antene de emisie şi vor genera paraziţi radio. Pun pariu că acel ceas bruiază simţitor aparatele de radio.

 

Remediu: pune un condensator electrolitic de căteva zeci de uF şi unul neelectrolitic de câteva zeci pănă la sute de nF. Ambele condensatoare le pui în paralel pe alimentarea MCU-ului, cât mai aproape de pinii acestuia.

 

4. Dacă foloseşti alte LED-uri (de exemplu altă culoare), nu se ştie dacă mai merge, şi cum va merge, pentru că LED-uri diferite au căderi de teniune diferite. Cu nişte LED-uri cu cădere mică de tensiune, s-ar putea ca POR (POR = Power On Reset - circuitul din interiorul MCU-ului care detectează valoarea tensiunii de alimentare şi dă reset automat la pornirea montajului) să reseteze aleator MCU-ul, sau să nici nu pornească.

 

Remediu: vezi remediile de la punctele anterioare.

 

5. Nu a activat pull-up resistors pe pinii cu butoanele. Din cauza asta, funcţionarea butoanelor e nesigură. De exemplu, dacă bagi montajul într-o cutie metalică, probabil că butoanele nu vor mai funcţiona.

 

Remediu: activează pull-up resistors pentru pinii PC6 şi PC7. Adică, rescrie tot codul astfel încât în loc de "SegDataPort = " să fie "SegDataPort = 0xC0|", peste tot. Se poate face asta destul de uşor, cu CTRL+H (adică Find & Replace), din editorul codului sursă.

 

6. Nu ştie să folosească type qualifier "volatile". Din cauza asta, acelaşi program va merge sau nu va merge, în funcţie de nivelul de optimizare setat în compilator.

 

Remediu: pune "volatile", cum ţi-a spus godFather89.

 

7. Vrea să facă un ceas folosind oscilatorul intern, care are variaţii mari de frecvenţă cu temperatura, cu alimentare şi de la un MCU la altul, variaţii suficient de mari cât să facă ceasul de neutilizat.

 

Remediu: oscilator cu cuarţ şi schimbat fusebits-ii, astfel încât să se folosească cuarţul.

 

 

 

Probabil mai sunt şi alte greşeli, n-am mai căutat, astea sunt doar cele care mi-au sărit în ochi.

Cine a proiectat ceasul era începător, şi la hardware, şi la software.

Link spre comentariu

Pai tot ce trebuie sa faci e sa legi un cristal de quartz de 32.768 KHz (gasesti in majoritatea ceasurilor) si sa folosesti timer-ul 2 in modul asincron.

For AVR microcontrollers with Timer/Counter Oscillator pins (TOSC1 and TOSC2), the crystal isconnected directly between the pins. No external capacitors are needed. The Oscillator is optimizedfor use with a 32.768 kHz watch crystal. Applying an external clock source to TOSC1 isnot recommended.

Vezi aici incepand cu pagina 117.LE: Despre restul, RoGeorge are dreptate. Foarte multe greseli (nu m-am uitat deloc pe schema pana acum). Ai ales probabil cel mai prost proiect de ceas de pe net...
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