megszakítások !! egy pici elakadás!

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

JAJ-JAAAJ!!!
Megszakításból nem lehet ki gotózni!!!
Van azon kívül még pár lehetőség.
Mondjuk az: If Feny = 750 Then Togle led
:cry: :cry: :cry:
Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

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

Tudom Tudom csak amikor ezt írtam még nem voltam vele tisztában. Így is működik. De ha beleteszem a progimba akkor nem jó. Na majd agyalok rajta. (egyébként miért nem lehet? vmi fordítóbeli tiltás? vagy csupán átláthatóság?)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Miért? Már leírták(tuk) 1000* Olvas vissza :evil:
Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

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

Jójó bocsi. Akkor javítom. Próbálok leszokni.

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

$regfile = "attiny45.dat"
$crystal = 8000000

Dim Feny As Integer
Feny = 1

Led Alias Portb.1
Config Led = Output

Config Timer1 = Timer , Prescale = 1024

On Timer1 Novel
Enable Timer1
Enable Interrupts
Start Timer1

Main:

Do
'nop
Loop


Novel:

Feny = Feny + 1

If Feny = 750 Then
Toggle Led
Feny = 1

end IF

Return
Avatar
arong
Újonc
Újonc
Hozzászólások: 12
Csatlakozott: 2009. szeptember 4. péntek, 6:00

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

Bocs. Nem olvastam el figyelmesen a fórumot. Megtaláltam a választ. De nem tudom törölni a hozzászólásom.
Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

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

(atmega8) Az ICP portot hogy szokás használni ha egy hall jeladót kötök rá és a felfutó élekre van beállítva? Kell GND-re felhúzó ellenálás? Illetve 5V1-es zeener GND és ICP láb közé? Nameg 4K7 a bemenet (ICP)elé? http://pu.i.wp.pl/k,MTA0MDQ3MTIsMTE5NjE ... ematv3.JPG
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

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

Egy gyors kezdő kérdésem lenne.
Adott egy ATTiny45 AVR.
Annyi feladata lenne hogy ha a portb.2 lábra 5V érkezik egy ventillátort hajt x ideig a portb.1-en.
Alaphelyzetben egy ledet villogtat a program a portb.0-n.
A portb.2 egy megszakítást generál és inditja a portb.1-et.
Alaphelyzetben 0V a portb.1-en.Ha megérkezik az 5v addig nem inditja a megszakítást míg újra 0v nem lesz a portb.1.

Nekem pedig azonnal indulnia kellene!
De ha letelik az x idő és a portb.1 még midig 1 akkor ne induljon újra.
Csak ha előbb 0 és ismét 1.

Itt a code:

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

$regfile = "attiny45.dat"                                   'Chip
$crystal = 1000000

Config Portb.1 = Output
Config Portb.2 = Input
Config Int0 = Falling
Config Portb.0 = Output

On Int0 Vent

Reset Portb.0
Reset Portb.1
Reset Portb.2

Enable Interrupts
Enable Int0

Do

Set Portb.0
Waitms 500
Reset Portb.0
Waitms 500

Loop



Vent:
Set Portb.1
Set Portb.0
Wait 10
Reset Portb.1
Reset Portb.0
Return

End
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

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

Gondolom azért, mert az INT-ed lefutó élre van beállítva...(Falling).
Ha jól gondolom...
Avatar
Kotesz
Tranzisztorgyógyász
Hozzászólások: 171
Csatlakozott: 2009. szeptember 24. csütörtök, 6:00

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

Igen... ez volt a gond:lol:

Köszönöm a segítséget!
Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

-

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

Üdv! Van nekem egy ilyen programrészem:

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

Options:
Do

If Pind.6 = 0 Then Incr J
Bitwait Pind.6 , Set

If J > 2 Then J = 0

If Pind.7 = 0 And J = 2 Then Goto Main
Bitwait Pind.7 , Set

If Pind.7 = 0 And J = 0 Then Toggle Light
Bitwait Pind.7 , Set

Select Case J
Case 0 : Text = "light " + Str(light)
Case 1 : Text = " menu 2"
Case 2 : Text = "  exit"
End Select
Gosub Sendnap
Waitms 300
Loop
A "Sendnap" szubrutinban egy kijelzőre kiírás van. Ez a programrész egy alkalmazáson belüli OPCIÓK menü menüelemeit tartalmazza. Az elemek között a Pind.6 gombal lehet lépkedni. Az exit menüre lépve és a Pind.7 gombot nyomva visszakerülünk a főprogramba. A problémám a "light" menüre lépve tapasztalható amikoris a kijelzőn ez áll: LIGHT 0. Ha ilyenkor megnyomom a Pind.7 gombot akkor sajnos nem változik meg a bit típusú "light" változó értéke. (mármint a kijelzés szerint biztosan nem, mert ott ugyan úgy 0 marad) Miért lehet ez szerintetek? Megszánnátok egy kis segítséggel? Köszönöm!
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

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

