Sari la conținut
ELFORUM - Forumul electronistilor

Ceas simplu cu Atmega 8 - ajutor, va rog !


Postări Recomandate

Lasa "Dta:" asa cum este.

Corect:

Data &H77 , &H4C , &H45 , &H27 , &H85 , &HA4 , &H57 , &H04 , &H07 , &H14, &HFF

In loc de:

Portb = &H0F

Scrie:

Portb = &H00

Inlocuieste asta:

Y = X - 1 ' считаем какую конкретно цифру, из 4х нужно сейчас зажечьReset Portb.y ' зажигаем нужную цифру под номером игрик

Cu asta:

Y = X - 1 ' считаем какую конкретно цифру, из 4х нужно сейчас зажечьSet Portb.y ' зажигаем нужную цифру под номером игрик
Link spre comentariu

Punctul zecimal este PD2 si il setezi/resetezi la fiecare secunda.

Set Portd.2If Dotx = 0 Then Reset Portd.2 Else Set Portd.2

Desi am revazut setul de date pentru formarea cifrelor nu mi-au aparut erori (cu exceptia a doua cifre 6 si 9, pe care le-am corectat).

Este posibil ca PD5 sa fie setat ca intrare, desi nu pare.

Incearca si urmatoarea varianta:

Data &H77 , &H4C , &H45 , &H27 , &H85 , &HA6 , &H57 , &H04 , &H07 , &H14, &HFF
Link spre comentariu

Am "activat" si liniile :

Dim Dotx as Integer

Dotx = _sec mod 2

Acum se aprinde DP, dar la TOTI digitii ! In continuare segmentul A nu se aprinde.

 

Acesta este ultima versiune completa de cod  (poate ajuta o privire de ansamblu):

' CKOPT,BOOTSZ1,BOOTSZ0,SUT1,SUT0,CKSEL3,CKSEL1,CKSEL0$regfile = "m8def.dat" '$crystal = 8000000Config Portb = Output ,Config Portd = Output ,Config Pinc.3 = InputPortc.5 = 1Portc.4 = 1Dim I As Byte , X As Byte , Y As Byte , Temp As Integer , Bn(10) As Byte , Cifra(5) As IntegerDim Dotx as IntegerRestore DtaFor I = 1 To 10Read Bn(i)Next 'Config Clock = Soft_sec = 0 : _min = 0 : _hour = 0Config Timer0 = Timer , Prescale = 8Config Timer1 = Counter , Edge = Falling , Prescale = 1On Timer0 PulseEnable InterruptsEnable Timer0Config Debounce = 30DoDebounce Pinc.4 , 0 , Minute , SubDebounce Pinc.5 , 0 , Ore , SubTemp = _hour * 100Temp = Temp + _minFor I = 1 To 4Cifra(i) = Temp Mod 10If Cifra(i) = 0 ThenCifra(i) = 10Goto TEnd IfTemp = Temp - Cifra(i)T:Temp = Temp / 10NextDotx = _sec mod 2LoopEndPulse:Incr XPortb = &B00000000Portd = Bn (Cifra(x))Set Portd.2If Dotx = 0 Then Reset Portd.2 Else Set Portd.2Y = X - 1Set Portb.yIf X = 4 Then X = 0ReturnDta:Data &H77 , &H4C , &H45 , &H27 , &H85 , &H84 , &H57 , &H04 , &H05 , &H14, &HFFMinute:Incr _minIf _min = 60 Then_min = 00Incr _hourEnd IfIf _hour > 23 Then _hour = 00_sec = 00ReturnOre:Incr _hourIf _hour > 23 Then _hour = 00Return
Link spre comentariu

Dezactiveaza Timer1, asa:

'Config Timer1 = Counter , Edge = Falling , Prescale = 1

si vei avea si segmentul A .

 

Codul de mai jos l-am testat:

