Sari la conținut
ELFORUM - Forumul electronistilor

Ceas simplu cu Atmega 8 - ajutor, va rog !


fratello

Postări Recomandate

Nu mai pot modifica postul ulterior...., nu am facut un ceas vreodata ca sa pot da sfaturi concrete insa am vazut prin alte scheme trimer pus pe quart pentru reglaj fin, pentru a elimina abaterile.

Link spre comentariu

Multumesc !

...minutele (dar si orele) se setau foarte greu, schimbarea acestora fiind foarte rapida.

Am introdus asta in program :

   If Min_key = 0 Then      Incr _min      wait 1      scnd = 0

Este OK ?

Link spre comentariu

OK !

.....

Gata ! L-am pus la treaba ...voi urmari precizia.

Am folosit :

   If Min_key = 0 Then         scnd = 0      Incr _min      waitms 500      If _min > 59 Then _min = 0      Call Wait4key   End If

Totusi .. o nelamurire : de ce trebuie sa "numere" pana la 64 ?!  Se ""pierde" undeva din durata secundei ?

Editat de fratello
Link spre comentariu

Acum merg la "origini", nu ar fi fost mai simplu sa faci putina galagie la cei de la Dolce sa primesti un receptor cu ceas? Au venit si la mine cu  unul fara ceas dar am facut putin pe prostul si pana la urma au adus un receptor cu ceas si chiar arata destul de bine noul model. Ai ales un drum destul de complicat, oricum, succes. :aplauze

Link spre comentariu

@Dan57: esti off-topic. Urmatoarea postare off-topic va fi stearsa.

Userul are placerea de a construi ceva. Banuiesc ca nu ii este asa de greu sa cumpere unul, dar care ar mai fi placerea de a mesteri ceva cu mana lui?

Link spre comentariu

OK !

.....

Gata ! L-am pus la treaba ...voi urmari precizia.

Am folosit :

   If Min_key = 0 Then         scnd = 0      Incr _min      waitms 500      If _min > 59 Then _min = 0      Call Wait4key   End If

Totusi .. o nelamurire : de ce trebuie sa "numere" pana la 64 ?!  Se ""pierde" undeva din durata secundei ?

32768 / 512 = 64

Adică fix o secundă.

Link spre comentariu

Userul are placerea de a construi ceva. Banuiesc ca nu ii este asa de greu sa cumpere unul, dar care ar mai fi placerea de a mesteri ceva cu mana lui?

Exact !

...

Am ramas impresionat cat de usor se poate face un ceas cu un Atmega : http://www.avrprojects.net/index.php?option=com_content&view=article&id=41:real-time-clock-atmega16&catid=14&Itemid=148

