www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

ATmega8 - težave
Pojdi na stran 1, 2, 3  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.91
Kraj: prekmurje

PrispevekObjavljeno: Pet Nov 29, 2013 12:55 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mujo
Član
Član



Pridružen-a: Ned 02 Jan 2005 19:24
Prispevkov: 722
Aktiv.: 3.25
Kraj: MB

PrispevekObjavljeno: Pet Nov 29, 2013 1:23 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.91
Kraj: prekmurje

PrispevekObjavljeno: Pet Nov 29, 2013 1:30 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
VolkD
Član
Član



Pridružen-a: Pet 24 Sep 2004 21:58
Prispevkov: 14228
Aktiv.: 64.07
Kraj: Divača (Kačiče)

PrispevekObjavljeno: Pet Nov 29, 2013 1:33 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
zok
Član
Član



Pridružen-a: Pet 02 Jan 2009 23:59
Prispevkov: 1115
Aktiv.: 6.01
Kraj: Ponikva

PrispevekObjavljeno: Pet Nov 29, 2013 2:34 pm    Naslov sporočila:   Odgovori s citatom

Kaj pa napajanje?

Je semafor napajan iz iste veje kot AtMega (5 V za stabilizatorjem)?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
lojzek
Član
Član



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3352
Aktiv.: 17.02

PrispevekObjavljeno: Pet Nov 29, 2013 2:42 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5327
Aktiv.: 24.78
Kraj: Domzale

PrispevekObjavljeno: Pet Nov 29, 2013 2:52 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.91
Kraj: prekmurje

PrispevekObjavljeno: Pet Nov 29, 2013 2:59 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
KrEn
Član
Član



Pridružen-a: Pon 14 Sep 2009 8:55
Prispevkov: 180
Aktiv.: 1.02
Kraj: LJ

PrispevekObjavljeno: Pet Nov 29, 2013 3:20 pm    Naslov sporočila:  Napajanje Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Pet Nov 29, 2013 4:44 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.91
Kraj: prekmurje

PrispevekObjavljeno: Pet Nov 29, 2013 6:58 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Član
Član



Pridružen-a: Sre 03 Mar 2004 21:35
Prispevkov: 561
Aktiv.: 2.53
Kraj: Ljubljana

PrispevekObjavljeno: Pet Nov 29, 2013 7:15 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5327
Aktiv.: 24.78
Kraj: Domzale

PrispevekObjavljeno: Pet Nov 29, 2013 7:48 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
linel
Član
Član



Pridružen-a: Čet 06 Mar 2008 21:14
Prispevkov: 178
Aktiv.: 0.91
Kraj: prekmurje

PrispevekObjavljeno: Pet Nov 29, 2013 7:54 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5327
Aktiv.: 24.78
Kraj: Domzale

PrispevekObjavljeno: Pet Nov 29, 2013 8:01 pm    Naslov sporočila:   Odgovori s citatom

Ok, ne si več glave razbijat, problem je v programu ...
Daj mi 10 minut ... (in eno pivo potem ... Smile )

LP, g

_________________
...lahko pa se tudi motim ...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2, 3  Naslednja
Stran 1 od 3

 
Pojdi na:  
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: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group