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

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10064
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

HozzászólásSzerző: Robert » 2013. február 3. vasárnap, 18:33

Bascom SÚGÓ. PCINT

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 898
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

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

HozzászólásSzerző: winnerbt » 2013. február 3. vasárnap, 20:16

3db PCINT-es megszakításom van, nem nagy cucc, csak az a kérdésem, hogy a megszakítás rutin meghívható-e külön a főprogramból mindenféle büntetés nélkül?
(gondolok arra, hogy stack túlcsordulás, Bascom félreérti stb.)
Másik: ATMEGA1284P Timer2 INT. Hogy is volt az, hogy a T2 INT-et meg tudja szakítani másik INT? Itt a PCINTnek kellene megszakítani az esetleg lefutó T2 INTet. A T2 INT-em hosszú, a PCINT-em rövid, de sűrűn jön. A fene emléxik már... :)
JAni

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10064
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

HozzászólásSzerző: Robert » 2013. február 3. vasárnap, 20:25

INT soha nem megszakítható. Csak a flag billen be....
Persze kézzel továbbugorhatsz - nem illik...
Sőt, a T2-ben figyeled a PCINT flag-t - mint regisztert... :)

gosub/int - return:
Hát, én inkább különszedném. A fordítás más.
Szubrutin végén RET (ASM) vagy interrupt végén RETI (ASM)

Kiskapu:

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

int:
gosub valahova
return

valahova:
.
.
.
return

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 898
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

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

HozzászólásSzerző: winnerbt » 2013. február 3. vasárnap, 20:40

Aha...Ezt akkor másképp kell megcsinálni, sajnos a PCINT véletlenszerű és azonnali reagálást kíván (-na).
Pedig valami rémlett, hogy valami bitet visszaállítok, akkor beszaladhat másik INT.
A subrutinnál meg valahogy beleégett anno a fejembe, hogy a Bascomban az INT rutinban csak egy return lehet.
Hogy ezt honnan szedtem...vagy álmodtam...Persze hívtam subrutint ettől függetlenül INTben, csak félve és nem időkritikusan.
Igazából ettől a RET/RETI különbségtől tartottam.
A T2-ben nem tudom figyelni a PCINT biteket, mert sok számolás van és van, hogy 10000/sec PCINT jön be.
Köszi, agyalok aztán teszt.
JAni

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10064
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

HozzászólásSzerző: Robert » 2013. február 3. vasárnap, 23:31

PCINT-ben számláló?
Az, hogy Counter és Tx van használva, az nem jó?
Tipp:
T2 INT:
1, flag bebillent
2, disable _minden egyeb INT, kiveve PCINTx
3, return

Főprogramban if flag=1 és számolok: majd flag=0
if flag=0 then enable mindenfele INT ujra...

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 898
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

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

HozzászólásSzerző: winnerbt » 2013. február 4. hétfő, 8:22

Igen, valami ilyen lesz, csak a folyamatosan futó dolgokat mind INT-ekbe akartam rakni, hogy főprogramban szabadon garázdálkodhassak. Lehet, XMEGA lesz belőle, ott van prioritásos INT, de az meg ágyúval verébre, bár abba is bele kellene tanulni...
JAni

Avatar
Siki
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2009. szeptember 26. szombat, 6:00
Tartózkodási hely: Székesfehérvár

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

HozzászólásSzerző: Siki » 2013. február 4. hétfő, 10:35

Sziasztok!

Kezdő vagyok a Bascom programozásban.
Ebben a topicban a 15. oldalon olvastam az RC világítás ki-, bekapcsolásáról, kipróbáltam, de valamit elronthattam.
Azt tapasztalom, amikor bekapcsolom az adó segítségével az ARDUINO UNO-n található ledet, akkor az villog, kikapcsoláskor pedig vagy folyamatosan világít vagy nem világít.

A kód, amivel próbálkoztam:

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

$regfile = "m328pdef.dat"
$crystal = 16000000
$baud = 9600

$hwstack = 128
$swstack = 40
$framesize = 160


Config Pind.3 = Input
Config Pinb.5 = Output

Vilagitas Alias Pinb.5

Dim Vilbe As Word

Reset Vilagitas



Do

  Pulsein Vilbe , Pind , 3 , 1

  Bitwait Portd.3 , Reset

  If Vilbe < 190 Then Set Vilagitas

  If Vilbe > 190 Then Reset Vilagitas

Loop

End                                                         'end program


Mi okozhatja ezt a jelenséget?

Siki

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10064
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

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

HozzászólásSzerző: Robert » 2013. február 4. hétfő, 11:17

Pulsein: a gombnyomás _hosszát_ figyeli...
Mit szeretnél végrehajtani vele?

