Atmega128 INT0-INT7
Atmega128 INT0-INT7
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
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
na hát csak elértem idáig 
ez a kód miért nem jó?
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
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
valamit igen benéztem, vagy az alap mérési 5letem nem jó.
előre is köszi a segítséget.
Üdv Roland
É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.
- 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.
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
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
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?
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?
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!

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!
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....
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
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.
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
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
É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
Na ez eddig nem jött össze
Próbálkozok, és nem adom fel, csak rendkívül nehezen közelítem szerintem meg.
Köszi addig is.
Üdv Roland
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