Sari la conținut
ELFORUM - Forumul electronistilor

Ceas simplu cu Atmega 8 - ajutor, va rog !


fratello

Postări Recomandate

"hour" nu exista (doar _hour) ... "==" nu exista (doar =)

DigitOra = oprit l-am "tradus" prin :

Temp = _hour * 100if temp < 900 then portb.3 = 0

Dar fara niciun rezultat !

Link spre comentariu

de ce nu incerci ce a zis ratza adica in cazul tau

if _hour/10=0 then portb.3 := 0    

ce limbaj e ? verificare si atribuirea nu pot fi ambele "="

ce ai incercat tu ...

temp ce fel de variabila este ? suporta valoarea 900 ? sau e out of range ?

Link spre comentariu

$^%$^##@% !!!

Am rezolvat-o !

Pulse:Incr XPortb = &B00000000Portd = Bn (Cifra(x))Set Portd.2Y = X - 1Set Portb.yif _hour > 0 and _hour < 10 then portb.3 = 0If Dotx = 0 AND Portb.2 = 1 Then Reset Portd.2 Else Set Portd.2If X = 4 Then X = 0Return

Nu gaseam unde trebuie pusa comanda !

Acum totul este OK ! Multumesc pentru sfaturi, indrumari si atentie !

post-175951-0-49131300-1452283426_thumb.jpg

Link spre comentariu

Revin ...dupa realizarea fizica a montajului : comanda mentionata mai sus (de stingere a digitului 1) introduce un flickering suparator al segmentelor "g" ale tuturor digitilor :( !

Am incercat sa mut comanda in alte locuri din program ...dar fara succes !

Daca cineva mai are vreo idee .....

Multumesc !

Link spre comentariu

OK !

$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 = &H00Portd = Bn (Cifra(x))Set Portd.2Y = X - 1Set Portb.yIf Dotx = 0 AND Portb.2 = 1 Then Reset Portd.2 Else Set Portd.2'if _hour > 0 and _hour < 10 then reset portb.3     'sterge "0" pt zecile de ore, dar introduce flickering !If X = 4 Then X = 0ReturnDta:Data &H77 , &H4C , &H45 , &H27 , &H85 , &H84 , &H57 , &H04 , &H05 , &H14, &HFF , &H00Minute:Incr _minIf _min = 60 Then_min = 00_sec = 00End If'If _hour > 23 Then _hour = 00_sec = 00ReturnOre:Incr _hourIf _hour > 23 Then _hour = 0Return
Editat de fratello
Link spre comentariu

Tot "sapand" am gasit, tot la prietenii rusi, versiunea pentru ambele tipuri de display (pt. catod comun sunt comentate liniile de cod corespunzatoare).

Am introdus doar linia : if Cifra = 0 then reset portb.3

Nu stiu daca linia : ' Config Timer1 = Counter , Edge = Falling , Prescale = 1 trebuie pastrata sau dezactivata.Am programat un Atmega 8 cu ea dezactivata. Deocamdata merge perfect ceasul. II urmaresc precizia si va tin la curent.

Numai bine !

Postez codul, arhivat.

clock_final.zip

Link spre comentariu

Multumesc... dar nu am chiar niciun merit.

Desi, cum am spus, ceasul merge foarte bine, "Nu stiu daca linia : ' Config Timer1 = Counter , Edge = Falling , Prescale = 1 trebuie pastrata sau dezactivata".

In codul original este "activa"...

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