Jól működne ez, ha eléggé gyors lennél :)
(és jókor)

If Pind.7 = 0 And J = 2 Then Goto Main
Bitwait Pind.7 , Set

Itt ugye benne a bitwait 1-re.
Ha ez egyben áll, akkor tovább hipp-hopp a:

If Pind.7 = 0 And J = 0 Then Toggle Light
Bitwait Pind.7 , Set

Tehát a gombot az előző 1-re várás és az IF....light
között kell megnyomnod.

Tehát a gombnyomásod miatt az előző bitwait-nél várakozik a felengedésre, és igen gyorsan tovaszalad.

Remélem, jól gondoltam.... :)
Avatar
szepnorbee
Bitmanipulátor
Hozzászólások: 122
Csatlakozott: 2009. augusztus 31. hétfő, 6:00

-

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

Igazad volt! Köszi szépen! Probléma megoldva. Az első

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

Bitwait Pind.7 , Set
sort kitöröltem. Elég belőle az utolsó. Így tökéletes. Üdv!
Avatar
joco10
Újonc
Újonc
Hozzászólások: 12
Csatlakozott: 2009. október 25. vasárnap, 6:00

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

Hasonló problémával küzdők mint szepnorbee ebben a topikban( 8. lap).
Egy relé meghuzási idejét kell mérni ( 1 - 20ms ), ugyanakkor egy output lábat bekapcsolni (relé meghuzási ideje *1,2) tehát 20 százalékkal tovább.
A proci attiny13 lenne. Ha jól tudom ebben csak egy 8bites timer van. A kérdésem hogyan tudom megoldani az egy timerrel a relé idejét mérni és a + 20% után az output lábat kikapcsolni. Az alábbi itt talált kodot szeretném átalakítani.

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

$regfile = "attiny13.dat"
$crystal = 9600000


Config Portb.4 = Output
Config Pinb.1 = Input
Config Timer0 = Timer , Prescale = 1024
Portb.1 = 1

Dim Rel_int As Bit , Reletime As Long , pluszido As Long,
Reletime = 0

Rel_int = 0

On Int0 Rele_time

Enable Int0

Config Int0 = Falling                                       'INT L->H átmenetre

Enable Interrupts

Do

'Print Reletime, pluszido 
Loop

End                                                         'end program

Rele_time:
 SELECT Case Rel_int
 Case 0 :
         set Portb.4
         Timer0 = 0
         Start Timer0
         Config Int0 = Rising                               'Következő INT H->L átmenetre
         Rel_int = 1
 Case 1 :
         Stop Timer0
         Reletime = Timer0
          pluszido=Reletime/5
         Config Int0 = Falling                              'Következő INT L->H átmenetre
        
         Rel_int = 0
 END SELECT
Return


Előre is köszönöm a segítséget.
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

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

A kimenet szinkronban indul a relével vagy ha annak ideje meg van, akkor indul a Reletime+20% a kimeneten?
Én úgy csinálnám, így hirtelen, hogy lefutó-start o.k., ahogy Te írtad, felfutónál Timerbe beírnám:
Timer=255-reletime*1.2 és hajrá timer.
(persze szétszedve külön sorokba, ahogy a Bascom szereti)
Persze Timer overflow INT-et kell létrehozni, ami csak annyit csinál,
hogy kikapcsolja a kimenetet és STOP Timer.
Tehát szavakban, amikor megvan a Reléidő, akkor a Timerbe betöltöm a megnövelt időt (negatívban) és elindítom a timert, ami Overflow-nál lelövi a kimenetet (amit bekapcsoltál valamikor ugye...)
JAni
Avatar
paroh
Biztosítékgyilkos
Hozzászólások: 51
Csatlakozott: 2009. május 21. csütörtök, 6:00

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

Sziasztok!


Egy hőmérő programnál elakadtam. Azt kellene tudnia, hogy ha nem érzékel szenzort, akkor Portb.5 láb (relé) lekapcsol és Portb.7 láb (led, zümmer) pedig be.
Addig jó is, hogy ha lehúzom a szenzort, az lcd kiírja, hogy "Err", Portb.5 és Portb.7 láb is kapcsol, de ezzel egyben lefagy, csak újra indítva működik.

Hogy lehet megcsinálni azt, hogy ha visszadugom a szenzort, folytassa a program futását, mérést? Esetleg a Do - Loop parancsokkal?

Eddig jutottam:

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

If Temp = 300 Then
      Set Portb.7
      Set Portb.5
      Locate 1 , 3
      Lcd " Err  "
      Portb.5 = 0
      Waitms 200
      Portb.7 = 0
      Do
      Loop
End If
Válasz küldése