$regfile = "m8def.dat" '$crystal = 8000000Config Portb = Output ,Config Portd = Output ,Config Pinc.3 = InputPortc.5 = 1Portc.4 = 1Dim I As Byte , X As Byte , Y As Byte , Temp As Integer , Bn(10) As Byte , Cifra(5) As IntegerDim Dotx as IntegerRestore DtaFor I = 1 To 10Read Bn(i)Next 'Config Clock = Soft_sec = 0 : _min = 0 : _hour = 0Config Timer0 = Timer , Prescale = 8'Config Timer1 = Counter , Edge = Falling , Prescale = 1On Timer0 PulseEnable InterruptsEnable Timer0Config Debounce = 30DoDebounce Pinc.4 , 0 , Minute , SubDebounce Pinc.5 , 0 , Ore , SubTemp = _hour * 100Temp = Temp + _minFor I = 1 To 4Cifra(i) = Temp Mod 10If Cifra(i) = 0 ThenCifra(i) = 10Goto TEnd IfTemp = Temp - Cifra(i)T:Temp = Temp / 10NextDotx = _sec mod 2LoopEndPulse:Incr XPortb = &B00000000Portd = Bn (Cifra(x))Set Portd.2If Dotx = 0 Then Reset Portd.2 Else Set Portd.2Y = X - 1Set Portb.yIf X = 4 Then X = 0ReturnDta:'Data &H77 , &H4C , &H45 , &H27 , &H85 , &H84 , &H57 , &H04 , &H05 , &H14, &HFFData &H77 , &H4C , &H45 , &H27 , &H85 , &HA6 , &H57 , &H04 , &H07 , &H14, &HFFMinute:Incr _minIf _min = 60 Then_min = 00Incr _hourEnd IfIf _hour > 23 Then _hour = 00_sec = 00ReturnOre:Incr _hourIf _hour > 23 Then _hour = 00Return

si in atasament fisierul hex.

ceas_ac.txt

Link spre comentariu

Pentru mine e noua aceasta abordare inclusiv cu "citirea" tactului:

$regfile = "m8def.dat"$crystal = 1000000 'Internal RC$hwstack = 64$swstack = 64$framesize = 64'RTCConfig Clock = Soft , Gosub = Sectic

 

si am presupus ca setarea se face pe 1Mhz intern iar tactul pentru ceas il da oricum oscilatorul extern, la Atmega 16 parca am vazut o aplicatie cu doua oscilatoare externe si daca nu ma insel are o functie interna separata pentru ceas, vorbesc din memorie si scriu rapid, posibil sa ma insel....

 

 

L.E era raspuns pentru "rata" de la postul #36

Editat de nickrvl
Link spre comentariu

Dacă ora împărţită la zece e zero, nu o mai afişezi.

 

am presupus ca setarea se face pe 1Mhz intern iar tactul pentru ceas il da oricum oscilatorul extern, la Atmega 16 parca am vazut o aplicatie cu doua oscilatoare externe si daca nu ma insel are o functie interna separata pentru ceas, vorbesc din memorie si scriu rapid, posibil sa ma insel....

Sigur, dacă foloseşti cuarţul de 32,768kHz doar pentru timerul care generează secundele, poţi folosi oricare alt semnal de ceas pentru aplicaţie. Am crezut că vrei să faci un ceas exclusiv cu oscilatorul intern.

Link spre comentariu

Inteleg, deci pot seta Mc-ul pe oscilator intern pentru "altele" (1Mhz sa zicem) si sa-i atasez oscilator extern de 32,768khz pe care implicit Mc-ul il va folosi la numaratul secundelor prin comenzile:

Config Clock = Soft , Gosub = Sectic

in cazul Bascom-ului, corect?

 

Alte intrebari;

- Atmega16 e mai specializat in acest caz decit Atmega8? are alte facilitati hard/soft in cea ce priveste ceasul sau eventual Data?sau am citit/retinut eu gresit....

- Cit tine o baterie de 9V (sa zicem) pe un ceas facut cu Atmega8 si afisaj cu leduri de 4 digiti? ma bazez pe cei ce au facut astfel de ceasuri si care au capatat astfel experienta in timpul in care le-au utilizat, adica e fezabil un astfel de proiect judecind strict din punct de vedere al consumului si doar pe baterie (nu cu alimentare de la retea)? sau intr-o luna ma lasa bateria....., stiu ca se poate calcula/aproxima insa o experienta impartasita valoreaza mult.

- Si nu in ultimul rind, cit de precise sint? daca il reglez odata la 6 luni ar fi ok insa daca sint nevoit sa-l reglez in fiecare luna nu prea ar fi convenabil, din punctul meu de vedere....

Link spre comentariu

Alătură-te conversației

Poți posta acum și să te înregistrezi mai târziu. Dacă ai un cont, autentifică-te acum pentru a posta cu contul tău.
Notă: Postarea ta va necesita aprobare moderator înainte de a fi vizibilă.

Vizitator
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Răspunde la acest subiect...

×   Alipit ca text avansat.   Restituie formatare

  Doar 75 emoji sunt permise.

×   Linkul tău a fost încorporat automat.   Afișează ca link în schimb

×   Conținutul tău precedent a fost resetat.   Curăță editor

×   Nu poți lipi imagini direct. Încarcă sau inserează imagini din URL.

×
×
  • 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