Svetelektro.com

Svetelektro.com

Meno:
Heslo:
SVETELEKTRO • Preru┼íenie ATmega644p - Bascom

Prerušenie ATmega644p - Bascom

Moderátori: psichac, Moderátori

Prerušenie ATmega644p - Bascom

Odosla┼ąod marosh555 » 28 Mar 2012, 16:11

Zdravom Vas, zacinam sa ucit programovat AVR v jazyku Bascom avsak mam problem s jednym programom. Chcel som si na nom vyskusat prerusenie ale nefunguje to tak ako som si predstavoval :). V skratke ma ist o to ze pomocou jedneho tlacitka si prepinam dva programy pre ovladanie LED co mi ako tak funguje. Dalsie tlacitko som pouzil pre funkciu prerusenia a to mi uz nechodi a malo by to fungovat tak ze po prichode vzostupnej hrany na INT0 program skoci na podprogram P a rozsvieti niektore LED na porte B. Vedel by mi niekto pomoct kde robim chybu? Viem ze je tam kopec veci ktore by sa dali spravit jednoduhsie ale ucim sa :) Dakujem Vam a prikladam program

K├│d: Vybra┼ą v┼íetko
'Kni┼żnica pre v├Żber MCU
'Nastavenie frekvencie na 8MHz
$regfile = "m644def.dat"
$crystal = 8000000

'Deklar├ícia portu B ako v├Żstupu
'Deklarácia portu A ako vstupu
'Nastavenie prerušenia INT0 tak aby reagoval na vzostupnú hranu
Config Portb = Output
Config Porta = Input
Config Int0 = Falling

'Pri aktivácii prerušenia sa presuń na program PR
'Povolenie prerušenia INT0
'Povolenie V┼íetk├Żch preru┼íen├ş
On Int0 P
Enable Int0
Enable Interrupts

'Deklarácia premennej A ako byte
Dim A As Byte

'Nastavenie premennej A na hodnotu H00
'Nastavenie portu B na hodnotu HFF
'Nastavenie portu A na hodnotu HFF, tzn aktivácia pull-up rezistorov
A = &H00
Portb = &HFF
Porta = &HFF

'Pomenovanie PA0 na TL1
Tl1 Alias Pina.1

'Spustenie Hlavn├ęho programu P0, ktor├Ż be┼ż├ş v nekone─Źnej slu─Źke
P0:
Do

'Po stla─Źen├ş TL1 sa presu┼ł na program P2
If Tl1 = 0 Then
Gosub P1
End If

'Pri hodnote premennej A = 2, tzn po vykonan├ş programu P1, a stla─Źen├ş TL1 sa presu┼ł na program P2
'Po─Źkaj 250ms, kv├┤li odstr├íneniu prekmitov na TL1
If Tl1 = 0 And A = 2 Then
Gosub P2
End If

Waitms 250

Loop

'Program 1: Do premennej A zap├ş┼í hodnotu 2 a n├ísledne po┼íli na port B hodnotu H00, po─Źkaj 2s a po┼íli na port B hodnotu HFF a znova ─Źakaj 2s a n├ísledne sa vr├í┼ą do programu P0
P1:
A = 2

Portb = &H00
Wait 2
Portb = &HFF
Wait 2

Return

'Program 2: Do premennej A zap├ş┼í hodnotu 1 a n├ísledne posielaj na jednotliv├ę piny portu B logick├ę ├║rov┼łe pod─ża zadania(vytvorenie sveteln├ęho hada), pri─Źom po ka┼żdom
'odoslan├ş hodnoty po─Źkaj 1s. Nakoniec sa vr├í┼ą do programu P0
P2:
A = 1

Portb = &B00000001
Wait 1
Portb = &B00000010
Wait 1
Portb = &B00000100
Wait 1
Portb = &B00001000
Wait 1
Portb = &B00010000
Wait 1
Portb = &B00100000
Wait 1
Portb = &B01000000
Wait 1
Portb = &B10000000
Wait 1
Portb = &B01000000
Wait 1
Portb = &B00100000
Wait 1
Portb = &B00010000
Wait 1
Portb = &B00001000
Wait 1
Portb = &B00000100
Wait 1
Portb = &B00000010
Wait 1
Portb = &B00000001
Wait 1
Portb = &HFF

Return

'Program prerušenia
P:
Portb = &H55
Waitms 500

Return

End
marosh555
Obr├ízok pou┼ż├şvate─ża
St├íly ─Źlen
St├íly ─Źlen
Pr├şspevky: 243
Vek: 29.67
Zalo┼żen├Ż: 15.07.2007
Bydlisko: ┼Żilina
Karma: 1

