Külső megszakítások

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Atesz
Tranzisztorgyógyász
Hozzászólások: 164
Csatlakozott: 2006. január 19. csütörtök, 7:00

Külső megszakítások

Hozzászólás Szerző: Atesz »

Használta már valaki a Capture utasítást?
Két impulzus között eltelt időt mérni.
Ha jól tudom a PD.6 -os lábra kell csatlakoztatni a bemenő jelet. Nekem nem működik.
Ugyan ezt szerintem meg lehet oldani akármelyik INTx lábbal. Mivel különb ha a PD.6 os ICP lábat (pint) használom?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A capture esetben a timerrel machinálsz.Elvileg a Timer fejezetben van rá minta (még nem próbáltam ki).

A sima Int esetén lefoglalod az Int lábat és az egyik timert is...
valamint 2 impulzus közötti időmérésre a Timer alapú elegánsabb...


Én is Int+Timert használok, a capture nem is jutott eszembe:).
Avatar
Atesz
Tranzisztorgyógyász
Hozzászólások: 164
Csatlakozott: 2006. január 19. csütörtök, 7:00

Hozzászólás Szerző: Atesz »

Na most értem is, meg nem is amit írtál 8O

Timer-t mindenképp kell használnom. Az meg hogy a külső jel melyik lábon jön be az megint mindegy, így is, úgy is kell hozzá egy láb.
Tegnap kipróbáltam amit írtál a megszakítások fejezetben, de az meg se nyekken. (CAPTURE) Jön a jel, a láb bemenetnek konfigurálva felhúzó ellenállásal, stb..

Config Timer1 = Timer , Prescale = 64 , Capture Edge = Falling
On Capture1 Hallmegszak

Ha jól értem a dolgot ennek , úgy kellene működnie, hogy a TIMER1 számolja az órajeleket leosztva jelen esetben 64-el, és ha jön egy lefutó él a PD.6-os lábon akkor CAPTURE beállítás miatt "heghívódik" a Hallmegszak rutin. A megszak pillanatában a TIMER1 értéke átmásolódik a Capture1-be.

A megszak nem történik. Az tuti.
Mééér? :?: Robi, van tipped?

Ha nagyon nem megy akkor inkább átteszem inkább az INT0 lábra.
Csak azért gondoltam hogy kipróbálom mert "állítólag" a PORTD.6 (MEGA32-n) azaz az ICP láb direkte erre van "kitalálva".
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Passz. Nincs most ilyet tudó tesztpanelem:(.
Elvileg ami mintaként van működnie kellene...
Avatar
Atesz
Tranzisztorgyógyász
Hozzászólások: 164
Csatlakozott: 2006. január 19. csütörtök, 7:00

Hozzászólás Szerző: Atesz »

Megcsináltam az INT1 es lábon a TIMER1 -el és jó! A Capture dolog nem tudom miért nem ment, de vannak sejtéseim, de már nem érdekel. Jó ez így az INT1 -en.
Avatar
huba
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2006. október 17. kedd, 6:00

Hozzászólás Szerző: huba »

Atmega48 -as procira irok progit és a bascomnak nem tetszik mikor a gifirnek értéket akarok adni :cry: szerintem valahogy máskép hívhatják. Az adatlaban nem találtam meg
Avatar
7kaz
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2006. szeptember 26. kedd, 6:00

Hozzászólás Szerző: 7kaz »

Atesz írta:Megcsináltam az INT1 es lábon a TIMER1 -el és jó! A Capture dolog nem tudom miért nem ment, de vannak sejtéseim, de már nem érdekel. Jó ez így az INT1 -en.
Ez engem is érdekelne! Nem másolnád be ide a kódot?
Avatar
7kaz
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2006. szeptember 26. kedd, 6:00

Hozzászólás Szerző: 7kaz »

Int1 lábon 10k-s felhúzó ellenállás, a láb bemenetként konfigolva. Ezzel a kóddal próbálkoztam, de nem reagál. A lábra 100us-os impulzusok érkeznének, próbaként. (A kvarc 14,7456 MHz-es).

Itt a kód lényegi része:

Config Timer1 = Counter , Prescale = 1 , Edge = Rising

Dim Wtime As Byte
Dim Timercounter As Word

Wtime = 50
Timercounter = 0

Do

Waitus Wtime

Timercounter = Timer1

If Timercounter > 0 Then
Print Timercounter ; " " ;
Else
End If

Loop
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Az INT-et nem kezeled ezzel a kóddal le.... :P


Config int1=....
On Int1....
Enable interruptes....
Avatar
Atesz
Tranzisztorgyógyász
Hozzászólások: 164
Csatlakozott: 2006. január 19. csütörtök, 7:00

Hozzászólás Szerző: Atesz »

7kaz !
Most nem tudom beszúrni a kódot, mert csak otthon van meg. De holnapra elhozom(ha nem felejtem el) :) Ha már nem aktuális, írj!
Üdv.
Avatar
huba
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2006. október 17. kedd, 6:00

