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: 9990
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2010. május 25. kedd, 10:33

A buffernek vannak a _ jellel kezdődő jellemzői és ezt a Config serialin súgójából levő a config serialin = buffered, 20, bytematch (fejből megy, tuti nem így van) esetén a serialin cimkére ugrik. Ekkor meglesed, hogy a buffer meddig van, a _buffer_full (?) jellemzőjével.

Én Xon/Xoff protokollal küldök.
Ha a buffertelítettség <20%, akkor az XOn-t kiküldöm, buffertelítettség>80% esetén az Xoff-t.

Sub és Gosub/Return kb. ugyanúgy működik (memóriafoglalás szempontjából is).



A$dbg nálam nem vált be. Jobb szerettem a StCheck utasítást és az error változót....

Avatar
DOGMAN
Chipgyilok
Hozzászólások: 293
Csatlakozott: 2006. augusztus 27. vasárnap, 6:00
Tartózkodási hely: Balatonboglár

HozzászólásSzerző: DOGMAN » 2010. május 25. kedd, 10:44

Köszi!

Ezeket átnézem, majd írok mi lett a vége...

Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

HozzászólásSzerző: nobody_hun » 2010. május 25. kedd, 13:57

Nem kinevetni:
M644P-nél most a stack-ek 256/256-on mennek, így lett jó.

Illetve, a szubrutinokban a helyi változókat likvidáltam, mert mint a súgóból is kiderült, dupla helyet foglalnak, mintha univerzális, globális változók lennének.

Van egy másik -számomra érthetetlen- tapasztalatom is:
Ha küldesz valamit PC-ről és arra nem válaszolsz, akkor is megáll mint a szög.
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző
"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."

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

HozzászólásSzerző: Robert » 2010. május 25. kedd, 14:35

A PC felől ha küldesz mindenfélét és akkor áll le : gyakorlatilag a buffert nem pucolod. A Buffer rálóg valamelyik HW vagy SWStackra, esetleg a FRAME-ra. Ezek sorrendjét sose tudom h a Bascom hogy osztja ki...
Ha van helyed, próbáld ki a Frames-t is növelni (ill STCheck+error használata (így belőhető h mekkora memóriahelyek kellenek...)


Sok Sub esetén volt nálam, hogy a Frames 800 byte volt!

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

HozzászólásSzerző: szepnorbee » 2010. június 4. péntek, 10:38

Üdv! Helpet kérnék. Vannak nekem pozitív feszültség ugrásaim. Ezek egy hall jeladóból származnak, olyan 14V körüli a legnagyobb feszugrás. Megszakítással szeretném számolni őket. Hogyan illeszthetem őket mega8 INT0-hoz? Programozással még elvagyogatok, de az áramköri résszel nem vagyok full tisztában. Úgy gondoltam, hogy kell egy NPN-es tranyó aminek a bázisát a HALL jeladó táplálja egy ellenálláson keresztül. Amikor a bázison jelet kap akkor az UC int0-át leteszi földre. Nade ilyenkor is kell a 10k felhúzó az int0-ra? Nameg a tranyó közvetlen leheteti testre? Nem kell oda is valami ellenálás? Bocsi az értetlenkedésért :)

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

HozzászólásSzerző: Robert » 2010. június 4. péntek, 10:40

A lábra sorosan egy 4k...4k7 ellenállás, és 5V1-es zenerrel megfogod a jelet.

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

HozzászólásSzerző: szepnorbee » 2010. június 4. péntek, 10:54

Kb. mint itt?

http://ecomodder.com/wiki/images/7/79/MPGuino_Schematic.GIF

Ezt így értem, nade itt a rajzon nem jelöli, hogy kell e felhúzó 5 volt és int közé. Az is kell?

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

HozzászólásSzerző: Robert » 2010. június 4. péntek, 11:46

Ha berakod, azzal kárt nem okozol....
De nem kell, szerintem. Ha a belsőt bekapcsolod, bőven elég....

Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00
Tartózkodási hely: Szolnok

HozzászólásSzerző: dummy » 2010. június 25. péntek, 18:36

Adott egy M88, 3.3 voltos áramkörrel. Pár bájtot kéne áttolnia egy M64-nek, ami viszont 5V-os áramkörben van. Az adatátvitelt a shiftin/shiftout parancsokkal tudom csak megoldani, az uart és az spi foglalt, az i2cslave felejtős (ezért nem akarok fizetni).

Az elképzelés az, hogy az adat- és az órajelen kívül betennék egy külön jelet, ami hasonlatos lenne az spi-nél használatos chip select-hez. Ez azért is lenne jó, mert az M64 teszi a dolgát, ám egy megszakítással megállna, és fogadná az M88 felöl az adatokat.

