|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
jozzze2000 Član
Pridružen-a: Pet 25 Nov 2011 8:36 Prispevkov: 167 Aktiv.: 1.11 Kraj: Novo mesto
|
Objavljeno: Pon Sep 28, 2015 2:29 pm Naslov sporočila: Izziv za izkušene programerje |
|
|
Delam uro, ki čas prikazuje z besedami. uC je Atmega8, za RTC skrbi DS3231, prikaz je realiziran z matriko LED-diod.
Matrika ima 8 vrstic in 32 stolpcev. Prvih 16 stolpcev predstavlja zgornji del matrike, drugih 16 pa spodnji del matrike.
Vrstice krmilim z Atmego8 preko MIC2981, stolpce pa s shift registri HEF4794.
Atmega8 deluje na 12MHz z zunanjim oscilatorjem.
No, da preidem k problemu...ura deluje, občasno pa se pojavi čuden prikaz. Čuden prikaz se pojavlja naključno in je vedno enak, pojavi se približno 1x na uro.
Ima kdo kakšno idejo kako se lotit tega problema?
Opis: |
|
Velikost datoteke: |
2.53 MB |
Pogledana: |
2 krat |
|
Opis: |
|
Velikost datoteke: |
2.47 MB |
Pogledana: |
4 krat |
|
|
|
Nazaj na vrh |
|
|
jozzze2000 Član
Pridružen-a: Pet 25 Nov 2011 8:36 Prispevkov: 167 Aktiv.: 1.11 Kraj: Novo mesto
|
Objavljeno: Pon Sep 28, 2015 3:14 pm Naslov sporočila: |
|
|
Dodajam še kodo, če bo kaj v pomoč.
Opis: |
|
Download |
Ime datoteke: |
KODA_Forum.txt |
Velikost datoteke: |
10.44 KB |
Downloadano: |
40 krat |
|
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.05
|
Objavljeno: Pon Sep 28, 2015 6:51 pm Naslov sporočila: |
|
|
Napravil si čisto klasično napako.
Najprej moraš naenkrat prebrati vse registre od DS1307 in prebrane podatke shraniti v spremenljivke, nato jih pretvoriti v uporabno obliko, jih preračunati in obdelati z "if" stavki, na koncu pa dobljeno prikazati na zaslonu.
Šele, ko je izpis končan, smeš spet prebrati nove vrednosti.
Ti pa malo prebereš, malo preračunaš, malo izpišeš, spet prebereš, ..., ko se pa vsako uro nenadoma spremeni zelo veliko spremenljivk, prebereš neko mešanico in jo ustrezno izpišeš.
_________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
jozzze2000 Član
Pridružen-a: Pet 25 Nov 2011 8:36 Prispevkov: 167 Aktiv.: 1.11 Kraj: Novo mesto
|
Objavljeno: Pon Sep 28, 2015 8:36 pm Naslov sporočila: |
|
|
Ne vem, če popolnoma razumem, kaj si mislil s tem.
DS preberem v kosu oz. bolj točno, prebiram stanje sekund, ko se le te spremenijo, preberem še ostale vrednosti DS in jih sproti shranjujem v spremenljivke.
Edino kar se vmes dogaja je interupt rutina, ki skrbi za izpisovanje "displeja". Te rutine ne morem ustavljati med branjem, ker potem prihaja do utripanja "displeja"...
|
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.05
|
Objavljeno: Pon Sep 28, 2015 10:34 pm Naslov sporočila: |
|
|
DS1307Read(a, &data); // prebere samo byte a in ga shrani v data
Ali obstaja ukaz, ki v enem koraku prebere n bytov, brati začne pri bytu a in sproti shranjuje v spremenljivke, začenši s spremenljivko b?
Nekaj podobnega
DS1307Read(a, n, &b); // izmišljena sintaksa
n podatkov je potem na naslovih b, b+1, b+2, ..., b+n-1
Stvar je namreč v tem, da se vsakič, ko kličeš branje ds, vrednosti v njegovih registrih zaklenejo. Če prebereš samo en byte, se lahko vrednost naslednjega byta do naslednjega branja že spremeni. Zato se take stvari vedno bere vse naenkrat, ali pa zaznavaš vrednosti 59 sekund, 59 minut, 23 ur, ... in aktiviraš neko zastavico (nek bit neke spremenljivke postaviš na 1), da je potrebno naslednjič prebrati več bytov naenkrat (ko je prebrano, gre tisti bit na 0 do naslednjič).
_________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
jozzze2000 Član
Pridružen-a: Pet 25 Nov 2011 8:36 Prispevkov: 167 Aktiv.: 1.11 Kraj: Novo mesto
|
Objavljeno: Pet Okt 16, 2015 9:10 pm Naslov sporočila: |
|
|
Zdaj berem vse podatke naenkrat, čudni znaki se ne pojavijo več.
Imam pa drug problem...DS3231 prehiteva za cca. 2s na minuto.
Če vezje odklopim iz napajanja, tako da DS3231 napaja baterija in po 10minutah vklopim napajanje, ura kaže točno.
Kaj bi ga lahko motilo?
|
|
Nazaj na vrh |
|
|
bray Član
Pridružen-a: Sre 19 Jan 2005 23:53 Prispevkov: 325 Aktiv.: 1.46 Kraj: Vransko
|
Objavljeno: Pet Okt 16, 2015 9:38 pm Naslov sporočila: |
|
|
Preveč pogosto bereš RTC registre. Rešitev je programski RTC in sinhronizacija recimo enkrat dnevno ali vsakih par ur.
_________________ I didn't know it was impossible when I did it! |
|
Nazaj na vrh |
|
|
twom Član
Pridružen-a: Ned 26 Okt 2003 0:37 Prispevkov: 868 Aktiv.: 3.90 Kraj: Ljubljana
|
Objavljeno: Sob Okt 17, 2015 10:47 am Naslov sporočila: |
|
|
Verjetno motnje na napajanju, zna biti baterija veliko bolj čista napetost, sploh pri kakšnih zelo izrazitih špicah. V takih primerih je npr lažje iz 12V na 3.3 z uporovnim delilnikom... Branje registrov nebi smelo vplivati na natančnost ure.
|
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.05
|
Objavljeno: Ned Okt 18, 2015 12:08 pm Naslov sporočila: |
|
|
Uporovni delilnik pa naredi takole:
+)-------[upor1]------(x1)----[ledzelena]------[ledzelena]------(GND
Iz točke x1 pa odcep:
(x1)------[upor2]-----(x2)----[upor3]----(GND
Iz točke x2 pa odcep za napajanje RTC čipa. In še kak 100nF keramični kondi in 10uF elektrolit daj vzporedno k njegovima napajalnima nožicama.
Upore sam izračunaj glede na razpoložljivo +) napetost, potrebno napetost za RTC in napetosti zelenih ledic pri 5 mA toka (glej datasheet) in 1 mA toka skozi upor2 in upor3. Ledice so stabilnejše od zenerc.
_________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
jozzze2000 Član
Pridružen-a: Pet 25 Nov 2011 8:36 Prispevkov: 167 Aktiv.: 1.11 Kraj: Novo mesto
|
Objavljeno: Ned Okt 18, 2015 12:12 pm Naslov sporočila: |
|
|
Hmm, zanimivo...vsak dan zveš kaj novega, vsekakor sprobam in poročam.
Hvala.
|
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 69 dni
Powered by phpBB © 2001, 2005 phpBB Group
|