Fórum témák
» Több friss téma |
Fórum » PIC programozás
Tulajdonkepp nincs tiltva, de ha ilyet csinalsz nagyon kell tudni hogyan mukodik a PIC es ezen belul a megszakitas vezerlo -- es persze nagyon jelentos okod kell legyen, hogy ilyet csinalj...
Amugy tul azon amit Watt mester mondott meg az is bajos, hogy a megszakitas kezelo elejen elugrasz. A baj az, hogy nem tudhatod, hogy a PAGESEL hogyan all a megszakitas pillanataban, es ez problemat okozhat (valoszinuleg kisebb projectecben nem jon elo hiba, de nem egy szerencses dolog erre raszokni!) Ha el kell ugrani, akkor az ugras elott meg kell csinalni a kontextus mentest es utana beallitani a page-et...
Mondjuk gondolom a RETFIE előtt.
Egyébként próbáltam már, csak mondom minek elmenteni a Workot.. Aztán koppant hogy de h*lye vagyok hát bárhol megtörténhet a megszakítás... Viszont most meg működési hiba lépett fel, viszont a a PC úgy tűnik nem ugrál összevissza. Köszi hogy figyelmeztettél! ![]() szerk.: trudnai: már találkoztam ilyesmi problémával, 18F-nél az RCALL utasítás, meg a BRA játszott velem, nem sejtettem hogy olyan messzi van a címke hogy az RCALL meg a BRA "ne érjen" el odáig, ugyanis azthiszem azok csak 8 bites cím-különbséget tudnak átugrani (remélem jól írtam).
Ezt nezd meg, es probald meg igy megirni az IT rutint. Mint a kollega is emlitette, a W es a Status regisztert illik elmenteni, es visszaallitani a megszakitasban. Melle meg esetleg a keslelteto rutin helyett inkabb egy szamlalot, es flaget kellene hasznalni a gomb prellmentesitesre. Ugy is megy a TMR0 IT, tehat nem gond egy plusz szamlaloval megcsinalni.
vilmosd: majd ha hibátlanul megy a progi, akkor megcsinálom timerrel a prellegést.
![]() Egyébként köszönöm hogy írtatok! :yes:
Lásd az előző .asm-et! Én is erre utaltam.
Igen, tudom mit akartál mondani, már akkor rögtön meg is csináltam. :yes:
Elnézést, elnéztem a topicot, valóban a PIC Miértekben volt tárgyalva, de nem kimondottan abban a hsz-ben amit én írtam. Hp41C egyik alkalommal nagyon jól elmagyarázta, milyen zűröket okoz a dolog...
Igen. A cikket érdemes elolvasni! Köszi, hogy előkotortad!
![]() Idézet a cikkből: Idézet: „A GIE 1-re állítása azonnal érvényre jutna, még a visszatérés előtt. A retfie végrehajtása előtt újra a stack -re mentené az aktuális címet és a megszakítási rutinra ugrana, a kontroller belső stack -je csak 8 szintű... Az pedig végkép rossz működéshez vezet, ha a regiszeterek visszaállítása előtt, vagy közben engedélyeznénk a megszakításokat - a mentett értékeket felülírná a megszakítási rutinban beállított értékekkel.”
Na aki ezt kitalálja.
![]() Olyan problémám van, hogy nem azt csinálja a program amit akarok. ![]() Szépen beállítom a GPIO0,1,4,5-öt 1-re, de csak a GPIO4-5 állítódik be. A Logic Analyzer szerint is.... ![]() Ilyennel abszolút nem találkoztam még.
ANSEL regisztert törölted? (Bank1-ben van)
szerk: Le kell tiltani a komparátort is. CMCON = 0x07;
A poén az, hogy ha maszkolom VAGY művelettel (kivan kommentezve fölötte), akkor meg megy. Igen, az ADC kivan kapcsolva (törölve van az ANSEL is...).
Talán a proteus modellezi az RMW problémát. A PIC miértek topikban találhatsz bővebben információt róla.
Read-Modify-Write probléma. Ne bitenként állítsd, vagy pedig várj a billegetések között.
Hogy ez nem jutott eszembe. Most szégyellem magam
![]() El_Pinyo: a proteusban is az volt a helyzet mint a Logic Analyzer-ben.
Jah nem figyeltem, hirtelen megkeveredtem a fejlesztői eszközökben, mert a képen MPLAB SIM van, a korábbi hozzászólásodban meg a proteust emlegetted.
Üdvözlök mindenkit.
Segítséget szeretnék kérni PIC programmódosítással kapcsolatban. Digitális vasútmodell váltókapcsolóját vezérlő PIC programját kellene módosítani. Jelenleg úgy működik, hogy négy váltót vezérel (négy cím, nyolc kimenet). Úgy szeretném módosítani, hogy ne négy címre reagáljon, hanem pl. 16-ra és a kimenetek ne egyesével kapcsolódjanak, hanem binárisan kódolt számok jelenjenek meg a kimeneteken. Aki tud és kedve van hozzá, kérem segítsen. Előre is köszönöm. Üdv:ipijani
Üdvözlök mindenkit.
Segítséget szeretnék kérni PIC programmódosítással kapcsolatban. Digitális vasútmodell váltókapcsolóját vezérlő PIC programját kellene módosítani. Jelenleg úgy működik, hogy négy váltót vezérel (négy cím, nyolc kimenet). Úgy szeretném módosítani, hogy ne négy címre reagáljon, hanem pl. 16-ra és a kimenetek ne egyesével kapcsolódjanak, hanem binárisan kódolt számok jelenjenek meg a kimeneteken. Aki tud és kedve van hozzá, kérem segítsen. Előre is köszönöm. Üdv:ipijani
Köszönöm az érdeklődést.
Nincs hiba, a funkciójának megfelelően működik a kapcsolás, én szeretném az igényeimnek megfelelően átalakítani, aminek az elsődleges feltétele, hogy a PIC programja a kívántak szerint működjön. A lényeg, hogy egy dekóder 4db vasúti váltót tud kezelni (4 váltó= 8 kapcsolt tekercs), mivel nekem az asztalon 25db váltóm van, ehhez 7 áramkört kellene építenem, ami sok idő és pénz. Ezért arra gondoltam, hogy ha a PIC kimeneteit nem egyesével kapcsolgatnám, hanem binárisan kódolva, és összeépíteném pl. 2db 74154-es dekódolóval, rögtön 16 váltót tudnék egy áramkörrel vezérelni. Ott akadtam el, hogy nem tudom, hogy a PIC programját hogyan kell átírni ahhoz, hogy egyszerre több kimenet is bekapcsolódjon. Nem tudom, hogy mennyire kell magyarázni, de a PIC a kapcsolásban DCC jeleket dolgoz fel. Minden váltónak van egy címe és a vezérlőn két gomb a váltó két helyzetének állításához. Az eredeti verzióban a kapcsolás 4 címre reagál (alapból 5től 8-ig), az újban, ha 16 váltóról beszélünk, akkor 16 címre kellene reagálnia pl. 5-től 20-ig. Ezt a két módosítást kellene a programon végrehajtani. Annyit tudok, hogy a Count1-count8 program részletek alatt a 73. sorban kapcsolódnak a kimenetek, de hiába próbálkoztam átírni ezt a részletet nem hozott eredményt. Elég bonyolultan magyaráztam, de remélem azért érthető. Csatoltam az eredet kapcsolást is, így biztosan könnyebb. Előre is köszönöm. count3 btfss action,7 ;62 new action goto t3a ;63 no movf action,w ;64 andlw B'00000111' ;65 mask xorlw B'00000010' ;66 is it output 2a? btfss STATUS,Zbit ;67 yes goto t3b ;68 btfss CV514a,2 ;69 is this bit enabled? goto t3c ;70 no btfss action,3 ;71 on or off goto off3 ;72 bsf PORTA,2 ;73 F2a on bcf PORTA,3 ; ********* clrf tick1 ;74 clrf time3 ;75 start timer bcf action,7 ;76 action done goto ret4 ;77 ********* off3 bcf PORTA,2 ;74 F2a off bcf action,7 ;75 goto ret6 ;76 t3a nop ;65 nop ;66 nop ;67 nop ;68 nop ;69 t3b nop ;70 nop ;71 t3c movlw 3 ;72 get CV516 time on movwf EEARD ;73 bsf f0,rd ;74 movf EEDATA,w ;75 btfsc STATUS,Zbit ;76 if zero then always on goto ret5 ;77 subwf time3,w ;78 compare time btfsc STATUS,Carry ;79 bcf PORTA,2 ;80 time out so put off goto ret2 ![]()
A 74154 egyik kimenete folyamatosan 1, azaz az egyik vátó tekercse folyamatosan meg lenne húzva! Ez szerintem nem lenne jó.
Én párhuzamos bővítő portokkal próbálkoznék(egy PIC lenne az áramkörben és annyi bővítő, amennyire szükség van. Később könnyen lehetne tovább is bővíteni), igaz azokat fel kell tudni konfigurálni, illetve meg kell írni a programot is ami a vezérlő jeleket dekódolja. Ehhez ismerni kellene a DCC protokolt. Gondolom nem túl bonyolult, de ezt nekem is meg kéne tanulnom(és neked is), hogy segíteni tudjak. Ismert az, hogy mennyi címet tud kezelni a master? Mi a master, PC soros porttal, vagy mi vezérli ezt a váltóvezérlőt?
Gyakorlatilag ezt a tablat kell kibovitened:
Termeszetesen a maszkot ugy megvaltoztatni, hogy 0-7 helyett 0-15 -ig legyen jo, utana a rutinokat atirni ill lemasolni es modositani, hogy az uj csatornakat is kezelje. Nade! Nem ertek hozza, nem tudom a vasut modellezes hogy mukodik, de feltunt, hogy ez csatornankent ket portot kezel, raadasul a polaritasat valtogatja! Tehat azzal a modszerrel amit felvazoltl nem tudom hogy fog ez mukodni? Amugy meg egy fontos dolog! Ez a program tele van RMW hibalehetoseggel! Az
koze illene minumum 1 db NOP-ot beszurni! Ja, es meg valami, nem tudom az jo-e ennek a vasutmodell aramkornek, ha 1-1 pillanatra mindket vezetek aktiv magasan van? Mert ha nem, akkor teljesen maskepp kell kapcsolgatni!
Mielőtt árírnád gondold meg... A program 16F84 (16C84) -re íródott, amiben csak a timer0 periféria van (meg az EEProm), de azt sem használja ki. Ebben a programban minden funkció úgy van megoldva, hogy egyben az időzítést is végzi. Ha valamit módosítasz, biztosítani kell, hogy a végrehajtási ideje minden esetben pontosan annyi legyen, mit a módosítás előtt volt, különben a többi funkció romlik el. Erre utal a forrásban a timing oszlop...
Sziasztok!
Találtam egy rövid programot, az lenne a kérdésem, hogy ha más tipusra akarom írni, akkor elég ha csak az include-részeket írom át? (pl: 16f627a) Egyébként szerintetek ez elírás vagy én vagyok amatőr?
1. Nem elég. Nem véletlenül más a típusjelzése, nem csak az includet kell átírni. Volt már itt az oldalon sokszor arról szó, hogy mit kell 16F84-ről 16F627(A)-ra áttérésnél átírni, hadd ne írjuk már le újra.
2. Végülis elírás, mert BANKSEL PORTB kellene, viszont a program működését nem befolyásolja, mivel a PORTA és a PORTB is ugyanabban a bankban van.
Tényleg annyira régi ez a '84-ről áttérés', hogy már a ChipCad oldalán sincs fenn a leírása, itt azonban megtalálod!
Hali!
MPi-c köszi a linket! Potyo, tudom hogy unjátok már mindig ugyan azokat a kérdéseket, de egy kezdőnek mindig végig kell járnia ezt az utat, hogy megtanuljon picelni, és nagyon sokat olvasom a korábbi bejegyzéseket is és tisztul a kép, de van amire nem lelek rá egyből... azért köszi |
Bejelentkezés
Hirdetés |