Fórum témák
» Több friss téma |
Ha erre van szükséged, akkor használj pic18f45k50-t. Azon egymástól függetlenül lehet állítgatni. Persze elképzelhető, hogy máshol is módosítanod kell a programodat, mert kicsit eltérnek a perifériák.
Köszi!
Következő problémám: használnám a VREF+, VREF- lábakat is, ami azonos az AN2, AN3-al ... de nekem 4 analóg bemenet kéne. Az úgy működik, hogy AN0-AN5-ig állítom be az analóg bemeneteket, és a AN0, AN1, AN4, AN5-öt használom, miközben a referencia feszt a VREF lábakra adom?
Köszi, de szegény ember vízzel főz ... azaz próbálom 18F4550-el megoldani mert ez van itthon!
Igen, működik. Az ADCON1 regiszterbe bináris 0011 1001-et (0x39-et) írnék.
Sziasztok!
Lehet használni az RB6-RB7 lábakat kimenetnek a PIC felprogramozása után? Az LCD kimenetet akarom rárakni egy portra, de csak a B portnak van meg mind a 8 lába, csak nem tudom hogy lehet-e használni mindent ha a 6-7-es lábon van a programozó. Előre is köszi.
Program futása közben lehet használni minden további nélkül. Gond ott lehet, ha programozáskor az ott lévő eszköz terheli a programozó kimeneteit.
Értem köszi. Akkor amikor épp feltöltöm a progit akkor vegyem le az RB6-RB7 ről az LCD-hez csatolt lábakat?
Mondjuk az LCD D6, D7 lábát raknám rá értelemszerűen.
Kivétel nélkül, minden program elején, érdemes indulás előtt betenni egy késleltetést, hogy a programozónak legyen ideje átvenni az irányítást. Ez akkor elengedhetetlen amikor a programozó lábakat kimenetnek használod.
Azt is meg lehet tenni, hogy a memória ellenőrző összegét kiszámítod.
Mivel az RB7 és RB6 lábra bemenetet teszel, ezek nem fogják zavarni a programozást.
A program elején a várakozás csak akkor kell, ha ezeket a lábakat kimenetnek (vagy T1 oszcillátornak - egyes típusokon) használod és a belső oszcillátort használod és a MCLR lábat bemenetnek használod. A hangsúly az és -eken van.
Rendben, köszi. Mennyi legyen ez a késleltetés?
Hp41C: köszi értem, de az RB6 és RB7 lábakra kimenetet rakok nem bemenetet. D6, D7 az LCD lábai oda infót küldök, nem akarok onnan olvasni.
Bekapcsoláskori 100 ms bőven elég, még talán túl sok is. Tudommal olyan 10 - 20 ms körül van a biztonságos minimum.
Az is megoldás, hogy átrendezve a bekapcsoláskori programrészeket, ezen lábak kimenetként való használata legyen az utolsó lépés a fő programciklus előtt. Már ha sietni kell valamiért bekapcsoláskor.
Miért nem használod az LCD-t 4 bites módban?
Nézőpont kérdése. Az LCD bemenetét kötöd az RB6 és RB7 -re. Ha biztosítod, hogy az LCD E bemenete alacsony szinten legyen, akkor nem terheled vele a programozót sem.
Értem, köszi, ezt jó tudni.
Pali79: még csak tanulgatom a kezelését 8 biten kicsit talán egyszerűbb, 4 biten egy kicsit macerásabb Meg arra gondoltam hogy "valószínű" egy shift regiszterrel fogom használni a közeljövőben minden lcd-s projektemet, úgyhogy egyenlőre maradok a 8bites módnál. Bakman: lehet bekeveredtem ezzel az időzítéssel kapcsolatban, de nem az lcd inicializálás előtti késleltetésre gondoltok? Én azt 15ms -re állítottam.
Nem, nem arra gondolunk. Ha Reset után (pl. bekapcsoláskor) a lehető leggyorsabban előállítod Hp41C által leírt feltételeket, problémás lehet a programozás.
Magyarán ha nem sürgős, akkor az egyébként programozásra is használt lábak kimenetre való átkapcsolását késleltesd (Reset után alapesetben minden port bemenet). A legyegyszerűbb megtenni ezt úgy, hogy a teljes program eleve késleltetéssel indul, pl. 20 ms-os várakozással, majd mehet a lábak beállítása. Ennyi idő általában elég a programozónak ahhoz, hogy a kontrollerben lévő program futását megállítsa és programozási üzemmódba kapcsolja át.
Jaaa, értem már, köszi. Most már minden tiszta. Ezt a késleltetést amúgy érdemes minden esetben beletenni az elejére, vagy csak akkor ha a programozó lábakat is I/O -ként szeretném használni?
Könnyebb megszokni, hogy mindig legyen
A hozzászólás módosítva: Jan 21, 2021
Nálam az alábbi sorrend szokott lenni a program elején:
OSCCON regiszter beállítása (opcionális) 100 ms késletetés (mindig) Hacsak nem valami ultra gyors reagálás kell bekapcsoláskor/Reset után, tegyél ilyesmit a program elejére. pipinek igaza van, könnyebb megszokni.
Rendben, így fogom csinálni én is mostantól, köszi.
pipi: köszi neked is.
Én meg ellenkezőleg pont ellenkezőleg szoktam eljárni.
Amint lehetséges, először a portokat állítom be, a lehető legrövidebb ideig legyenek High-Z-n azok a lábak amiket kimenetnek szánok (főleg ha push-pull). A PGED és PGEC lábakat csak bemenetként használok és izoláló ellenállással, hogy a programozót ne terheljem. Az izoláló ellenállás miatt ezen a lábon már esélytelen a gyors adatátvitel, ezért ide csakis az alacsony frekis, bemeneteket kötöm, ahol a slew rate nem számít. Pl egy regulátor Power good kivezetése. A programozó programozáskor resetbe állítja a PIC-et nem? Vagyis minden IO High-Z. A hozzászólás módosítva: Jan 21, 2021
De, oda állítja, ha tudja. Hp41C leírta, milyen esetben lehet problémás a programozás.
Aha értem. A PIC32-n a MCLR láb ha jól tudom dedikált, semmi másra nem lehet használni. Vagyis én még csak olyannal találkoztam eddig. Elméletileg ott ilyen probléma nem lehet.
Ja kérem, így már más a leányzó fekvése.
A PIC32 család tagjai programozáskor nem igényelnek extra feszültséget valahogy meg kell oldani, hogy mégis programozási módba lehessen lépni.
Eddig nem vettem észre, hogy PIC32 családról van szó. Egyébként, ha más típust LVP módba kapcsolunk, a MCLR dedikált lesz. A hozzászólás módosítva: Jan 21, 2021
Én nem olvastam eleget vissza pontosan milyen kontrollerről van szó, elnézést.
Aztán nálam már csak PIC32-ről szól a világ egy ideje...
Sziasztok!
A problémából megint nem látom a kiutat. A programot PIC16F887-re írom, mikroc alatt. A probléma ami a segítségkérésre ösztönzött, a következő: van egy while ciklus, amibe egy jelzőbit segítségével lépek be, majd egy-egy újabb while ciklusban tölteném fel az eeprom-ot, a program futásához szükséges adatokkal. A program belép a while ciklusba, az adatok beltöltéséhez, de a csatorna kiírás után kilép és az idő törtrészének első szájegyéhez ugrik, pedig erre a gombokról nem kapott utasitást.
Az "allapot3.F5", "allapot3.F7" stb. egy-egy változó vagy közvetlen bemenet olvasás is egyben? A sok ilyen illetve ehhez hasonló érték nincs nullázva a kód elején, csak kettő: allapot3.F5=0; allapot3.F6=0;
Ha ezek egy lépésben bemenet olvasások is, akkor lehet, hogy adott bemenet alacsony szinten van. A feltételes vizsgálatoknál is érzek némi zavart az erőben, lásd melléklet. Ha jól értem a rendszert, akkor az allapot3.F6 = 1; sor már független az előző feltételvizsgálattól, az mindenképpen végrehajtódik, kilép a ciklusból. Következik a "locsolási idő egész része", de az "allapot3.F7" valamiért egy (a kód elején nincs nullázva), így az a rész le sem fut, azután lép be a "tört idő első szám ciklusba". A kód így eléggé maszatos, nehezen követhető. Ez segít kicsit átláthatóbbá tenni: C Beautifier Online.
Köszönöm szépen a választ. Az "allapot" 1-2-3-4 változók bitjeinek állapota a ciklusban maradás feltétele. A cikluban maradás feltétele az. hogy az adott jezőbit értéke 0 legyen, tehát amig nem kap 1 értéket benn kéne maradni a ciklusban. Ha viszont az adott ciklusban 1 értéket kap, el kell hagynia a ciklust és abba a ciklusba kéne lépnie, amelyik hozzá a legközelebbi olyan, amelyiknek a jezőbit értéke megegyezik a feltétellel.
Megoldódott a probléma, átírtam a ciklusokat, switch-case szerkezetre. Jól működik!
|
Bejelentkezés
Hirdetés |