Avatar
Siki
Újonc
Újonc
Hozzászólások: 4
Csatlakozott: 2009. szeptember 26. szombat, 6:00
Tartózkodási hely: Székesfehérvár

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

HozzászólásSzerző: Siki » 2013. február 4. hétfő, 13:06

Az modell távirányító vevőegységéről folyamatosan érkező PWM jelek alapján szeretnék több digitális kimenetet vezérelni, ahogy egy korábbi hozzászólásban ez működött.
sznorbee írta:Köszi!! A PULSEIN-el tényleg egyszerű volt. Jó, hogy a szemem nem verte ki :)



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

'======================================================
'RC kapcsoló megvalósítása az RX egyik csatornájának
'PWM kitöltési tényező mérésével
'======================================================
$regfile "attiny45.dat"
$crystal = 8000000

Config Pinb.3 = Output                                      'Világitáskapcsoló
Led Alias Portb.3
Portb.3 = 1

Dim W As Word

Do
Pulsein W , Pinb , 4 , 0                                    '0-1 átmenet detektálása
Bitwait Portb.4 , Reset                                     'stopper megállít 1-0 átmenetre

If W < 1780 And W > 1725 Then                               'feltétel vizsgálat
Reset Led
End If

If W < 1725 And W > 1676 Then
Set Led
End If

Waitms 150                                                  'egy kis lassítás (ráérünk)

Loop

End                                                         'end program

Avatar
daniel926
Biztosítékgyilkos
Hozzászólások: 65
Csatlakozott: 2011. december 7. szerda, 7:00
Tartózkodási hely: Perkáta

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

HozzászólásSzerző: daniel926 » 2013. február 5. kedd, 19:57

Bascom súgóban nem találtam PCINT kifejezést. Bascom példaprogramok közt találtam egy PCINT CHANGE elnevezésű programot de semmit nem értek belőle. Pár kérdést kiírok de mint írtam az egész nem világos.

Do-Loop cikluson belül konfigurálja a láb szerepét. Tudtommal az program eleji teendő.
!NOP jelentésére sem találtam semmit.
PORTB=&HF ha jól értelmezem a program megjegyzését kiváltható PORTB=1-el?
Helyettesíthető e a PCMSKO=&B00001111 a PCMSKO= PORTB.0, PORTB.1 , PORTB.2 , PORTB.3?

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

'---------------------------------------------------------------------------
'                       (c) 1995-2011, MCS Electronics
'                             PCINT_CHANGE.BAS
' This sample shows how to use the PC interrupts
'---------------------------------------------------------------------------

$regfile = "m88def.dat"
$crystal = 8000000
$baud = 19200

Print "{027}[2J";                                           ' when you have a terminal emulator, this will clear the screen
Print "Test M88 ints"                                       ' init message

'The M88 and M168 can detect a level change on all port pins.
'We will just check on portB, pins 0-3

Config Portb = Input
Portb = &HF                                                 'activate pull up

Enable Interrupts                                           'enable global ints
Enable Pcint0                                               'we enable pcint0 as this has pcint0-pcint7
On Pcint0 Isr_pcint0                                        'we jump to this label when one of the pins is changed
Pcmsk0 = &B00001111                                         'enable pcint0-pcint3  (portb.0-portb.3)
'With pcmsk you individual select which pins must react on a logic level
'When you write a 1, the change in logic level will be detected.

Do
! nop
  'you can do anything here
  'But we show how to use the pin level change in manual mode without interrupts
  'Say we want to detect logic level change of pin 23, (PINC.0) / INT8
  Config Pinc.0 = Input                                     'you can also detect output changes but we use input
  Pcmsk1 = &B00000001                                       ' enable the bit of PCINT8 which is in PCMSK1
  If Pcifr.pcif1 = 1 Then                                   ' change detected
      Print "pinc.0 has changed"                            'in this case it must be pinc.0
      Pcifr.pcif1 = 1                                       ' write a 1 to clear the flag so we can detect it again
  End If
Loop


Isr_pcint0:
  Print "Pin change " ; Bin(pcmsk0) ; Spc(3) ; Bin(pinb)
  'As you see the mask does not change, so to find out which pin changed,
  'you need to read the PINB register.
Return

End

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3349
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

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

HozzászólásSzerző: kapu48 » 2013. február 5. kedd, 20:46

Már ne haragudj!
De ha semmit sem értesz?

Egyszerűbb lenne, ha ezeket a tanításokat átolvasnád!
Bascom Könyv:
http://avr.tavir.hu/modules.php?name=Co ... ies&cid=15

pcint megszakitás: viewtopic.php?f=1&t=765
:wink:

A NOP az időhúzás legrövidebb formája.
Csak beolvasásra kerül az utasítás 1 Byte és 1 órajel, de nem történik semmi.
:)


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 2 vendég