Fórum témák
» Több friss téma |
Bővebben: Link (Azért, jó lenne, ha az alapokat átvennéd, programozás előtt, mert így eléggé nyögvenyelős lesz)
Sziasztok!
PIC24EP családon dolgozom unsigned long-al. De bajban vagyok. Ha egy 36928-at tartalmazó integert megszorzok 512-vel akkor 4280320000 kapok eredményül . Próbáltam úgy is hogy elé írom, hogy (unsigned long), de úgy sem lett jó. Viszont ha szimplán változó nélkül írom a szorzást, úgy jó értéket kapok. Mi lehet a baj?
Üdv Mindenkinek!
A következő hiba ütötte fel a fejét: Írok egy végtelen primitív programot. Példának okáért egy RGB led három LED-jét kapcsolgatja ki-be.
A probléma a következő: A kódot MikroC-ben megírom, és lefordítom. Ezután PICkit 2 Programmer szoftver, illetve PICkit 2 Klón programozó segítségével beégettem a 12F675 típusú vezérlőbe. Ez a szoftver tanulsága szerint meg is történik, ám az áramkört beizzítva egyáltalán nem a kódban leírtakat tapasztalom. Ebben az esetben például egy másodperces sárga színű felvillanások helyett nagyon halvány kb. 1 ms hosszúságú piros impulzusokat tapasztalok. Azért beszélek példáról, mert sok furcsaságot észleltem, például egy-egy utasítást nem hajt végre, vagy például a RED=~RED; parancsnál tipikusan megáll. Az érdekes az, hogy a beégetett programot a PIC-ből visszaolvasva, és azt géppel szimulálva a képernyőn tökéletesen működik. Van erre valakinek valami meglátása? Előre is Köszönöm!
Rájöttem mi a probléma signed volt az integer, unsigned a long. Ez kavart be.
Szia! Nem tudom mit tartalmaz a SYS_INIT() függvény, de arra tippelek, hogy nem szerepel benne az ANSEL=0; sor.
Ha meg szerepel benne az az ANSEL=0 akkor meg az a baj, hogy a 3 szín ugyanazon a porton van(mivel csak egy portja van ), és ugye mindenki azt hiszi, hogy faék. Ez elektronika! El kell olvasni az adatlapot. Portok működése: READ-MODIFY-WRITE.
És az a gyanum, hogy inkább ez a probléma nem az ANSEL. A hozzászólás módosítva: Dec 15, 2014
Már nem egyszer szó volt róla, hogy kezdőknek pic18-al kellene kezdeni, de bármely enhanched midrange is megteszi. Tudom, az ez van itthon is nagy úr, de az adatlap ingyen van, akkor OLVASNI!
Sziasztok!
A retlw utasítással próbálkoztam összehozni egy programot, de nem működik. A program feladata az lenne, hogy gombnyomásokra a megadott retlw utasításoknál szereplő bináris kódokat kirakja a PORTD-re, majd a 4. gombnyomás hatására újrakezdi az egészet. Sajnos addig működik csak a program, hogy az első 00000001 kódot kirakja a kimenetre és tovább semmi, hiába nyomkodom a gombot.
A hozzászólás módosítva: Dec 15, 2014
Szia!
Az első hogy a szam változót jobb ha nullázod még az elején. A második, hogy olyan parancs hogy movfw olyan nincs helyette a következő kódot kéne használni:
A szam értékének vizsgálatánál inkább kivonást használnék ami beállítja a STATUS, Z (zero) bitet így el tudod dönteni hogy a szam értéke 5 vagy kevesebb mivel amíg nem lesz 5 addig az eredmény nagyobb mint nulla és a Z egy lesz. Utána már csak ennek a feltételnek megfelelően kell megadnod hogy hova ugorjon a program. Ja és használd a szimulátort. Sokminden kiderül ha egyenként lelépteted a programot. A hozzászólás módosítva: Dec 15, 2014
A szam változód nincs beállítva (clrf szam), így elsőre oda ugrik ahová szívének kedves .
Az MPLAB értelmezi s MOVFW-t (különben sikítana), a XORLW ugyanúgy állítja a Z bitet.
A szam váltózót nulláztam az elején és aztán ez jelentette a megoldást is egyben. Kösz a segítségeket!
Szia!
Megnéztem az MPASM dokumentációt és benne van Ma is tanultam valamit. A kivonást azért javasoltam mert talán kicsit jobban látható, hogy mit is csinál a program. Legalábbis nekem mint kezdőnek sokkal jobban észrevehető pl szimuláció során hogy mi is történik, de persze sok megoldás lehet egy változó értékének vizsgálatára.
PIC12f1840-hez szeretnék programot irni MPLAB-al, de amikor az options-Development Mode-Tools menüt lenyitom, ez az IC nem szerepel a sorban. Igy csak a szimulációt nem fogja tudni jól megcsinálni, vagy a HEX fájl-ba fordításkor is gond lehet?
Üdv: deta
Szia!
Közben visszaolvastam az előző 150 oldalt a topicból. Pár hasznos infót kiszedtem, de ez az időzítés még mindig nem megy... Nem nagyon látom még át. Van pár példakódom, azokból is próbálom értelmezni, kisebb-nagyobb sikerrel. Eltaláltad, levilágításhoz kellene, pár percre beállítva egy relé behúzással kezdve és csippanással a végén. Volt a cikkek között egy univerzális időzítős, abból másoltam a kapcsolást. Viszont abban 2x16 digites kijelző van az idő kiírásra. Nekem meg van egy SDA2131-es IC-m egy régi gépből bontva 4x7 szegmenses kijelzővel. Így azzal szeretném a hátralévő időt kiíratni. Magam szeretném megírni tanulási céllal, mert régóta foglalkoztat a PIC, csak nem volt eddig még olyan projektem, amibe kellett volna. Viszont ha tudsz segíteni elkészült megvalósítással, azt szívesen fogadnám, talán könnyebb lenne pár dolgot megérteni belőle.
Szia!
Miért nem nézegeted a fórumtársak honlapjait? Bővebben: Link_1 Bővebben: Link_2 vagy ezt: Bővebben: Link_3 Ezekről a helyekről + sok mindent megtudhatsz, plusz a barátunk sokat segít!
Szia!
Linkek közül volt, amelyiket már olvasgattam, plusz a barátunk is segített többször. Egyenlőre eddig jutottam. A gombok egyenlőre még nem tettem bele, először szeretném, ha az időzítés futna rendesen. Kijelzőt meg csak akkor, ha egyáltalán a fő funkciója működni fog...
Viszont amit nem értek több kódban sem, hogy ha nem hívom meg a megszakítás függvényt sehol, akkor hogy is fog belefutni? Pl. nekem ha üres lenne a while(1) a végén. Több digitális óra kódjában láttam egy interrupt fv-t, mint nálam a levilagitas() fv. Viszont sehol nem láttam hivatkozást rá. Ezért nem tudom a kettőt összekapcsolni. Ez lehet, hogy elég hülye kérdés, de programozástechnikailag nem látom a kapcsolatot. Valamint biztos, hogy rossz is a kódom, mert nem a kívánt másodperces időközönként változik a masodperc változó, hanem ahogy végfut a cikluson, ledarálja. Tehát még mindig nem megy az időzítésem sajnos..
Ha átolvasod a mikrokontroller adatlapját, találsz egy fejezetet a megszakításról (interrupt).
A megszakítás egy fix címen induló utasítássorozat, ami akkor aktiválódik, ha a megszakítás összes feltétele megvalósul/engedélyezve van. Ebben a sorozatban meg kell határozni, melyik periféria kérte a megszakítást, és azt le kell kezelni. Idézet: „Viszont amit nem értek több kódban sem, hogy ha nem hívom meg a megszakítás függvényt sehol, akkor hogy is fog belefutni? Pl. nekem ha üres lenne a while(1) a végén.” A megszakítás úgy működik, mint a diákok az órán: a tanár magyaráz ( fut a főprogram !), ha valaki akar valamit, akkor jelentkezik ( megszakításkérést jelző bit ), amit, ha akar, elfogad a tanár ( megszakítás maszkolási lehetőség ). Ha felszólítja és elkezdi mondani a problémáját, akkor a tanár meghallgatja és megválaszolja a kérését ( megszakítás kiszolgálás )! Ha a tanár-diák "diskurzusa" közben benyit az igazgató, akkor a tanár csendre inti a diákot és meghallgatja az igazgatót és reagál a problémájára ( magasszintű megszakítás ! ), majd befejezi a diákkal a beszédet és ezután tér vissza az óra a rendes mederbe ! Ugyanez történik elektronikusan: ha beállítasz egy perifériát ( pl. TIMER ), hogy kérhet megszakítást ( pl. TMR0IE=1), akkor a jelzés hatására ( pl.TMR0IF=1) a processzor ÖNMŰKÖDŐEN elugrik egy adott programhelyre ( megszakítás belépési cím, pl 0x04 ) és az ott lévő programot kezdi el végrehajtani ( megszakítás kiszolgáló rutin, ISR ), majd a végeztével ( RETFIE ) visszatér a főprogramhoz! Ez azt jelenti, ha elindítottál egy timert és engedted a megszakítását, akkor a jelzéskor otthagyja akár a while(1) végtelen ciklust is és elugrik az ISR-re ! Bocs, hogy hosszú voltam, de remélem legalább érthető A hozzászólás módosítva: Dec 16, 2014
A ,egszakítást nem te hívod meg, hanem a hardver. Te csak megírod meg engedélyezed, stb. Akkor hívódik meg, ha egy biznyos hardveres feltétel(amely megszakítást beállítod), esetünkben a timer tulcsordulása elérkezik.
Vannak bizonyos zavarok amik kéretlen megszakítást okoznak .
Sziasztok!
Létezik olyan tiltás, miszerint debug módban programból nem lehet írni a configurációs regisztetreket? Konkrétan 33ep256mu806 -on próbálom, de gondolom ha itt nem megy, akkor máshol sem. relase módban rendben működik, debbug esetén kiakad azzal hogy Idézet: „The target device is not ready for debugging. Please check your configuration bit settings and program the device before proceeding. The most common causes for this failure are oscillator and/or PGC/PGD settings.” De utána kiolvasva látszik, hogy ilyenkor is átírta, csak a debug áll meg.
Látom már kapisgálod, de azt kell maszkolni !
szerk.: Bocs, azt hittem spgabor írta, nem Neled szólt A hozzászólás módosítva: Dec 16, 2014
Debug előtt debug módban leforditod és felprogramozod?
A release módban lefordított program nem jó debuggolásra.
Én az igazgatót is maszkolnám.
Vagy inkább tiltanám. A hozzászólás módosítva: Dec 16, 2014
Az már durva, látszik, hogy nem suliban dolgozol, de ne off-oljunk tovább !
Ez így nagyon korrekt volt.
Átolvastam a 16f628 adatlapjának ide vonatkozó szakaszait is. Elméletben nem is volt vele gond, csak kicsit száraz volt. Viszont a gyakorlati megvalósítására assembly kódokat találtam csak, ezért azt megvallom őszintén, félre is raktam. A timert amúgy úgy szeretném megvalósítani, hogy ha az RA2-n lévő gombbal a pic lábát a földre húzom, akkor induljon a visszaszámlálás.
Örülök, hogy segített!
Idézet: „A timert amúgy úgy szeretném megvalósítani, hogy ha az RA2-n lévő gombbal a pic lábát a földre húzom, akkor induljon a visszaszámlálás.” Ez egy feltétel a TIMER indításához ( arra figyelj, hogy ezek a TIMER-ek CSAK előre számolnak egy beállítható kezdőértéktől és ha elérik a legnagyobb megszámolható számot / 8 vagy 16 bit /, akkor a következő impulzus hatására túlcsordul, ami bebillenti a jelzőbitet /pl.TMR0IF/! A léptetés sebességét tudod változtatni órajellel, osztókkal ). A hozzászólás módosítva: Dec 16, 2014
Igen, ebben már kaptam segítséget egy korábbi hozzászólásban.
Nem írtam még, hogy a tanárnak minden "közbeszólásnál" meg kell jegyeznie, hogy hol járt és tudja majd folytatni ( ha ügyes, akkor egy tanulóval felíratja egy papírra --> erre való a veremtár! )!
Lehet olyan problémája a tanárnak, hogy a táblára felírt információkat a megszakítás közben le kell törölnie ( hogy legyen helye!), miközben a tanulónak magyaráz, ilyenkor azokat is "fel kell írnia" előtte ( ez a szükséges változók mentése ), majd a "diskurzus" után újra felírnia ( változók visszatöltése !)! A hozzászólás módosítva: Dec 16, 2014
|
Bejelentkezés
Hirdetés |