Fórum témák
» Több friss téma |
Szia!
Azért nem működik a megszakítás, mert ez a sor: "INTCONbits.IPEN = 1; // Megszakítás prioritás engedélyezve" bekapcsolja a kétszintű megszakítást, viszont sehol sem látom, hogy hol rendeled a timer2 megszakítását a magas , vagy az alacsony priorítású megszakításhoz. Ha nem piszkálod az INTCONbits.IPEN bitet, akkor csak "normál" megszakítású üzemmód van,ekkor simán működik ....
Értem, köszi, ismét tanultam egy jó dolgot ezentúl így csinálom. Hex-ben azért írok ritkábban, mert előbb látom a binárist és azt kellene átváltanom hex-re. Decimálisról nem is beszélve.
Elolvastam az adatlapon amit mondasz, megértettem most már mindent. Köszi mégegyszer.
Sziasztok,
Lehet mérni ellenállást egy PIC-el? Azt szeretném, hogy X db helyre beteszek X db ellenállást, ezt mind rákötöm PIC-re és az megmondja nekem, ha pl, levágtam X db ellenállást az adott áramkörről. pl. van 5 db ellenállásom, 220ohm, 1k, 2k, 2.2k, 3k. Ezek mind 1-1 szál vezetéken vannak rajta. Ha az egyik ellenállást levágják, akkor szeretném tudni melyiket. Lehet ilyet?
Lehet.
A/D bemenetre teszel egy feszültségosztót, tehát van egy fix ellenállásod mondjuk alul, felülre rakod az összeset. Ha egyet elvágnak, megváltozik a felső rész ellenállása és így a rajtuk eső feszültség. Úgy kell megválasztani az alsó értékét, hogy a legszélsőségesebben változzon a fesz. Vagy úgy is meg lehet egyszerűbben csinálni, hogy 5db külön bemenetre teszed az ellenállásokat, ismert alsó értékekkel. De ilyenkor tudnod kell, melyik ellenállás hova volt kötve. Idézet: Ezt részletezd alaposan de ha lehet, inkább rajzold le. Messze nem egyértelmű, mit is szeretnél. „Ezek mind 1-1 szál vezetéken vannak rajta.”
Sziasztok!
Kaptam egy hétvégi házit amit egy kicsit furcsálok. Ha van valakinek kedve átnézni és ha rábólint akkor neki állok. Ha nem akkor nem, mert szerintem egy kicsit furcsán számolgat a tanár.
Azt elfelejtetem mondani, hogy ez Mikrovezérlők alkalmazástechnikája, és C programozás.
Közvetlenül ellenállást azt nem. Feszültséget ellenben lehet a benne levő A/D átalakítóval. Csak azt a feladatot kell megoldanod, hogy az ellenállást feszültséggé alakítsd. Ehhez javaslom, hogy tanulmányozd át egy multiméter kapcsolási rajzát, mert az sem tud direkt ellenállást mérni, hanem az is először feszültséggé alakítja.
Sziasztok!
Van egy kis problémám a Timer0 időzítésével. Akármit csinálok a számolt érték kb. 4x -ese jelenik meg a kimeneten. Már mindenfélét próbáltam állítgatni, de semmi változás. Vagy a számlálót nem jól állítottam be, vagy az oszcillátort. Mi lehet a probléma? Előre is köszi a segítséget!
Hali!
A beállítások jónak tűnnek. Így próbáld.
Nem jó a fő programnak átadni, hogy milyen megszakítás történt és ott végezni minden feladatot (ha sok az egyéb feladata, nem fogja időben végrehajtani). A megszakításban elvégzendő dolgokat ott helyben kell végrehajtani, mielőtt törlöd az IF bitet. A fő programnak meg a saját dolgával kell törődnie. A TMR0H-t előbb kell beírni, mert az pufferelt és a TMR0L beírásakor az is átmásolódik a Timer-be.
Értem, köszönöm. Este leszek otthon gépnél akkor kipróbálom és jelzem hogy mi lett az eredmény.
Én pont úgy tanultam, hogy a megszakításkor lefutó függvényben minél rövidebben kell megfogalmazni a megszakítás további teendőit, és inkább a while -ban kell feldolgozni és a további utasításokat végrehajtatni. De hiszek neked, így csinálom ahogy írtad, köszi.
Még egy kérdés eszembe jutott. Amit írtál az ISR()-r, az mennyi idő alatt hajtódik végre?
Hogy kell ezt kiszámolni? Én úgy gondolom, (nem biztos hogy jól tanultam), de ha 16MHz az órajel akkor az utasításciklus 16MHz/4 = 4MHz. Ez 250ns/periódus ha jól számolok. Vagyis akkor 1 utasítás 250ns ideig tart. Ami a ciklus törzsében van 4 sor az 4 utasításnak fele meg (akkor 4 * 250ns = 1us)? Vagy egy utasításciklus a kiértékelés (mondjuk megkeresi a TMR0H regisztert) és az értékadás is egy plusz utasításciklus? Ha igen akkor egy sor ( TMR0H = 255; ) egy vagy két utasításciklus alatt hajtódik végre? Gondolom maga az if() feltétel kiértékelése is 1 utasításciklus alatt megy végbe (250ns), akkor az egész függvény 1.25us ideig tart mire a while()-ra kerül a program végrehajtása? Amikor az Isr() lefut ez alatt az idő alatt a while() megáll? Várakozik? Bocs ha túl sokat kérdezek de ezeket nagyon fontos megtanulnom
Még valamit nem értek, Bocsi
Idézlek: Idézet: „A TMR0H-t előbb kell beírni, mert az pufferelt és a TMR0L beírásakor az is átmásolódik a Timer-be.” A TMR0H:TMR0L az maga a számláló ha jól tudom (16biten). Hogy kell értelmezni ezt a puffer dolgot? Gondolom az egy átmeneti tároló egy foglalt memóriaterület, de akkor nem mindegy a sorrend? Úgyis csak akkor záródik le az áttöltés ha minden bit a helyére került.
Ez c. Nincs exact megfelelés. Ha ciklusidőt akarsz, assembly-t kell használni.
Vagy bitet bebillenteni és szkóppal nézni.
E sorhoz több utasítás is fordul. Menteni kell a W és a STATUS regiszterek értékét. Minimálisan 3 utasítás kell hozzá, de a fordító beállításai több munkát is adhatnak.
A bit vizsgálata valóban 1 utasítás, de a feltétel nem teljesülésekor ugrani kell, így 2 utasításnyi időt kell számolni.
Tudni kellene a fhasznált kontroller típusát. PIC18 esetén 1, PIC12-PIC16 esetén 2 utasítás.
2 utasítás.
Minimum 1 utasítás, de függ attól, hogy hova foglaltuk a változót - bankváltás.
Minimum 1 utasítás, de függ attól, hogy hova foglaltuk a változót - bankváltás.
A visszatéréskor a mentett értékeket vissza kell állítani a STAUS és a W regiszterekbe, ill. amit még előírt a fordító. Minimum 4 utasítás és még egy a retfie. Az MpLab -ban van lehetőség programrészletek futási idejét "megmérni". Ki kell választani a Simulator -t nyomkövetőnek, újra kell fordítania kódot. A rutin elejére kell állítani a programszámlálót. Be kell állítani az órajel frekvenciáját és el kell helyezni egy töréspontot a rutin végére. A Stopwatch ablakot megnyitva láthatjuk a végrehajtott utasítások számát és idejét is. A hozzászólás módosítva: Dec 17, 2020
Értem, köszi, a fordító idejére nem is gondoltam. A cél a későbbiekben mindenképp Assembly de C-ben programozok ezért gondoltam C-ben kezdeni a PIC programozást hogy mihamarabb legyen sikerélményem.
A "mentorom" is (aki szintén fórum tag) az Assembly-t javasolja de őszintén megvallva egy kicsit félek tőle. Nagyjából 8 éve programozok, (nem ide való nyelveken) ebből még nincs 1 éve C-ben. Belenéztem az Assemblybe is tavaly nyáron és túl soknak találtam, ezért inkább a C-.t választottam. Így csak a 18F sorozattal szimpatizálok egyenlőre. Ettől függetlenül nagyon tetszik az Assembly, úgyhogy biztos hogy meg fogom tanulni csak egy kis időt kérek még rá. Az MPLAB debbuggerjét még nem nagyon vágom, úgyhogy rajta vagyok, csak sajna nagyon kevés a segítség. A suliban megcsináltam amit írtál, Stopwatch, breakpoint ..stb csak már elfelejtetem De rajta vagyok, ígérem! Jaa, a PIC amiről szó van az a PIC18F27K40 bbalázs: ez neked is szólt. A hozzászólás módosítva: Dec 17, 2020
Hali!
Úgy látom a legtöbb kérdésre már választ kaptál. Ennél a PIC-nél a Timer0 16bit-es módjánál a TMR0H egy átmeneti puffer, a TMR0L olvasásakor kerül bele az aktuális érték (azt hiszem debug-kor nem is látod számlálni a TMR0H-t), illetve a TMR0L beírásakor kerül át a valódi regiszterbe a TMR0H-ból. Így biztosítják a pontos érték kiolvasását/beírását. Ez a puffer a timerhez tartozik, nem foglal több memóriát. Lásd adatlap. Nekem van olyan programom, ahol fix 20ms a ciklusidő. Ezt egy timer hozza létre megszakítással. Minden művelet ebben a 20ms-ben történik (kicsit PLC szerűen), nem tudom mennyi idő alatt, sosem mértem meg. Itt semmit nem adok át a fő programnak. A fő program csak az őrkutya buksiját simogatja állandóan. Megszakításban a hosszú időzítéseket kell kerülni, mert akkor a fő programodat úgy fogod látni, mintha akadna/lefagyna.
Köszi, én nyugodtan alszom akkor is, ha nincs válasz
Szerintem feladathoz válassz eszközt. Amikor nem időkritikus részek vannak, nyugodtan használj magasabb szintű nyelvet. Ha viszont időzíteni kell komolyabban, akkor megfontolandó az assembly. Én nagyon vad assemblys vagyok (18f-et és PIC24-est is, PC-t is abban programozok), de már vannak kikacsintásaim a C felé, más mikrovezérlők esetén.
Hello!
Így már minden érhető, köszi. Próbáltam mindig arra törekedni hogy a megszakításkor lefutó függvényen belül éppen csak annyi történjen ami nagyon muszáj, és inkább a while-ban dolgozom fel tovább a tennivalókat. Még egy gyors kérdés eszembe jutott: Ahogy Hp41C írta, összeadtam és ha jól számolok akkor minimum 13 utasításciklus kell ahhoz hogy a megszakításkor lefusson az Isr() függvény. Most egy 8MHz-es kristállyal próbálkozom, Így 8MHz/4=2MHz akkor 1/2000000=500ns lesz a periódusidő vagyis az egy utasításciklus ideje. Ha ezt megszorzom 13-al ami az Isr()-hez kell akkor 6.5us szükséges ahhoz hogy megszakításkor lefusson a függvény és utána újra induljon minden. Ezután a while()-ban lévő dolgok lefutási ideje is nagyjából ugyanennyi lehet (sacc). Ez így 13us ideig tart ami 1/13us=76.9kHz, vagyis ekkora a maximum freki amit elő lehet állítani a PIC-el?
Szeretném én is majd egyszer ilyen szinten megtanulni, bár PC-re már tényleg elég durva
Szerintem ne bonyolódj bele ebbe a számolgatásba. C-nél nem igazán tudod, hogy mit hoz össze a fordító a háttérben, így pontosan kiszámolni nem sok esélyed van.
Ha pontosan akarsz mérni/előállítani egy jelet, akkor Assembly. Vagy az újabb PIC-ekben van sok minden jó dolog, ami erre használható (Kapuzható és összefűzhető számlálók, CLC, DSM, SMT, stb), így akár hardverből össze lehet hozni a kritikus részeket.
Sziasztok.
Most irok ide elöször, de segitsegeteket kernem. Utanepitek egy inverteres hegesztö gepet es mint a kepen is latszik PIC IC.-vel vannak a höerzekelök illetve a digitalis ampermerö keszitve. Tudna-e valaki ebben segiteni, hogy hogyan kell elkesziteni, esetleg valakinek van-e ilyen rajza vagy hogy hol talalok ilyen rajzot. A fenykepen jol latszik, hogy PIC16F877A van benne. Megjegyeznem, hogy aki epitette az invertert nem tette közze a panel tervet, meg semmit. Minden megoldas, ötlet, bar mi ami a megoldashoz közelebb visz erdekel. Persze esetleg valami program ami vezerli az egeszet. A valaszokat elöre is köszönöm. Üdv.: Gabor A hozzászólás módosítva: Dec 21, 2020
Hogyan akarod utánépíteni, ha semmilyen dokumentáció nincs róla?
Inkább itt nézz szét: Bővebben: Link.
Ha szerencséd van a készítő nem tolta rá a picre a kódvédelmet , akkor kiolvasható (és lementhető) a pic tartalma,pickit2-pickit3 pic égetővel .
Ha esetleg a programozás sem menne. megoldható 1db
LM339 IC és 1DB ICL7107 -es ic-vel is nem kell feltétlen PIC-et programozni. Ahőmérsékletet a komparátorok ellenőrzik, a kijelzést meg felügyeli a másik. A hegesztő vezérlésébe eleve nem szól bele a PIC üdv.:Foxi A hozzászólás módosítva: Dec 21, 2020
Nem ismerem a rendszert de nagy valószínűséggel a PIC csak mérő/ellenőrző egység, a vezérlésben nem játszik szerepet. Esetleg kapcsolgatja a ventilátorokat. Könnyen lehet, hogy anélkül is működik bőven. A hegesztőáram szabályzását nem olyan egyszerű (talán nem is lehet) megoldani ilyen kaliberű mikrokontrollerrel.
Kicsit körbenéztem, 25 000 Ft-ért már lehet kapni hegesztőgépeket. Nem biztos, hogy megéri otthon ilyennel foglalkozni. Amennyiben az építés öröme hiányzik, akkor nem szóltam.
Köszönöm a reagalasokat.
A geppel kapcsolatban minden dokumentacio meg van, csak a PIC.-es es a kijelzö panelrol nincs semmi. A PiIC mint Bakman valaszolt, csak merö es ellenörzö funkiot tölt be, semmi egyebet. Ha nincs benne attol a gep meg müködik. Viszont nekem tetszik az az egesz. 25000Ft az meg milyen hegesztö gep, valami jo kinai amibe szinte annyi minden van benne amivel eppen müködik, az egy...... nem akarom titulalni. A kod kiolvasas sem lehetseges, mert ki tudja mi van azzal aki keszitette a gepet, hisz mar 11 honapja nincs fent a forumon. Egyenlöre foxi63 latom a leg jarhatobb utnak. Hogyan gondoltad, valami ötlet,rajz stb. Üdv.: Gabor A hozzászólás módosítva: Dec 21, 2020
Lehet tudni pontosan, hogy mit mér, mi alapján?
Mert ha pl. kap egy 0-5V-ig terjedő jelet az árambeállításnak megfelelően, arra könnyen összedobható egy kijelzés.
Igen lehet tudni mit mer, elöször is hömersekletet harom szenzoron keresztül. A masik az aram erösseget,a potmeter elforgatasaval a kijelzön csökken illetve nönek a szamok az az max allasban kb 140 minimum allasban kb 20 ampert mutat.
|
Bejelentkezés
Hirdetés |