|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
linel Član
Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.91 Kraj: prekmurje
|
Objavljeno: Pet Nov 29, 2013 12:55 pm Naslov sporočila: |
|
|
Da nebom nove teme odpiral, bom kar tukaj vprašal, in sicer.
Imam težave z samodejnim resetiranjem mikrokontrolerja (atmega8) naključno med delovanjem. Gre pa se pa za semafor rezultata za namizni tenis, ko z tipkami povečujem pač vrednosti (rezultat) se naključno zgodi da vrednosti samodejno postavi na 0 (brez da bi pritisnil tipko za reset rezultata, na pin reset mikrokontrolerja pa je povezan 10K upor na Vcc in pa kondenzator 100nf na gnd.
kaj je temu vzrok? |
|
Nazaj na vrh |
|
|
mujo Član
Pridružen-a: Ned 02 Jan 2005 19:24 Prispevkov: 722 Aktiv.: 3.24 Kraj: MB
|
Objavljeno: Pet Nov 29, 2013 1:23 pm Naslov sporočila: |
|
|
Kako daleč imaš postavljen upor od reset linije?
V kolikor je upor na reset povezavo preveč daleč se lahko na tej liniji kaj inducira in sproži reset. |
|
Nazaj na vrh |
|
|
linel Član
Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.91 Kraj: prekmurje
|
Objavljeno: Pet Nov 29, 2013 1:30 pm Naslov sporočila: |
|
|
kondezatorja in upora nisem narisal ko sem načrtoval vezje, tako da sem kondenzator in upor prispajkal direkt na pine na mikrokontrolerju (spodnja stran vezja) |
|
Nazaj na vrh |
|
|
VolkD Član
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 63.82 Kraj: Divača (Kačiče)
|
Objavljeno: Pet Nov 29, 2013 1:33 pm Naslov sporočila: |
|
|
linel je napisal/a: |
Da nebom nove teme odpiral, bom kar tukaj vprašal, in sicer. |
Bom pa jaz. _________________ Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo. |
|
Nazaj na vrh |
|
|
zok Član
Pridružen-a: Pet 02 Jan 2009 23:59 Prispevkov: 1115 Aktiv.: 5.98 Kraj: Ponikva
|
Objavljeno: Pet Nov 29, 2013 2:34 pm Naslov sporočila: |
|
|
Kaj pa napajanje?
Je semafor napajan iz iste veje kot AtMega (5 V za stabilizatorjem)? |
|
Nazaj na vrh |
|
|
lojzek Član
Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3356 Aktiv.: 16.97
|
Objavljeno: Pet Nov 29, 2013 2:42 pm Naslov sporočila: |
|
|
Ali si gotov, da se resnično resetira.... Da nimaš kaj narobe v programu in ti vrednosti program postavi na 0?
Če bi to rad preveril, čisto na začetek programa dodaj eno ali dve vrstici, ki ti za nekaj časa prižgeta npr. eno lučko... Pa pazi, da se bo to res lahko izvedlo samo enkrat...
Pa še to. ni nujno, da imaš samo ta fizični reset na pinu Mege. Imaš lahko tudi Brown Out Reset, Watchdog Reset,.. |
|
Nazaj na vrh |
|
|
mucek Član
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5337 Aktiv.: 24.72 Kraj: Domzale
|
Objavljeno: Pet Nov 29, 2013 2:52 pm Naslov sporočila: |
|
|
Je program prav napisan - da ne skačeš v kakšne subrutine in potem nazaj iz subrutin z Goto? (hint: stack)
Je napajanje stabilno? Zna biti, da ti pri vklopu displayev napajanje (lahko le za trenutek) pade pod dovoljeno (imaš omogočen brown out detection?) in se ti procesor resetira.
LP, g _________________ ...lahko pa se tudi motim ... |
|
Nazaj na vrh |
|
|
linel Član
Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.91 Kraj: prekmurje
|
Objavljeno: Pet Nov 29, 2013 2:59 pm Naslov sporočila: |
|
|
napajanje imam iz istega usmernika, enkrat uporabljen l7805 za napajanje mikrokontrolerja in lm317 za napajanje 7 segmentnih prikazovalnikov 8,4V.
nevem kaj bi imel v programu narobe, ker se to zgodi naključno ( npr rezultat 7 :13 ; 21: 18 ; 7:5..., vedno pa ob pritisku na katerokoli tipko (tipka prištevanje ali odštevanje) če ne pritiskam je stabilno in nikoli ne pade rezultat na 0 oz. resetne. |
|
Nazaj na vrh |
|
|
KrEn Član
Pridružen-a: Pon 14 Sep 2009 8:55 Prispevkov: 180 Aktiv.: 1.01 Kraj: LJ
|
Objavljeno: Pet Nov 29, 2013 3:20 pm Naslov sporočila: Napajanje |
|
|
Vse skupaj nakazuje lahko na več problemov:
Če uporabljaš watch dog:
ali slučajno presežeš v kaki rutini čas?
Kot je ze bilo omenjeno BROWN OUT:
če ga uporabljaš nastavi ustrezno napetost.
Čim blizje napajalnim pinov prispajkaj 100 nF blokirni kondenzator.
AVR-ji omgoočajo, da po resetu ugotoviš vzrok reseta ( reset, watch dog, brown out..)
Lahko pa izkoristiš EEPROM za zapisovanje vrednosti. S tem, da imaš omejitev zapisovanja ( 100000 x).
Ali pa vrednost zapišeš v ram. Kot zanimivost povem, da se vrednost rama ob resetu ne resetira.
Recimo v ramu uporabiš 4 byte, v katere potem zapišeš isto vrednost. Nato pa ob resetu primerjaš vrednost in če je enaka, jo izpišeš, ce pa se razlikuje pa jo postaviš na nič in začneš od zacetka.
lp
KrEn |
|
Nazaj na vrh |
|
|
gumby Član
Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 19.66
|
Objavljeno: Pet Nov 29, 2013 4:44 pm Naslov sporočila: |
|
|
Za začetek se prepričaj, če se mega res resetira ali se kaj drugega zgodi. Pa vzrok reseta najdi (imaš register za to). _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
|
linel Član
Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.91 Kraj: prekmurje
|
Objavljeno: Pet Nov 29, 2013 6:58 pm Naslov sporočila: |
|
|
watch dog ne uporabljam, brown out je bil sicer nastavljen na 2,7V potem sem ga popolnoma izključil. kondenzator 100nF sem prispajkal med pin Vcc in gnd. vendar nič ni bolje.
kako pa pogledam v register reseta? ( po datasheetu sem pogledal in je to register 0x000 ali?
program sem sicer napisal v bascomu. |
|
Nazaj na vrh |
|
|
Vlado Član
Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 561 Aktiv.: 2.52 Kraj: Ljubljana
|
Objavljeno: Pet Nov 29, 2013 7:15 pm Naslov sporočila: |
|
|
Kaj pa stack, ali si ga definiral v programu ali pa velja privzeta vrednost?
Bilo bi lažje če bi pripel program in shemo.
Ali uporabljaš prekinitve?
Kako krmiliš displej?
Razlogov za to kar se dogaja je lahko več.
LP |
|
Nazaj na vrh |
|
|
mucek Član
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5337 Aktiv.: 24.72 Kraj: Domzale
|
Objavljeno: Pet Nov 29, 2013 7:48 pm Naslov sporočila: |
|
|
Bolj kot berem, bolj se mi zdi, da si ti nekaj zašuštral v programu in ti stack zatava neznano kam ... (no, znano - na višja mesta, kjer so spremenljivke)
Prilepi glavni del kode (main), odkoder skačeš v podprograme, da vidimo ... Pa še javi, kolikokrat v programu uporabiš "Goto", "Gosub" in "Return".
LP, g _________________ ...lahko pa se tudi motim ... |
|
Nazaj na vrh |
|
|
linel Član
Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.91 Kraj: prekmurje
|
Objavljeno: Pet Nov 29, 2013 7:54 pm Naslov sporočila: |
|
|
krmiljenje displejev je z tranzistorji, to deluje vredu.
prilagam celoten program:
Koda: |
$regfile = "m8def.dat"
$crystal = 12000000
Dim I As Word
Dim J As Byte
Dim K As Byte
Dim L As Byte
Dim S As String * 16
Config Portd = Output
Config Portb = Output
Config Debounce = 30
I = 0 'začetna vrednost spremenljivke I
J = 0 ' začetna vrednost spremenljivke J
Dim Eni1 As Word
Dim Des1 As Word
Dim Des As Word
Dim Eni As Word
Const Timer0reload = 54
Config Timer0 = Timer , Prescale = 1024
Load Timer0 , Timer0reload
On Ovf0 Timer0_isr
Enable Ovf0
Start Timer0
Enable Interrupts
'****************************** GLAVNI PROGRAM ****************************************************
Do
Config Pinc.5 = Input
If Pinc.5 = 1 Then
I = 0
J = 0
End If
Tipka1 Alias Pinc.0
Tipka2 Alias Pinc.1
Config Pinc.0 = Input
Config Pinc.1 = Input
Debounce Tipka1 , 1 , Dodaj
Debounce Tipka2 , 1 , Dodaj
Goto Preskok2
Dodaj:
If Pinc.0 = 1 Then
Incr I
End If
If Pinc.1 = 1 Then
Decr I
End If
Preskok2:
'*****************************
Tipka3 Alias Pinc.2
Tipka4 Alias Pinc.3
Config Pinc.2 = Input
Config Pinc.3 = Input
Debounce Tipka3 , 1 , Dodaj1
Debounce Tipka4 , 1 , Dodaj1
Goto Preskok3
Dodaj1:
If Pinc.2 = 1 Then
Incr J
End If
If Pinc.3 = 1 Then
Decr J
End If
Preskok3:
Loop
'************************ PREKINITVENA RUTINA****************************************************
Timer0_isr:
Load Timer0 , Timer0reload
Eni = I Mod 10
Des = I Mod 100
Des = Des / 10
Eni1 = J Mod 10
Des1 = J Mod 100
Des1 = Des1 / 10
Incr K
If K > 3 Then K = 0
Portd = Lookup(i , Stevilke)
Portb = 0
If K = 0 Then
Set Portb.3
Portd = Lookup(des1 , Stevilke)
End If
If K = 1 Then
Set Portb.2
Portd = Lookup(eni1 , Stevilke)
End If
If K = 2 Then
Set Portb.1
Portd = Lookup(des , Stevilke)
End If
If K = 3 Then
Set Portb.0
Portd = Lookup(eni , Stevilke)
End If
Return
'***************************TABELA VREDNOSTI ŠTEVILK ZA SEGMENTE*****************************************
Stevilke:
' 0 1 2 3 4 5 6 7
Data &H3F , &H06 , &H5B , &H4F , &H66 , &H6D , &H7C , &H07 , &H7F , &H67
|
|
|
Nazaj na vrh |
|
|
mucek Član
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5337 Aktiv.: 24.72 Kraj: Domzale
|
Objavljeno: Pet Nov 29, 2013 8:01 pm Naslov sporočila: |
|
|
Ok, ne si več glave razbijat, problem je v programu ...
Daj mi 10 minut ... (in eno pivo potem ... )
LP, g _________________ ...lahko pa se tudi motim ... |
|
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: 74 dni
Powered by phpBB © 2001, 2005 phpBB Group
|