ATTiny13 - INT/PCINT és a szimulátor

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
kormen
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2009. február 11. szerda, 7:00

Pcint attiny13 ban nem akar müködni

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

Sziasztok!

Gyakorolgatok, és elértem a pcint interrupt használatához. Rongyosra programoztam szegény t13-ast, de valamiért nem akar belépni a megfelelő megszakításba. A bascom emulátorában sem akaródzik. Ime a bonyolult kód, melyet a példák valamint a gugli elkoptatása után összehoztam:

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

$regfile = "attiny13.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 16
$framesize = 40
 
Dim Gosend As Bit

config portb.5 = output
config portb.4 = output
 
Gimsk.pcie = 1

Enable Interrupts
Enable Pcint0
On Pcint0 Tick

'Pcmsk = &B00000101
Pcmsk.0 = 1
Pcmsk.2 = 1

Main:
   If Gosend = 1 Then
       Toggle Portb.4
       Reset Gosend
   End If
Goto Main

Tick:
   Toggle Portb.5
   Gosend = 1
Return
A példák szerint ennek elvileg mennie kellene. Mit hagytam ki? Kínomban már ezer módon bekapcsoltam a megszakításvezérlő regisztereket és állítottam be a lábakat. Az emulátorban jók a regiszterek de nem hajtja végre a megszakítást. A t13-ba kiégetve sem. A bemenetekre egy másik t13-mas osztja a négyszögeket.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Ez biztos nem volt kipróbálva....
Out of SRAM space.

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

$regfile = "attiny13.dat"
$crystal = 8000000
$hwstack = 16
$swstack = 8
$framesize = 20
$sim


Dim Gosend As Bit

config portb.5 = output
config portb.4 = output

'Pcmsk = &B00000101  pcint0 PB0/pcint2 PB2
Pcmsk.0 = 1
Pcmsk.2 = 1



'Gimsk.pcie = 1''ez a enable pcint0

On Pcint0 Tick
Enable Pcint0
Enable Interrupts



Main:
   If Gosend = 1 Then
       Toggle Portb.4
       Reset Gosend
   End If
Goto Main

Tick:
   Toggle Portb.5
   Gosend = 1
Return
- Utasítássorrend
- SRAM kezelés

Bascom 2030-ban tesztelve OK.
Bascom 11198Demo-ban OK.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Vagy Ha 50Hz környékén vagy felette jönnek a megszakítások már nem látod a LEDek villogását!
8O
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Plusz külső kvarc az biztos?:)
Mondjuk szimulátorban próbáltam én is.....
Avatar
Franz
DrótVégénSzéndarab
Hozzászólások: 43
Csatlakozott: 2009. május 29. péntek, 6:00

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

Én is kipróbáltam szimulációban, de nem megy. Mit csinálok rosszul?
F8-al lépegetek vagy az F5-el elindítom a futást és közben PB0 vagy a PB2 bemenetet változtatom. És várom, hogy a Tick megszakításra ugorjon, de nem ugrik. 1.11.9.8 Demo
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Ez már a szimulátor Baja!
Esetleg élesben kellene kipróbálni!
8)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Nem bemenetet állítasz, hanem az INT gombra kattintasz!
(kb. 4. fül)

Illetve a tört Bascomban sem megy :twisted: .
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Még az Év utolsó napján is tanulta itt valamit!
Köszönöm!
És B.U.É.K.! Mindenkinek
:D
Avatar
Franz
DrótVégénSzéndarab
Hozzászólások: 43
Csatlakozott: 2009. május 29. péntek, 6:00

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

PCINT0 gombra kattintva nekem is megy, de ennek nem így kéne.
Itt egy példaprogram ez jól működik szimulációban is. Felfutó élre odaugrik a megszakításblokkra.

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

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

'Set interrupt on PD2, type = Rising
Config Int0 = Rising
On Int0 Button
Enable Interrupts
Enable Int0

Do
NOP
Loop

Button:
NOP
Return

End
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 PCINTt az JELVÁLTOZÁSRA ad megszakítást, azaz fel ÉS lefutó élre IS.
Avatar
Franz
DrótVégénSzéndarab
Hozzászólások: 43
Csatlakozott: 2009. május 29. péntek, 6:00

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

Elöljáróban, én most csak felfutóélre való megszakítást próbálgattam.
A fenti programot átraktam ATtiny2313-ra

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

$regfile = "attiny2313.dat"
$crystal = 4000000

'Set interrupt on PD2, type = Rising
Config Int0 = Rising
On Int0 Button
Enable Interrupts
Enable Int0

Do
NOP
Loop

Button:
NOP
Return