Hozzászólás Szerző: huba »

Akkor nemtudjátok m48-on mi a gifir megfelöje? márha van . vagy hogyan lehetne kiküszöbölni s megszakítás másodszori meghívódását :?:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Az M48 adatlapban benne van... Az meg otthon:).

Illetve van egy M8-ról átállás a M48/88/168 családra c-ű doksi, abban is megvan.... (szintén otthon).



Este meglesem...
Avatar
huba
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2006. október 17. kedd, 6:00

Hozzászólás Szerző: huba »

rendben köszönöm :lol:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

http://www.atmel.com/dyn/resources/prod ... oc2553.pdf

Itt a GIFR helyett EIFR.
EIFR.0 - INT0
EIFR.1 - INT1

De:
GIFR.7 - INT1
GIFR.6 - INT0
Avatar
7kaz
Bitmanipulátor
Hozzászólások: 138
Csatlakozott: 2006. szeptember 26. kedd, 6:00

Hozzászólás Szerző: 7kaz »

Robert írta:Az INT-et nem kezeled ezzel a kóddal le.... :P


Config int1=....
On Int1....
Enable interruptes....
Bocsánatot kérek, de a fenti példaprogram kvázi megegyezik a Bascom-könyv megszakításokkal foglalkozó fejezetében szereplő, 'counter2.bas' példaprogrammal, ami ugyebár az impulzusszámlálást hivatott demonstrálni. Ott sincs szó megszakításról a mintaprogramban...

A fentiek alátámasztására kénytelen vagyok bemásolni az ottani szöveget:

Figyelj oda, hogyha a Timer0 és a Timer1 számlálót/időzítőt külső impulzusszámlálásra használod a kontroller a Tx lábat az órajellel szinkronban vizsgálja. Ez azt jelenti, hogy a számolandó impulzusok, vagy impulzusfrekvencia soha nem lehet nagyobb, mint a kontroller órajelének a fele (Nyquist törvény/diagram). Ha biztosan akarunk mérni, akkor a mérendő impulzus a processzor órajelének 40%-a alatt legyen. Azaz például, ha az órajel 4 MHz, akkor ne próbáljunk meg 1,6 MHz feletti frekvenciát mérni vele.
Próbáld ki, hogy egy TTL impulzusgenerátort kötsz a T1 lábra (PortD.5, az AT90S2313 9. lába):
counter1.bas

$regfile = "2313def.dat"
$crystal = 4000000

Config Pind.6 = Output
Config Timer1 = Counter , Edge = Falling , Prescale = 1

Stop Counter1

Set Portd.6
Waitms 1000
Reset Portd.6
Waitms 1000

Cls

Do
Counter1 = 0
Start Counter1
Waitms 25
Stop Counter1
Cls
Lcd "Counter1: " ; Counter1
Waitms 100
Loop

End
Én itt nem látok megszakítást engedélyező utasítást... :?
Válasz küldése