Ezt áramkörileg meg is építettem. Programozás tekintetében sincs gond. A baj csupán az, hogy nem minden adatküldéskor ugrik a megszakítási rutinra az M64.

Az Int0-ra kötöttem egy szál vezetékkel az M88 egyik portlábát, ami alaphelyzetben alacsony magas szinten van (3,3V), megszakítás kérelemnél logikai 0 lesz. Először arra gondoltam, hogy az M64-nek ez a feszültség még nem "tiszta" magas logikai szint. Aztán kipróbáltam ugyanezt egy M644-el is, aminél ilyen probléma már nem lehet (lásd adatlap). Ám az eredmény ugyanaz.

Talán kissé furcsa, de úgy véltem, hogy ide nincs értelme felhúzóellenállást rakni, hiszen a két proci eltérő feszültségről megy, akkor mégis melyik feszültségre húzzam fel ezt a vezetéket?

Mi a véleményetek? Kell felhúzóellenállás, vagy nem? Ha kell, melyik feszültségre húzzam fel? 3,3V-ra vagy 5V-ra? Egyáltalán, áramköri, vagy programozási probléma lehet?

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

HozzászólásSzerző: Robert » 2010. június 25. péntek, 20:39

A logikai szinet simán lekezeli az 5V-s proci. A H szint 1.4 V felett van.
Felhúzó nem kell, mert nem openkollektoros a kimenet.
Itt programozási hiba lesz.

Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00
Tartózkodási hely: Szolnok

HozzászólásSzerző: dummy » 2010. június 26. szombat, 4:14

Robert írta:Itt programozási hiba lesz.


A figyelmetlenség... :oops:

Csupán annyi történt, hogy a fogadó oldalon a program jól volt megírva az Int0-ra, de az Int1-hez tartozó portlában állítottam bemenetre, az Int0 helyett. Javítás után tökéletesen működik.
Már csak azt nem értem, hogy akkor mit érzékelt néha az M644, mert néha elkapta az M88 megszakításkérelmét a be nem állított portláb ellenére. :?:

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

HozzászólásSzerző: Robert » 2010. június 26. szombat, 7:49

A másik INT láb nem volt véletlen bemeneten (ha nem mondod hogy mi legyen, akkor automatikusan bemenet) és lebegett?
És összeszedett zajt/induktív jelet.

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

M88 Timer0 (Timer2)

HozzászólásSzerző: winnerbt » 2010. augusztus 18. szerda, 12:43

Valamiért nem ad megszakítást egyik sem :(
Mit nézek el?

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

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

Config Portb = &B11000011
Config Portc = &B00000000
Config Portd = &B11110010

Config Timer0 = Timer , Prescaler = 1024                    '30Hz
On Timer0 Tim0
Enable Timer0
Start Timer0

Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0
Config Lcd = 16 * 3 , Chipset = Dogm163v5 , Contrast = &H78
Dim Temp_b As Byte



Enable Interrupts
Cls

Do
Locate 1 , 1 : Lcd Temp_b
Loop

Tim0:
Temp_b = Temp_b + 1
Return

Avatar
nobody_hun
Bitfaragó
Hozzászólások: 425
Csatlakozott: 2005. november 14. hétfő, 7:00

HozzászólásSzerző: nobody_hun » 2010. augusztus 20. péntek, 6:57

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

Config Timer0 = Timer , Prescaler = 1024                    '30Hz


1.,
Prescaler helyett Prescale

2.,
Megszakítás rutinban nem árt nullázni a Temp_b-t, gyorsan túlcsordul!
(if temp_b=255 then tempb_=0)
"Az IC-k füsttel működnek. Ha kijön belőlük a füst, nem működnek tovább." - ismeretlen szerző

"Az ID:FFFFFF egyenlő az Atmel még nem kiadott processzorával."

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

HozzászólásSzerző: winnerbt » 2010. augusztus 20. péntek, 7:51

ÁÁÁÁÁ.
A fene essen abba az "r"-betűbe...
Most már mindegy, átírtam az egész programot egy megszakításra.
Tudtam, hogy valami abszurd hiba van, de hiába néztem, nem láttam.
(és hibajelzés sem volt)
A változó ha átfordul, nem érdekes, csak tesztnek volt, hogy
elmegy-e megszakításra.
És most látom a programban:
Config Adc = Single , Prescaler = Auto , Reference = Off
Szóval lehet, innen maradt fejben.
Kösz!!!
(na ezért szoktam idegenekkel is elolvastatni az írományaim, elsőre
kiszúrják a hibákat, én meg elsiklok felette, mert tudom, mit írtam)
JAni
08:51


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 1 vendég