nico_2010 Postat Ianuarie 6, 2016 Partajează Postat Ianuarie 6, 2016 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
fratello Postat Ianuarie 6, 2016 Autor Partajează Postat Ianuarie 6, 2016 (editat) Pana aici e bine ... Desi nu este afisat segmentul A, dar poate este o eroare din Proteus (?!) ... Mai trebuie "activat" punctul pentru secunde si "dezactivat" zero la zecile de ore. Editat Ianuarie 6, 2016 de fratello Link spre comentariu
nickrvl Postat Ianuarie 6, 2016 Partajează Postat Ianuarie 6, 2016 Pentru aceste aplicatii Mc-ul se seteaza pe oscilator intern? Link spre comentariu
nico_2010 Postat Ianuarie 7, 2016 Partajează Postat Ianuarie 7, 2016 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
fratello Postat Ianuarie 7, 2016 Autor Partajează Postat Ianuarie 7, 2016 ...mai rau ; cifra 6 este eronata ! Am schimbat displayul in simulare, dar nu influenteaza. Link spre comentariu
ratza Postat Ianuarie 7, 2016 Partajează Postat Ianuarie 7, 2016 Pentru aceste aplicatii Mc-ul se seteaza pe oscilator intern? NU! Oscilatorul ăla intern e un RC penibil, frecvenţa fluctuează în draci. Link spre comentariu
fratello Postat Ianuarie 7, 2016 Autor Partajează Postat Ianuarie 7, 2016 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
nico_2010 Postat Ianuarie 7, 2016 Partajează Postat Ianuarie 7, 2016 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
fratello Postat Ianuarie 7, 2016 Autor Partajează Postat Ianuarie 7, 2016 Super ! Mii de multumiri ! Intr-adevar acum se aprind corect toate segmentele. Poate rezolvati cumva si problema DP ? Se aprind toate cele 4 ... Link spre comentariu
ratza Postat Ianuarie 7, 2016 Partajează Postat Ianuarie 7, 2016 DP trebuie afişat odată cu digitul care-l conţine. Adică mai pui un if cu care verifici numărul digitului. Link spre comentariu
nico_2010 Postat Ianuarie 7, 2016 Partajează Postat Ianuarie 7, 2016 Cred, dar nu sunt sigur, ca asa: Pulse:Portb = &B00000000Incr XPortd = Bn (Cifra(x))Set Portd.2Y = X - 1Set Portb.yIf Dotx = 0 AND Portb.2 = 1 Then Reset Portd.2 Else Set Portd.2If X = 4 Then X = 0 Link spre comentariu
nickrvl Postat Ianuarie 7, 2016 Partajează Postat Ianuarie 7, 2016 (editat) 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 Ianuarie 7, 2016 de nickrvl Link spre comentariu
fratello Postat Ianuarie 7, 2016 Autor Partajează Postat Ianuarie 7, 2016 Asa merge corect punctul : Pulse:Incr XPortb = &B00000000Portd = Bn (Cifra(x))Set Portd.2Y = X - 1Set Portb.yIf Dotx = 0 AND Portb.2 = 1 Then Reset Portd.2 Else Set Portd.2If X = 4 Then X = 0Return Mai ramane de "sters" zero-ul zecilor de ore.Probabil tot ceva de genul "If Temp<>0 Then ...?". Link spre comentariu
ratza Postat Ianuarie 7, 2016 Partajează Postat Ianuarie 7, 2016 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
nickrvl Postat Ianuarie 7, 2016 Partajează Postat Ianuarie 7, 2016 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum