 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
mucek Član


 
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5529 Aktiv.: 24.06 Kraj: Domzale
|
Objavljeno: Tor Maj 27, 2008 11:43 am Naslov sporočila: Eksterni interrupt - problem |
|
|
LP!
V aplikaciji uporabljam eksterne interrupte, ki sicer lepo delujejo, ampak...
Včasih se zgodi, da int pin NI sklenjen na maso, kontroler pa še vedno izvaja program iz interrupta (kot bi bil interrupt pogoj prisoten). Program je zagotovo ok, zadeva pa dogaja naključno (večinoma ne, sem in tja pa).
Int pin imem vezan kot standardni input pin; torej 10k pull-up proti VCC in sklenitev pina preko 560 na maso (kot interrupt). Predvidevam, da z vezavo ni nič narobe? Ali pač?
LP, Grega |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.46 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Tor Maj 27, 2008 12:57 pm Naslov sporočila: |
|
|
Nisem ekspert, ampak en 100nF na int pinu in en velik elektrolit na napajanju so meni rešili podobne težave. |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Tor Maj 27, 2008 1:16 pm Naslov sporočila: |
|
|
INT pin je vhod, zato ga ni potrebno stikati na maso preko 560 ohmskega upora. Ta upor prepreči, da bi vhod potegnilo povsem na maso, pa če pride kje v vezju do šumov/glitchev, se lahko zgodi, da bo vhod še na višji napetosti, pa bo sprožilo INT. Šume in podobno odpravijo blok kondenzatorji (več kosov) v napajanju vezja in v samem vezju. Kakšen blok kondenzator mora biti na napajanju tik ob samem mikrokontrolerju.
Možno je tudi, da imaš kakšno napako v programu...
Jur |
|
Nazaj na vrh |
|
 |
matjazkariz Član


Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.33
|
Objavljeno: Tor Maj 27, 2008 1:29 pm Naslov sporočila: |
|
|
Ja, definitivno odstrani 560 ohm upor. Ampak to ne bo rešilo tvojih problemov saj praviš, da se interrupti dogajajo tudi, ko ne skleneš vhoda na GND. Če imaš dovolj blok kondenzatorjev, je razlog gotovo v kakšnem bugu. Lahko je hardverski (preglej errato) ali (bolj verjetno) softverski. Če imaš debugger in osciloskop , postavi breakpoint v interruptu za rutino prižiga testne ledike, osciloskop pa priključi na to lediko in na napajanje. Če je napajanje v času tik pred prižigom led OK, potem imaš softverski bug.
Srečno. _________________ LP, Matjaž |
|
Nazaj na vrh |
|
 |
mucek Član


 
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5529 Aktiv.: 24.06 Kraj: Domzale
|
Objavljeno: Tor Maj 27, 2008 3:20 pm Naslov sporočila: |
|
|
LP!
Hvala za par uporabnih namigov!
Napajanje je rešeno zadovoljivo (blokirano vsepovsod (100n), dovolj elkotov za stabilizacijo napetosti, skratka osciloskop na samem procesorju kaže povsem lepo enosmerno napetost. Tudi sam sem sumil najprej SW, vendar sem napako takorekoč odpisal po testiranju vezja na sledečem programu:
Koda: |
'Sem napisal na pamet, mogoče kaj bistvenega manjka, ampak pri testu je delalo vse ... Skratka, še preveč (neki fiktivni interrupti ... ) :)
enable interrupts
enable int0
enable int1
enable int7
On int0 gosub Program1
On int1 gosub Program2
On int7 gosub Program3
Do
'bilokaj - pač program - ni uporabljenih drugih interruptov razen za UART buffer
Print "Sem v loopu"
Wait 1
Loop
Program1:
Print "Podprogram1 preko int0"
Waitms 100
Return
Program2:
Print "Podprogram2 preko int1"
Waitms 100
Return
Program3:
Print "Podprogram3 preko int7"
Waitms 100
Return
|
No, upor bom vsekakor najprej odstranil, a imam občutek, da ni samo to. Meril sem int0 pin z osciloskopom in ko pride do pojava (da je interrupt triggan) se na samem vhodu električno nič ne zgodi?! Poskusil bom še z drugim procesorjem (M128-), ampak ...
LP, Grega |
|
Nazaj na vrh |
|
 |
Vlado Član

Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 563 Aktiv.: 2.38 Kraj: Ljubljana
|
Objavljeno: Tor Maj 27, 2008 7:48 pm Naslov sporočila: eksterni interrupt- problem |
|
|
Grega, bilo bi njaboljše če bi pripel originalni del kode kjer imaš nastavitve.
Kako imaš nastavljen Config Intx (iz primera se ne vidi)?
Kaj pa HW Stack, kolikšno vrednost imaš nastavljeno glede na to da imaš nekaj prekinitev?
Vlado |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Tor Maj 27, 2008 10:41 pm Naslov sporočila: |
|
|
Mucek, MCUji ne zaznavajo trenutnih pojavov, ampak delujejo sinhrono (s svojo uro) in rabijo za "dojemanje" dolocenih stvari koncno kolicino casa, ki je lahko precej daljsa kot prehodni pojav. Zato je cisto mozno, da dolocenih pojavov, ki bi v teoriji - brez upostevanja datasheeta - morali zadostovati, povzrocili dolocen dogodek, v resnici ga pa ne. Se dodaten problem je v tem, da se vedno niti ne obnasajo znotraj meja, specificiranih v datasheetu, ceprav bolj redko (vsaj preizkuseni 7-bitniki, ce ze novejse "zivalce" ne).
Tisti mali pulld-down upor pa vsekakor nima tam kaj iskati; vhode CMOS vezij se veze na eno stanje, da ne plavajo po svoje (pull-up oz. pull-down), to pa je tudi vse; ko pride do preklopa stanja, hoces *kar najmanjso* upornost med potencialom, na katerega preklapljas, in pinom - torej brez tega dodatnega upora, samo s pull-upom ! _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
mucek Član


 
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5529 Aktiv.: 24.06 Kraj: Domzale
|
Objavljeno: Sre Maj 28, 2008 10:44 am Naslov sporočila: |
|
|
LP!
Pulz za proženje je dolg 100ms (+-20ms), tako da je dolžina zadostna.
Trenutno sem imel nastavljen interrupt na LOW LEVEL, poskusil bom še s FALLING. Kot zastopim, se v tem primeru generira interrupt le enkrat. Upora že ni več. Problem je, ker se pogoj ustvari, čeprav ga ni ...
HW stack imam nastavljen na 128, kar se mi zdi dovolj, ga bom pa še povečal, čeprav dvomim, da bo zajec v tem grmu.
LP, Grega |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Sre Maj 28, 2008 1:24 pm Naslov sporočila: |
|
|
Ehm stack... Zelo pogosta napaka. Če imaš stack overflow, potem nima smisla da stack povečuješ. Potreboval boš še več časa, da najdeš napako.
Mimogrede: ali se iz interrupta vrneš pravilno (return from interrupt, ne navaden return)?
Jur |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.32
|
Objavljeno: Sre Maj 28, 2008 1:37 pm Naslov sporočila: |
|
|
Ja potem pa ni čudno, da se ti interupti dogajajo, če imaš naštimano na level namesto na edge. Sploh, če je stanje, ki je potrebno za proženje zelo dolgo. Takoj ko boš pobrisal zastavico, da si prekinitev obdelal, se bo spet začela izvajati prekinitvena rutina. Sedaj pa lahko nastopi problem, če imaš recimo prekinitev v prekinitveni rutini in premalo stacka. |
|
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: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|