Re: Prerušenie ATmega644p - Bascom

Odosla┼ąod jenda23 » 28 Mar 2012, 16:39

asi zapom├şn├í┼í povolit glob├íln├ş p┼Öeru┼íen├ş a p┼Öeru┼íen├ş INT0

tak┼że inicializace bude vypadat takhle n─Ťjak

port pro INT0=input
port pro int0=1

config INT0= falling
on int0 prerus

enable int0
enable interrupts

do
nop
loop

prerus:

waitms 20

toggle port pro LED

return

end



třeba takhle...
Lokomotiva je jako ┼żena.Je jich stovky typ┼» a ka┼żdej z nich je jinej,ka┼żd├í z nich je sv├Żm zp┼»sobem kr├ísn├í.Kdy┼ż j├ş chce┼í aspo┼ł trochu poznat jsou to stovky hodin ─Źasu.Nejde s n├ş b├Żt ani┼ż bys j├ş bezmezn─Ť miloval,je nemo┼żn├Ż j├ş zn├ít do posledn├ş skulinky
jenda23
Obr├ízok pou┼ż├şvate─ża
Ultimate ─Źlen
Ultimate ─Źlen
Pr├şspevky: 5419
Vek: 29.24
Zalo┼żen├Ż: 27.06.2008
Bydlisko: Česká Třebová
Paragraf: 23
Karma: 62

Re: Prerušenie ATmega644p - Bascom

Odosla┼ąod smotek7 » 28 Mar 2012, 17:27

Tu inicializaciu tam ma.
Nepozeral som to detajlne, ale nema byt ten program prerusenia az za end ?
Nemus├şm vede┼ą v├íhu elektr├│nu ak chcem zasp├íjkova┼ą tranzistor.
smotek7
Pokro─Źil├Ż ─Źlen
Pokro─Źil├Ż ─Źlen
Pr├şspevky: 521
Vek: 40.16
Zalo┼żen├Ż: 08.08.2011
Bydlisko: PN
Karma: 4

Re: Prerušenie ATmega644p - Bascom

Odosla┼ąod jenda23 » 28 Mar 2012, 17:33

jo pardon má bejt
Lokomotiva je jako ┼żena.Je jich stovky typ┼» a ka┼żdej z nich je jinej,ka┼żd├í z nich je sv├Żm zp┼»sobem kr├ísn├í.Kdy┼ż j├ş chce┼í aspo┼ł trochu poznat jsou to stovky hodin ─Źasu.Nejde s n├ş b├Żt ani┼ż bys j├ş bezmezn─Ť miloval,je nemo┼żn├Ż j├ş zn├ít do posledn├ş skulinky
jenda23
Obr├ízok pou┼ż├şvate─ża
Ultimate ─Źlen
Ultimate ─Źlen
Pr├şspevky: 5419
Vek: 29.24
Zalo┼żen├Ż: 27.06.2008
Bydlisko: Česká Třebová
Paragraf: 23
Karma: 62

Re: Prerušenie ATmega644p - Bascom

Odosla┼ąod marosh555 » 28 Mar 2012, 20:26

Vsimol som si to u viacerych prikladov ale ci dam end nakoniec alebo pred program prerusenia tak vysledok je ten isty
marosh555
Obr├ízok pou┼ż├şvate─ża
St├íly ─Źlen
St├íly ─Źlen
Pr├şspevky: 243
Vek: 29.67
Zalo┼żen├Ż: 15.07.2007
Bydlisko: ┼Żilina
Karma: 1

Re: Prerušenie ATmega644p - Bascom

Odosla┼ąod jenda23 » 28 Mar 2012, 20:30

m├í┼í na pinu pull up, ve skute─Źnosti? A nevidim deklarovan├Ż sub programy a m├í┼í to cel├Ż divn─Ť zapasan├Ż pro─Ź uv├íd├ş┼í hlavn├ş program do nekone─Źnej smy─Źky kdy┼ż do/loop je nekone─Źn├í smy─Źka? A nikde nevidim ukon─Źenou smy─Źku P0...
Lokomotiva je jako ┼żena.Je jich stovky typ┼» a ka┼żdej z nich je jinej,ka┼żd├í z nich je sv├Żm zp┼»sobem kr├ísn├í.Kdy┼ż j├ş chce┼í aspo┼ł trochu poznat jsou to stovky hodin ─Źasu.Nejde s n├ş b├Żt ani┼ż bys j├ş bezmezn─Ť miloval,je nemo┼żn├Ż j├ş zn├ít do posledn├ş skulinky
jenda23
Obr├ízok pou┼ż├şvate─ża
Ultimate ─Źlen
Ultimate ─Źlen
Pr├şspevky: 5419
Vek: 29.24
Zalo┼żen├Ż: 27.06.2008
Bydlisko: Česká Třebová
Paragraf: 23
Karma: 62

