Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   489 / 1319
(#) robing16 válasza watt hozzászólására (») Máj 21, 2009 /
 
Szia Watt

Igen, erősen nézegettem azt az oldalt, szinte meg is tanultam

Hogy milyen nyelven? Háát, c# és társait nem nagyon szeretem, kivéve PHP- ami ugye C# nyelven van, de ez nem ide tartozik...

Sima Assembler, vagy pontosan nem tudom hogy nevezik, felraktam egy példa progit, ezt én írtam, nem sok mindent csinál, sőőt még nem is próbáltam ki (nem volt mivel)


Tehát, ha jól tudom, és jól értem, előbb a Break-ot kell figyelni?

4segmens.asm
    
(#) olala hozzászólása Máj 21, 2009 /
 
Hello!

Elérkeztem a tanulás során a megszakításokhoz, és írkáltam egy-két kis ledvillogtató progit, ami különböző egyszerű effekteket csinál interrouptok hatására. Az egyik megszakítást a Timer0, a másikat pedig az Int0 adja. Mikrokapcsolót használok az Int0-án, de sajnos előjött a pergés problémája. Potyo egy régebbi hozzászólását idézném, és ehhez lenne egy kérdésem.
Idézet:
„Egyet szögezzünk le: a külső megszakítás nem a pergésre hajlamos jelek számára van kitalálva!”
.
A kérdésem az lenne ezzel kapcsolatban, hogy alapvetően egy eszköz használata során, ha különbötő funkciógombok lenyomására szeretnénk reagálni, akkor az érdemesebb megszakításként kezelni, mint állandóan ciklikusan ellenőrízgetni, hogy vajon lenyomták e már, nem? Tehát, hiába nem kapcsolókhoz van kitalálva, ha egyszer szükség van rá, akkor nem kell elzárkózni a használatától. Gondolkodtam azon, hogy hardveresen hogyan lehetne lekezelni a dolgokat, és aztán a PIC-et a megszakításkor már csak kész tények elé állítani, találtam is egy kapcsolást Topi egyik cikkében, de ez egy logikai áramkörös megoldás (ha jól értelmeztem). Egyszerűbb alkatrészelből nem lehet megoldani ezt hardverszinten?
Elnézést kérek azoktól, akiknek már nagyon elege van ebből a témából, de erre még nem találtam mintát itt a fórumon.

üdv!
(#) trudnai válasza robing16 hozzászólására (») Máj 21, 2009 /
 
Idézet:
„Hogy milyen nyelven? Háát, c# és társait nem nagyon szeretem, kivéve PHP- ami ugye C# nyelven van, de ez nem ide tartozik...”


??? C# ? Hogy jon ez a PIC Miertekbe?

Idézet:
„#include ; Meghívjuk a Parancs Listát”


Heh???

Na jo, lehet ma nagyon negativ vagyok...
(#) potyo válasza olala hozzászólására (») Máj 21, 2009 / 4
 
Szerintem nem okoz jelentős terhelést a kontroller számára egy Timerrel figyelni a bemeneteket és szoftveresen pergésmentesíteni, ráadásul nemis időkritikus a gombra reagálás. Vagy ha már ez a kis terhelés probléma, akkor ott már nem biztos, hogy a kontroller alkalmas a feladatra, vagy esetleg valamivel magasabb órajelen kellene járatni. Szóval én nem használnék külső megszakítást nyomógombokhoz, kivéve ha a nyomógombnak fel kell ébresztenie a kontrollert alvó állapotból. De ott is csak a felébresztés az, amit arra bíznék, magát a gomb lekezelését már nem.
(#) olala válasza potyo hozzászólására (») Máj 21, 2009 /
 
Értem, és köszi a választ. Csak a kíváncsiság dolgozott már megint bennem.
(#) skeletornb válasza trudnai hozzászólására (») Máj 21, 2009 / 4
 
Potyo megelőzött, egy másik számlálóval bizonyos ideig letiltod a külső megszakítást, majd ha letelt az idő, törlöd a jelzőbitet és engedélyezed újból a megszakítást. Gombok vizsgálatára inkább használd a portB változását jelző megszakítást. A megszakítás, csak a változást jelzi, a megszakításban pedig lekezeled az adott gomb funkcióját. Emberi kézzel történő gombnyomás ideje jóval hosszabb mint a megszakítás bekövetkezése és a port vizsgálata. A segédszemlálós pergésmentesítés itt is használható.
(#) skeletornb válasza skeletornb hozzászólására (») Máj 21, 2009 /
 
Elnézést, a választ olala-nak szántam.
(#) watt válasza robing16 hozzászólására (») Máj 21, 2009 /
 
A programodhoz nem sokat tudok hozzá fűzni. Javaslom, hogy próbáld meg az MPLAB szimulátorát kiismerni, használni, megérteni mi mit okoz.
Sok esetben az az érzésem, hogy csak felületes és vélt következtetéseid vannak, és erre akarsz légvárat építeni.

Azt mondod megtanultad az oldalt, de még mindig azt kérded, hogy hogyan kell lekezelni a folyamatot. Az oldalon tökéletesen le van írva, mit hogyan kellene tenned. Jó nincs lekódolva, de ha magad akarod írni a kódot, akkor nem csak az assembler nyelvet kell megismerned, hanem az eszközt, a kommunikációt, és az elektromos hátteret is. Én azt saccolom, hogy neked ez néhány hónapos meló lesz, akkor is, ha hajlandó leszel végre lépésről lépésre haladni, és megérteni a folyamatokat.
Egyébként jól mondod, először a Break-ot kell figyelni, de ez csak az elmélet. Azon is töpprengj el, hogy ezt hogy kódolod le! Nagyon elvi síkon vagy, semmi konkrétum, sok szöveg! Azért nehogy feladd!
(#) olala válasza skeletornb hozzászólására (») Máj 21, 2009 /
 
Sejtettem hogy nekem szólt az üzeneted.
Ezen a számlálós, letiltós eljáráson már korábban gondolkodtam, meg is csináltam azt, hogy az esemény lekezelésének első sorában kikapcsoltam a külső megszakítás, meg töröltem a flagbitet, majd elintéztem a teendőket, aztán interrouptokat újra engedélyeztem. De az volt a baj, hogy a PIC ettől függetlenül számolja a beérkező megszakításikérelmeket (ami máskor nem lenne baj, csak most a pergés miatt), és kétszer csinálta meg az eljárást, de olyan is volt hogy sikerült csak egyszer (biztos baromi gyorsan nyomtam a gombot ).
PortB4:7 megszakítás meg az Int0 között nem érzem a különbséget. Az rendben van, hogy felfutó él és lefutó él, ezt értem, de a végeredmény mindenféleképpen egy megszakító flag lesz, ami beléptet a megszakításba. Vagy a különbséget abban kellene látnom, hogy a PortB4:7 esetén egy kalap alá vesz 4 legetséges portot, az Int0 meg egy kitüntetett és egyértelműen meghatározott flagot ad?
(#) skeletornb válasza olala hozzászólására (») Máj 21, 2009 /
 
Éppen ezért ne a megszakítás kiszolgálása végén engedélyezd újra a megszakítást, hanem amikor lefut a számláló. Ha a számláló késleltetése sem elég, akkor egy regiszterrel tovább többszörözheted az időt.

Azon túl, hogy a külső megszakítás korlátozódik a portB0-ra, ez a megszakítás felfutó, vagy lefutó élre aktivizálódik. A portB4:7 pedig állípotváltozásra, mindegy milyen az él iránya, ha akármelyik láb értéke változik jön a megszakítás, és neked kell vizsgálni mi történt.
(#) brato hozzászólása Máj 21, 2009 /
 
Üdv!

Valami olyasmit szeretnék PIC -el megvalósítani, hogy az egyik porton négyszögjelet kiadni fokozatmentes állítási lehetőséggel.
Kb. 1Hz - 1KHz között

Tudna valaki felvilágosítást adni hogyan lehet ezt programozástechnikailag megvalósítani.
(#) watt válasza brato hozzászólására (») Máj 21, 2009 /
 
Fokozatmentesen sehogy.
(#) brato válasza watt hozzászólására (») Máj 21, 2009 /
 
Igen, ez igy hülyeség ahogy fogalmaztam, kis lépésekben gondoltam 1 Hz körül.
(#) potyo válasza brato hozzászólására (») Máj 21, 2009 /
 
Azt PWM modullal lehet. Egy kis szoftveres ügyködés is kell hozzá, de simán megoldható az 1Hz-1kHz táv.
(#) brato válasza potyo hozzászólására (») Máj 21, 2009 /
 
Ki tudnád fejteni egy kicsit bővebben? Nem foglalkoztam még a PWM modullal. Az elv érdekel hogyan lehet kivitelezni.
(#) benjami válasza menyus hozzászólására (») Máj 21, 2009 /
 
Nem régen írtam megszakításból működő, blokkolást nem tartalmazó szoftveres soros vevő rutint Pic18 RB1 lábra, de idő hiányában még csak a szimulátorban volt letesztelve. Ha gondolod teszteld le és ha működik akkor használd fel egészséggel.
Ha csak az adást kell kapcsolgatni akkor biztos hogy semmi beérkező adatról nem fogsz lemaradni.

SW-uart.zip
    
(#) potyo válasza brato hozzászólására (») Máj 21, 2009 /
 
Első körben az adatlapban megnézed, hogy működik a PWM modul. Ezután ha kisebb frekvencia kell, akkor szoftveresen mindig akkora kitöltési tényezőt adagolsz be a PWM modulnak, amilyen jelet vársz a kimenetén. Tehát ha neked a PWM modulod mondjuk 1kHz-es jellel dolgozik, de egymásután négyszer 0%-os, majd négyszer 100%-os kitöltési tényezőt adsz neki, akkor a kimenő jeled valójában egy 125Hz-es négyszög lesz. Így gyakorlatilag mixeled a hardveres és szoftveres előállítást. A szotveressel csökkented a frekvenciát, míg a hardver a pontosságért felel.
(#) skeletornb válasza brato hozzászólására (») Máj 21, 2009 /
 
CCP modul compare üzemmódja is jó erre a feladatra, és így minden a hardware-ra van bízva. Csupán Timer1 osztó(i)val kell számolni, hogy mekkora frekvenciáig akarsz elmenni, és hogy mekkora felbontást akarsz.
(#) robing16 válasza watt hozzászólására (») Máj 21, 2009 /
 
Háh, már most kicikizik a forrásfájlom tartalmát Igen, ezt én írtam, és ha valami gond van vele, szólj

Egyébként így könyebb nekem, ha odaírom, mi mit csinál...
Igazából nekem az elméletet gyakorlattá való fordítás nem nagyon szokott menni! Tehát az USART igazi működését elképzelni még nem tudtam...

Nah, valahogyan csak sikerül kitalálni, viszont én használom az MPLAB-ot a 7.50-es az, ami most fenn van, viszont nekem 2 dolog nem megy igazán, az egyik a Megszakítás(Interrupt), hogyan is működik, tehát van egy végtelen ciklusú rész a programban, ez most lehet egy LED villogtatás, és ha egyik bemeneten van egy szintváltozás, akkor hova ugrik a program, és mi az, ami ugrassza

A másik az USART! Köszönöm az eddigi segítségeket, neked is Watt, majd megmutatom, mit sikerült alkotni
(#) Norberto válasza robing16 hozzászólására (») Máj 21, 2009 /
 
ITT olvashatsz egy pár szót a témáról. Érdemes még figyelmesen elolvasni potyo és trudnai válaszait is cpumaster ezen irányú kérdéseire.
(#) pixels válasza robing16 hozzászólására (») Máj 21, 2009 /
 
Idézet:
„a Megszakítás(Interrupt), hogyan is működik, tehát van egy végtelen ciklusú rész a programban, ez most lehet egy LED villogtatás, és ha egyik bemeneten van egy szintváltozás, akkor hova ugrik a program, és mi az, ami ugrassza”


Ami ugrasztja a programot, azok a különböző perifériák, ami a PIC-ben a processzor mellett vannak.

A megszakítást fel lehet fogni egy olyan eljárásnak, amibe a "perifériák lépnek be" egy eseményre reagálva - jelen esetben akkor, ha a PORTB 4..7 bitjein változott valami - megszakítva ezzel a főprogram menetét. Miután az eljárás befejezte a tevékenységét, folytatódik a főprogram. A megszakításkor az "Interrupt Vectorra" (16F-en a 4. programmemória cím) ugrik a processzor, itt kell feldolgozni a perifériától kapott adatokat.

18F-el még nem volt dolgom, nem tudom mi hogy van.
Át kell tanulmányozni az adatlap ide vonatkozó részét (Interrupt Logic vagy valami hasonló a fejezet címe) már az ábrák is sokat segítenek!
(#) trudnai válasza robing16 hozzászólására (») Máj 22, 2009 /
 
Par napja is irtam epp errol itt ezen a forumon valakinek. Ha kicsit vissza olvasgatnal meg is talalnad... De javasolnam, hogy olvasgasd a neten vagy a Konya fele konyvben pl hogy mi az a megszakitas, hogy mukodik, nezd meg a mid-range manualt is es a PIC-ed adatlapjat is. Azert irkaljak ezeket hogy el is olvassak oket...
(#) icserny válasza robing16 hozzászólására (») Máj 22, 2009 /
 
Idézet:
„a Megszakítás(Interrupt), hogyan is működik...”

Itt elolvashatod (7. fejezet)
(#) watt válasza robing16 hozzászólására (») Máj 22, 2009 /
 
Idézet:
„Egyébként így könyebb nekem, ha odaírom, mi mit csinál...”

Mi is így szoktuk, csak mi azt írjuk oda amit tényleg csinál.

Nem lehet fórum keretein belül megtanítani valakit egy digitális számítógép működésére. Mi hiába olvassuk el helyetted a megszakításokról szóló részeket, nem beszélve a többiről, amit szerintem szintén nem olvastál még el!

Ezt abból gondolom, hogy a válaszaid gyakorlatilag offok, mivel a saját problémáidról írsz, a helyett, hogy egy értelmes kérdést feltennél. Azért nem tudsz értelmeset kérdezni, mert fogalmad sincs az alapokról.

Ezt pótold be, és utána nagyon szívesen segítünk megírni a programot. Jó kérdéseket tegyél fel, mert a hogyan kell megoldani a megszakítás kezelését nem jó kérdés. Azok pl. hogy hogyan és miért kell menteni a szükséges regisztereket, milyen címen kezdődik a megszakítás lekezelése, mivel kell visszatérni megszakításból, miért nem kell a megszakításban tiltani a megszakítást, miért kell törölni a megszakításjelzőket és egyeseket miért nem, hogyan tudom hogy mi szakított meg, hogyan kell elágazásokat feltételek szerint megoldani... Végtelen jó kérdés van.(sokra a legjobb válasz, hogy az adat5lap még példákat is ad ezekre, ezért ne vedd rossz néven, ha ezt ajánlja valaki!)
A "hogyan építsek atomreaktort házilag" jellegűek nem megválaszolhatóak, csak cseszegetést fogsz kapni, ha ilyet felteszel! Sok sikert!
(#) NoMen hozzászólása Máj 22, 2009 /
 
Hello
Valaki tudna segíteni?
Elektromos kapumhoz készítettem egy PIC elektronikát de nem tudom megírni a programot. Nem olyan bonyolult de nem tudom megírni. A elképzelés az lenne, hogy van egy impulzus, ami a távirányítótól jön, a két végén lenne egy-egy végállás kapcsoló és a pic eldöntené hogy merre induljon el, még ellnem éri a következő végállás kapcsolót addig mégse állna, még a távirányítóra se reagálna.

KAPU0.JPG
    
(#) trudnai válasza NoMen hozzászólására (») Máj 22, 2009 /
 
Idézet:
„Elektromos kapumhoz készítettem egy PIC elektronikát de nem tudom megírni a programot. Nem olyan bonyolult de nem tudom megírni.”


Persze, szivesen segitunk, meddig jutottal el, vagy hol akadtal el?
(#) MPi-c válasza NoMen hozzászólására (») Máj 22, 2009 /
 
Túl azon, hogy nem sok vállakozót fogsz találni egy komplett program megírására (vagy mégis, mert ez nem túl bonyolult feladat), a kapcsolás sem tökéletes. A PIC körül alapvető dolgok hiányoznak (csak hívószónak: tápszűró kondi, kvarc/rezonátor, MCLR, persze, döntés kérdése, de minden mégse hiányozzon). A Távirányító bemenetet én biztos, hogy az RB0-ra tenném, így lehetne a PIC-et altatásból ébreszteni.
Ezt a feladatot PIC nélkül is meglehet oldani és akkor a programozás sem okozna gondot...
(#) NoMen hozzászólása Máj 22, 2009 /
 
Igazából nem ragaszkodom a pic-hez de ezek voltak itthon és úgy gondoltam nekivágok. De ha valaki tud más megoldást szívesen fogadom. A programot saját magam szeretném megírni, csak segítség kell hogy hogyan vágjak neki. Télég a rajból hiányzik a kvarc!
(#) potyo válasza NoMen hozzászólására (») Máj 22, 2009 /
 
Hát a kvarc az épp nem muszáj, mert van belső oszcillátor, de a tápszűrő az bizony tényleg kell. Az MCLR-t ki lehet kapcsolni, de akkor meg nem jó lebegni hagyni a lábat, tehát ígyis-úgyis kell rá valami fel vagy lehúzó - ezért én kikapcsolnám, és oda tenném az egyik nyomógombot/kapcsolót
(#) NoMen válasza potyo hozzászólására (») Máj 22, 2009 /
 
Oszcillátor ha kivan kapcsolva akkor nem kell semmit rákötni? Kikapcsolás a __config _INTRC_OSC_NOCLKOUT bűvös szóra megy? MCLR hogyan kapcsolom ki? A nyomógombot csak úgy testhez vagy valami ellenállással?
Következő: »»   489 / 1319
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem