Atmega128 INT0-INT7

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
broland
Tranzisztorgyógyász
Hozzászólások: 152
Csatlakozott: 2009. április 20. hétfő, 6:00

Atmega128 INT0-INT7

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

Sziasztok
Lelkes amatőrként szeretnék érdeklődni: egy 7 csatornás rc vevő minden csatornájának magas jelszintjének hosszára lennék kiváncsi. 20ms periódus idő, 1-2ms magas jelszint. Erre lenne jó az INT0-INT7 láb??
Előre is köszi

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

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

INT-l a változást (mikor magas, mikor alacsonyba ugrik) figyeled.
A belső időzítő (timer) meg az időz számolja hozzá.


Azért ne ez legyen az első projekted :)
Avatar
broland
Tranzisztorgyógyász
Hozzászólások: 152
Csatlakozott: 2009. április 20. hétfő, 6:00

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

Köszi Robert
Nem ez lesz :), de ezt is kellett tudnom ahhoz, hogy ez legyen a kiválasztott chips.
Üdv Roland
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Szerintem ez a chip megfelel hozzá.
Avatar
broland
Tranzisztorgyógyász
Hozzászólások: 152
Csatlakozott: 2009. április 20. hétfő, 6:00

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

na hát csak elértem idáig :(

ez a kód miért nem jó?

Kód: Egész kijelölése

$regfile = "m8515.dat"                                      ' specify the used micro
$crystal = 8000000                                          ' used crystal frequency

Config Portd.3 = Input                                      'vevő bemenet

'INT1=>PD3 (PIN 13)

'LCD
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2
Config Lcd = 16 * 4


Declare Sub Servo1_in

Config Int1 = Rising
Config Timer1 = Timer , Prescale = 1
On Int1 Servo1_in
Enable Interrupts
Enable Int1
Enable Timer1

'főprogram
Do

Cls
Locate 2 , 1
Lcd Timer1
Waitms 5

Loop
End

Sub Servo1_in:
 Timer1 = 0
 Start Timer1
 Do

  If Pind.3 = 0 Then
   Stop Timer1
   Enable Int1
   Return
  End If

 Loop

End Sub
amikor a chips resetel, a bot állásától függően megkapom a jó értéket, de hiába mozgatom, nem változik semmit.

valamit igen benéztem, vagy az alap mérési 5letem nem jó.

előre is köszi a segítséget.

Üdv Roland
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

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

Én mint másik lelkes amatőr is hasonló gondal küszködtem és nekem sem sikerült használható időt mérnem az int + timer kombinációval infra jelnél, de a megszakítások résznél találtam egy Timer capture módot és az egyből megszakít + mér. egy lépésben. Azóta nekem megy minden. A mega128 adatlapján is írják gondolom ott is megy.

- Valamint PC szkópon meg tudod nézni a jelet hogy mit kelene kapnod.
- szerintem nem olvastad ki a timer értékét a megszakítási rutinban
- a megszakítási rutin én még nem látam sub eljárásban
- kárleálítani a megszakítást "stop Timer" mert úgyis leáll az összes ha bármely megszakítás fut, elég csak a timert módosítani
stb stb

ajánlanám a Bascom könyv megszakítások részt szépek a példák

Szerintem. :)
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

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

- Ja megszakításba nem szoktak végtelenített ciklust tenni.
Avatar
broland
Tranzisztorgyógyász
Hozzászólások: 152
Csatlakozott: 2009. április 20. hétfő, 6:00

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

Sziasztok

Köszönöm az észrevételeket, de lenne még kérdésem:

az int0=rising az annyit tesz, hogy ha van egy felfutó jelem, akkor a programot megszakítja? tehát, hiába magas a port értéke, a rutint meghívja, és ha az pl 4us ideig tart majd ott a return, akkor szépen visszakocog a meghívás helyére, és a program onnan fut tovább, hiába magas 2ms a port értéke. ez így van?
a timer1 capture módban nem láttam, hogy ezt bármely lábra át lehetne konfigurálni. mintaprogramokban az icp bemenetet használja, de nekem az int0-int7 kellene.

szivok rendesen :):):):):)

üdv Roland
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 Timer capture csak a T0, T1, t2 (Vagy ICP) lábakon lehet.
INT rising ezt jelenti. A L->H atmenet inditja, okmindegy mennyi ideig van utana magas szinten....


Ha INTen van a bemenet, akkor:
Config int1= rising
on int1 szamol
do
nop
loop

szamol:
incr valtozo
return