End
És jól megy a szimulátorban, tehát ha a PD2-t kapcsoljuk akkor odaugrik a megszakításrutinra.

Ezek után átírtam ATtiny13-re

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

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

'Set interrupt on PB1, type = Rising
Config Int0 = Rising
On Int0 Button
Enable Interrupts
Enable Int0

Do
NOP
Loop

Button:
NOP
Return

End
Itt nem működik a szimulátorban jól, ha PB1-t kapcsoljuk semmi nem történik. Az igaz, hogy az Interrupt fülön az INT0-t kapcsolva igen, de az nem normális így.

Ezek után áttúrtam a "attiny2313.dat" és a "attiny13.dat" fájlokat vajon mi lehet a különbség. Rengeteg hasonlitgatás (kipontosvesszőzés,újrafordítás,próba) nem hozott eredményt. Azt gondoltam ebben majd meglelem a szimulációra vonatkozó "összefüggéseket" is de nem. Ez csak a cimeket, beállításokat tartalmazza.
Mire már csak az a különbség maradt, hogy az egyik a PD2-ön a másik a PB1-en várja az INT-et. De ugye a ATtiny13-ban nincs D port. Sebaj, gondoltam egy próbát megér. Beillesztettem az IO részbe:

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

[IO]
.
.
PORTD  =$12
DDRD   =$11
PIND   =$10
Problémát nem okozhat hiszen a $10-$12-es címen semmi nincs.

Ez annyit tett, hogy az újrafordítás után a szimulációban megjelent a D port is (ami ugye a valóságban nincs). És megjött a csoda! PD2-re kattintva megtörténik a megszakítás.

Szumma: a szimulátor rossz helyen várja a megszakítást.

Jó hír viszont, hogy a fordítás az valószínűleg jó, AVR Simulator IDE-ben - a kódot assembly-ben látva - jól működik.

(Ha esetleg van valakinek ATtiny13-ja kéznél kipróbálhatná a valóság mit mutat)
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Ha a PIN-t kapcsolod az NEM generál INT-et. Arra az INT gomb való!!!!
Az hogy a szimulátor _megpróbálja_ kitalálni, hogy a PINx.y-t nyomkodod, az INT-et is okoz(hat)!

NE akarj okosabb lenni, mint a processzor.
Ha TE nem szabályos INTet hozol létre (PIN-ként okozva), NE várd, hogy jól fog működni!
INT-et az INT fülön adunk a szimulátorba!
Avatar
kormen
DrótVégénSzéndarab
Hozzászólások: 16
Csatlakozott: 2009. február 11. szerda, 7:00

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

Robert írta: Ez biztos nem volt kipróbálva....
Out of SRAM space.
Nekem nem irt hibát, a hexet betettem avr studióba ott is ment, a bascom leforditotta probléma nélkül. Kiégetve is működött szerintem. Csak a megszakításba nem lépett be.

Neked mi írta ezt?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Bascom fordító, alul a hibaüzenet részen....

Azért működött, mert nem használtál Frames ill HW/SWStackot. Csak lefoglaltad...
Avatar
Franz
DrótVégénSzéndarab
Hozzászólások: 43
Csatlakozott: 2009. május 29. péntek, 6:00

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

Természetesen ez is egy álláspont és sok igazság van benne. Én azért ezzel nem értek teljesen egyet. Én egy szimulátortól azt várom el, hogy a lehetőségekhez képest a legjobban "lemodellezze" a valóságot. És ez alapján is szeretném használni. Jelen esetben például egy timer túlcsordulástól elvárom, hogy belső megszakítást generáljon (feltéve ha így konfiguráltam) illetve egy láb bekapcsolástól pedig, hogy egy külső megszakítást generáljon (persze itt is megfelelő beállítás esetén csak). A szimulátornak nem kell megpróbálnia kitalálni hogy bemenetet nyomkodom azt pontosan tudnia kell az aktuális chip belső felépítéséből következően mivel az egy "belső" bit és az adott programnak megfelelően ez mit okoz. Hiszen mi különbség is lehetne egy időzítő vagy egy felfutóél leszimulálása esetén?

Szerintem teljesen életszerű az hogy ha egy lábat felfutóélre konfigurálok akkor a megszakítást magán a lábon hajtom végre. Talán a Bascom szimulátor fejletlenségét mutatja, hogy létezik az INT fül.

Természetesen a fenti tapasztalatomnak semmi gyakorlati haszna nincs, bár az azért az elég aggályos, hogy ez egyik chip esetén úgy működik ahogy én elvárom a másiknál meg nem.

Ettől még a Bascom egy nagyon jó program!
Válasz küldése