Re: Prerušenie ATmega644p - Bascom

Odosla┼ąod marosh555 » 28 Mar 2012, 20:38

pull-up tam je urcite a ako som pisal na tych programoch sa postupne ucim, v podstate tento program dookola upravujem a skusam nove prikazy a podobne takze nad tym ako je to napisane a preco je to tak sa nepozastavujte, pisal som hned v uvode ze viem o tom ze sa to da urcite spravit lepsie, prehladnejsie ale to nieje podstatou problemu. Ide mi len o to prerusenie, ten program nebude nikdy na nic konkretne pouzity :). Kazdopadne Vam ale dakujem za postrehy a cas :)
marosh555
Obr├ízok pou┼ż├şvate─ża
St├íly ─Źlen
St├íly ─Źlen
Pr├şspevky: 243
Vek: 29.67
Zalo┼żen├Ż: 15.07.2007
Bydlisko: ┼Żilina
Karma: 1

Re: Prerušenie ATmega644p - Bascom

Odosla┼ąod popopepe » 28 Mar 2012, 20:50

No, ┼Öekl bych, ┼że tam ten intern├ş pull-up nem├í┼í.

Tady je spr├ívn├í posloupnost, pokud to nechce┼í ┼Öe┼íit p┼Ö├şmo pomoc├ş registr┼»...

'INPUTS
test_button alias PINB.3
config test_button = input
portb.3 = 1 'turn on the pullup

nejd┼Ö├şv alias
potom input
a nakonec na n─Ťm nastavit jedni─Źku, ─Ź├şm┼ż se zapne ten pull-up. Jinak to moc nefunguje...

U OUTPUT je to jedno, tam ┼ż├ídn├Ż pull up nen├ş.
pozor na rozd├şl PINX a PORTX.
popopepe
Obr├ízok pou┼ż├şvate─ża
St├íly ─Źlen
St├íly ─Źlen
Pr├şspevky: 392
Zalo┼żen├Ż: 22.06.2009
Karma: 4

Re: Prerušenie ATmega644p - Bascom

Odosla┼ąod marosh555 » 28 Mar 2012, 21:02

Pull-up tam urcite je, teda log.1 ktoru si dokazem odmerat co som aj spravil no moze byt naozaj problem v tej postupnosti a vtedy ked tam ma byt tam nieje. Zajtra v praci skusim to ako si napisal a dam vediet, ak by ale este niekoho neico napadlo tak sem s tym :) Dakujem
marosh555
Obr├ízok pou┼ż├şvate─ża
St├íly ─Źlen
St├íly ─Źlen
Pr├şspevky: 243
Vek: 29.67
Zalo┼żen├Ż: 15.07.2007
Bydlisko: ┼Żilina
Karma: 1

Re: Prerušenie ATmega644p - Bascom

Odosla┼ąod popopepe » 28 Mar 2012, 21:17

Ot├ízka je, co tam vlastn─Ť nam─Ť┼Ö├ş┼í :-)
Pokud si nejsi jist├Ż, tak tam prdni extern├ş odpor 10k k plusu, a je to :-)
popopepe
Obr├ízok pou┼ż├şvate─ża
St├íly ─Źlen
St├íly ─Źlen
Pr├şspevky: 392
Zalo┼żen├Ż: 22.06.2009
Karma: 4

Re: Prerušenie ATmega644p - Bascom

Odosla┼ąod marosh555 » 29 Mar 2012, 07:10

No podla mna by tam mala byt log.1, aspon doteraz som bol v tom ze to je pull-up a ak hovorim spravne tak ta tam skutocne je. Ten priklad vyssie som akurat skusal no vysledok je rovnaky. Vytvoril som si aj kratsi a jednoduhsi program ktory tiez nefunguje ale je aspon prehladnejsi a skor sa v nom vyznate ta pomozete mi najst v nom chybu

PS: Problem je vyrieseny, ja hlupak som si nevsimol ze na PA0 nieje INT0 ale PCINT0 takze cely problem bol len v tom ze som posielal prerusenie na iny port ako som mal. Dakujem Vam aj tak vsetkym za Vas cas a ochotu