Az INT be es kilepes ideje kb. 25-25 orajel plusz a szamolas (~4)
Ha a chip 16 MHz-n jar, akkor 16/54 = ~ 290 kHz jelet szamolhatsz, de ekkor a foprogram nem csinal semmt (nincs ideje).

Mekkora frekit kell szamolni?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Borland írta: „szívok rendesen”

Nem csodálom!
Ha a megszakítás rutint Sub rutinnak hozod létre! Látszik, hogy nem vagy tisztában melyiket mikor kel alkalmazni, és mi a különbség a 2 között?
Szerintem LED villogtatásnál kellene kezdeni a programozás tanulást! Nem a megszakításnál.
Mert Te is úgy jársz, mint már jó páran itt előtted! Beletörik a bicskád és a sorozatos sikertelenségtől, elmegy a kedved az egésztől!

Szerintem, ami feltétlen kel tanuláshoz, teszteléshez, hibakereséshez:
1.: Próba panel. Amin megépíthetsz különböző teszt áramköröket!
Vannak rajta huzalozható nyomógombok, LEDek,
soros és USB illesztő ez nagyon fontos a hibakereséshez. Mert látni kel, hogy hol hibázik a program! Esetleg LCD kijelző.
2.: Gyakorlás, kísérletezés, tanulás, türelem!
3.: Előbb próbapanelon fejleszteni és csak utána gyártani a kész nyákot!

Most hirtelen ennyi jutott eszembe. De esetleg lehet folytatni!
8)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Bocsi! 2* ment! :oops:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

AVR-Duino+ Ext1 panel :)

Van rajta INT, Timer, LCD, soros kommunikáció, buszrendszerek :)


De egy sima M8-ban is sokminden van. E mellé 2 nyomógomb (INT lábra, ill a ICP-re), LED, csipogó. Valamint soros kommunikációhoz illesztő (MAX232, Mobiltel adatkábel :) USBre). Illetve egy programozó felület (ISP, STK200-zal). A belső 1 MHz elég sokmindenre, így a biztosítékbitek maradhatnak....
Avatar
broland
Tranzisztorgyógyász
Hozzászólások: 152
Csatlakozott: 2009. április 20. hétfő, 6:00

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

Sziasztok
Igen tudom, hogy nem INT-el kell kezdeni egy programozás tanulást, de:
a gombot megnyomom kiirja gomb,16x4-es lcd kezelés megvan, servojel előállítása megfelelő formában(1-2ms, 20ms ismétlődés) megvan. De ez a bemenet dolog ez nem megy.

Kód: Egész kijelölése

szamol:
incr valtozo
return
ez ha jól értem annyit csinál, hogy megméri 2 felfutó él között az időt. ezzel frekvenciát tudnék mérni, de nekem nem arra van szükségem, hanem arra, hogy mennyi ideig van magas szinten adott láb.
Én így gondoltam: INT0 rising-re meghív egy rutin, ami elindítja a timer1-et, és figyeli, hogy magas e a port szintje, ez max 2-3ms lehet a főprogramot nem zavarja. Ha már nem magas a szintje, akkor az eltelt idővel, vagy számolt értékkel vissza a főprogramba. (ezért volt loop a megszakításban :):)) Ilyet tud a pulsein, de ha jól értelmeztem, az nem annyira pontos.
Na ez eddig nem jött össze :(, és a google-ban sem találtam jó megoldást.
Próbálkozok, és nem adom fel, csak rendkívül nehezen közelítem szerintem meg.

Köszi addig is.

Üdv Roland
Avatar
broland
Tranzisztorgyógyász
Hozzászólások: 152
Csatlakozott: 2009. április 20. hétfő, 6:00

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

Ja elfelejtettem.
Ubul már küzdött vele, nekem is hasonlóra lenne szükségem, de az ott leirtak abban nem megfelelőek nekem, hogy nem 2 magas négyszögjel közti idő 20ms, hanem a periódusidő. Ha 1ms magas, 19ms alacsony, ha 2ms magas, 18ms alacsony.

üdv Roland
Avatar
SanyiSay
Elektronbűvölő
Hozzászólások: 1031
Csatlakozott: 2009. február 28. szombat, 7:00

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

Kód: Egész kijelölése

szamol: 
incr valtozo 
return 

ugyanaz mint

Kód: Egész kijelölése

szamol: 
valtozo = valtozo+1
return 
én úgy mértem cak fenti jelet hogy mikor a rising re meghívta a rutint akkor átálítottam Config Intx = Falling ra, és vissza, így felfutó és lefutó is meszakított és hát fenti és lenti jel is le van mérve. Pár if és kész.
Válasz küldése