Nu zic ca nu se poate si in PicBasicPro, de exemplu (http://www.picbasic.co.uk/forum/content.php?r=254-Working-clock-example-using-32K-watch-crystal).

Dar, cel putin in ceea ce priveste afisarea pe un display cu 7 segmente, multiplexat, BASCOM imi pare a fi SUPER !

Link spre comentariu

Pana acum, de ieri de la orele 15, zero secunde abatere ! Sunt foarte incantat !

Nu pot folosi decat o data butonul de "Multumesc", asa ca multumesc in acest mod tuturor celor care m-au ajutat !

Nota : nu am folosit condensatorii interni ai Atmega , ci doi condensatori sortati de 22pF.

Link spre comentariu

Daca tot am luat-o pe calea Atmel/Bascom ...

In acest post (http://www.elforum.info/topic/42035-bascom/?p=420353) am gasit si softul pentru schema din primul meu post (http://www.tehnari.ru/f170/t61589/), care este insa pentru afisoare cu catod comun !

Am incercat sa-l modific pentru anod comun :

Portb = &H0F  siData &H77 , &H4C , &H45 , &H27 , &H85 , &H84 , &H57 , &H04 , &H05 , &H14, &HFF

dar nu-mi apare nimic pe display.

Si mai are doua neajunsuri acest soft : nu afiseaza secundele (desi PD2 este conectat la DP) si afiseza "0" inaintea orelor.

Ce ziceti ? Putem sa-l modificam, astfel incat in acest topic sa avem mai multe variante de ceas bazate pe aceasta simpla schema cu Atmega 8 ?

Va multumesc, din nou, anticipat !

' Пример часов которые отображают часы и минуты на семисегментном' четырехсимвольном светодиодном индикаторе' прога для ознакомления, работает 100%' выставленные фюзы (в понипроге стоят галки на):CKOPT,BOOTSZ1,BOOTSZ0,SUT1,SUT0,CKSEL3,CKSEL1,CKSEL0' Кварц выдрал из маленького тетриса с часами, думаю также подойдет из любых кварцевых наручных/настенных часов'насчет точности - терпения больше 2х дней не хватило, идут точно, секунда в секунду.'e-mail [email protected]$regfile = "m8def.dat" ' мега8$crystal = 8000000Config Portb = Output , Portd = Output ,Config Pinc.3 = Input 'конфигурируем порты на выходPortc.5 = 1Portc.4 = 1Dim I As Byte , X As Byte , Y As Byte , Temp As Integer , Bn(10) As Byte , Cifri(5) As Integer 'задаем всякие переменные и масивы ''Dotx As IntegerRestore Dta ' говорим из какой таблици нужно заносить данные в масивFor I = 1 To 10 ' начало циклаRead Bn(i) ' поочериде заносим ячейки из таблици в масивNext ' конец циклаConfig Clock = Soft ' конфигурируем совтовые часы_sec = 0 : _min = 0 : _hour = 0 ' задаем конкретные значения времени, с которого часы будут начинать считать при включении питанияConfig Timer0 = Timer , Prescale = 8 ' конфигурируем таймер 0 чтоб потом на него повесить алгоритм отображения цифрConfig Timer1 = Counter , Edge = Falling , Prescale = 1 ' конфигурируем таймер 1 на подсчет импульсов на кварце, припаянного к Xtal1 Xtal2 на 32768 гц БЕЗ КОНДЕРОВ!On Timer0 Pulse ' назначаем подпрограмму, которая будет запускатся по переполнению 1го таймераEnable Interrupts 'разрешаем прерыванияEnable Timer0Config Debounce = 30 'разрешаем таймер0' начало основного циклаDoDebounce Pinc.4 , 0 , Minuti , SubDebounce Pinc.5 , 0 , Chasi , SubTemp = _hour * 100 ' "складываем" часы с минутами так чтобы получилось 4хзначное число тоесть 8часов+59мин = 859Temp = Temp + _minFor I = 1 To 4 ' цикл разбиения склеенных часов с минутами на цифры и занесения каждой в таблицу масиваCifri(i) = Temp Mod 10 ' берем последнюю цифру (9)If Cifri(i) = 0 Then 'Cifri(i) = 10 'Goto T 'End If 'Temp = Temp - Cifri(i) ' вычитаем из часов/минут последнюю цифру 859-9=850T: 'Temp = Temp / 10 ' отбрасываем последний ноль 859/10=85Next 'возвращаемся к началу цикла и заносим следующюю цифру в масив' Dotx = _sec Mod 2Loop 'конец основного циклаEnd ''Pulse: ' подпрограмма прерываний таймера0'If Pinc.3 = 0 Then'ElseIncr X ' увеличиваем х на единицу, для выбора нужных цифр из таблици'Portb = &HFF ' гасим индикаторPortb = &H0F ' AICI AM MODIFICAT EUPortd = Bn(cifri(x))Set Portd.2'If Dotx = 0 Then Reset Portd.2 Else Set Portd.2 ' подаем на индикатор цифру из масива Bn с номером cifri(x)Y = X - 1 ' считаем какую конкретно цифру, из 4х нужно сейчас зажечьReset Portb.y ' зажигаем нужную цифру под номером игрикIf X = 4 Then X = 0 ' обнуляем х при достижении его величины 4'End IfReturn' возвращаемся на место откуда прервали программуDta: ' таблица с данными о цифрах зажигает по порядку : 1234567890'Data &H88 , &HB3 , &HBA , &HD8 , &H7A , &H7B , &HA8 , &HFB , &HFA , &HEB 'Data &H77 , &H4C , &H45 , &H27 , &H85 , &H84 , &H57 , &H04 , &H05 , &H14, &HFF ' SI AICI AM MODIFICAT EUMinuti:Incr _minIf _min = 60 Then_min = 00Incr _hourEnd IfIf _hour > 23 Then _hour = 00_sec = 00Return'Chasi:Incr _hourIf _hour > 23 Then _hour = 00Return 

Colegul yo9hnf avea dreptate : nu sunt afisate corect cifrele ! Asa arata "10:10"

post-175951-0-01235900-1452083273_thumb.jpg

Editat de fratello
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