K├│d: Vybra┼ą v┼íetko
$regfile = "m644def.dat"
$crystal = 8000000

Tl1 Alias Pina.0
Tl2 Alias Pina.1

Config Tl1 = Input
Config Tl2 = Input
Config Portb = Output
Config Int0 = Falling

Porta.0 = 1
Porta.1 = 1
Portb = &HFF

Enable Interrupts
On Int0 P1
Enable Int0

Do
Portb = &H00
Wait 2
Portb = &HFF
Wait 2
Loop

End

P1:
Portb = &H55
Wait 5
Portb = &H00
Wait 5

Return
marosh555
Obr├ízok pou┼ż├şvate─ża
St├íly ─Źlen
St├íly ─Źlen
Pr├şspevky: 243
Vek: 29.67
Zalo┼żen├Ż: 15.07.2007
Bydlisko: ┼Żilina
Karma: 1

Re: Prerušenie ATmega644p - Bascom

Odosla┼ąod smotek7 » 29 Mar 2012, 09:51

Hardverovo to mas ok ?
kam pripajas to tlacitko ? na 16 alebo 40
(PCINT26/RXD1/INT0) PD2 alebo PA0 (ADC0/PCINT0)
Nemus├şm vede┼ą v├íhu elektr├│nu ak chcem zasp├íjkova┼ą tranzistor.
smotek7
Pokro─Źil├Ż ─Źlen
Pokro─Źil├Ż ─Źlen
Pr├şspevky: 521
Vek: 40.16
Zalo┼żen├Ż: 08.08.2011
Bydlisko: PN
Karma: 4

Re: Prerušenie ATmega644p - Bascom

Odosla┼ąod marosh555 » 29 Mar 2012, 10:27

Ano HW je ok ale problem uz je vyrieseny, vid vyssie
marosh555
Obr├ízok pou┼ż├şvate─ża
St├íly ─Źlen
St├íly ─Źlen
Pr├şspevky: 243
Vek: 29.67
Zalo┼żen├Ż: 15.07.2007
Bydlisko: ┼Żilina
Karma: 1

Re: Prerušenie ATmega644p - Bascom

Odosla┼ąod zdeno33 » 23 Apr 2012, 17:16

byva dobrym zvykem napisat, co ten program dela jak se jmenuje

$regfile = "m644def.dat"
$crystal = 8000000
dale je nutne definovat prostredi
$hwstack=40
$swstack=16
$framesize=32

Tl1 Alias Pina.0
Tl2 Alias Pina.1

Config Tl1 = Input
Config Tl2 = Input
Config Portb = Output

konfigurace preruseni je celkem klicova, proto je nutne to davat dohromady
Config Int0 = Falling
On Int0 P1 Nosave
Enable Int0

Config Debounce = 5 'delay cas na tlacitka

Porta.0 = 1
Porta.1 = 1
Portb = &HFF
Enable Interrupts 'povoleni globalniho preruseni MUSI byt az jako posledni instrukce v inicializaci
'-----------------------------------------------------
Do
'tlacitka maji svoji knihovnu a je to funkce
Debounce Pinb.0 , 0 , Stop1 , Sub 'priklad, podivej se do HELP

Portb = &H00
Wait 2 'wait neopouzivat, lepsi je waitms nebo waitus
Portb = &HFF
Wait 2
Loop

End

P1:
'tohle preruseni je uplne spatne a to se dela jinak.
Portb = &H55
Wait 5
Portb = &H00
Wait 5

Return
nikdy ne┼Ö├şkej, ┼że to nejde,
ur─Źite se najde blbec, kter├Ż to dok├í┼że.
zdeno33
Obr├ízok pou┼ż├şvate─ża
Okoloid├║ci
Okoloid├║ci
Pr├şspevky: 32
Vek: 64.03
Zalo┼żen├Ż: 05.04.2012
Bydlisko: Varin
Karma: 0


Nasp├Ą┼ą na Bascom

Kto je pr├ştomn├Ż

U┼ż├şvatelia prezeraj├║ci si toto f├│rum: ┼Żiadny registrovan├Ż pou┼ż├şvate─ż a 1 hos┼ą.

Forums ©
Autor str├ínky je Ondrej Z├ívodsk├Ż(zawin), o graficky design sa star├í ─Żubo┼í Fabo(BUFU).

TOPlist

Powered by Copyright © UNITED-NUKE CMS. All Rights Reserved.
─îas potrebn├Ż k spracovaniu str├ínky 0.55 sek├║nd