Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   958 / 1210
(#) kriszrap válasza pajti2 hozzászólására (») Jún 12, 2017 /
 
5x5x5 ledkockámat szeretném pwmezni ugy hogy az összes szint idömultiplexelve van alapból.
A hozzászólás módosítva: Jún 12, 2017
(#) ktamas66 válasza kriszrap hozzászólására (») Jún 12, 2017 /
 
Nem feltétlenül kell PWM, elég ha ledek kikapcsolási idejét növeled, a bekapcsolási idő rovására, hogy a multiplex frekvencia megmaradjon. Ha ez még a 18F46k22 PIC, miért kell szoftveres PWM, mikor tele van hardveressel? Beállítasz 1-2 ECCP modult és a PSTRxCON regiszterrel arra a lábra adod ki, amelyikre kell (multiplex). Így egy (vagy két) regiszterrel a fényerőt egyszerűen lehet szabályozni.
(#) kriszrap válasza ktamas66 hozzászólására (») Jún 12, 2017 /
 
Sajnos fullosan le vannak foglalva a lábak igy nem tudom sajnos megoldani ezért kell sajnos hardveressel megoldanom((
(#) kissi válasza kriszrap hozzászólására (») Jún 12, 2017 /
 
Nem az a probléma, hogy fullosan le vannak foglalva a lábak, hanem az, hogy előtte nem gondoltad át / nem tudtad, hogy melyik lábra mit célszerű tenni! Ha nem tudod áttenni hardveresre ( lábcsere! ), akkor marad a szoftveres, ami prociidőt foglal és további programozást igényel!
(#) pajti2 válasza kriszrap hozzászólására (») Jún 13, 2017 /
 
Arra az esetre, ha nem sikerül hardveresre áttérni bármi miatt (tényleg az lenne a jobb egyébként), nagy gáz a szoftveressel sincs. Ugyan abból a timer interruptból kezelheted az összes led fényerejét. A timer interruptod nem lesz amiatt gyorsabb, csak több kód kerül majd bele.
(#) kriszrap válasza pajti2 hozzászólására (») Jún 13, 2017 /
 
Egy animációhoz kellene csak a pwm nem minden animációhoz....
(#) usane válasza kriszrap hozzászólására (») Jún 13, 2017 /
 
Elég furán tervezted ezt a kockát.
Animációnként ujraprogramozi, most meg még PWM is.
Csináld azt amit ktamas javasolt, az a legegyszerűbb. Legkevésbé borítja fel a programot. Már ha megfelelően van megírva az időzítés.
(#) pajti2 válasza kriszrap hozzászólására (») Jún 13, 2017 /
 
Ha még sosem használtad a pwm-et semmire - gyaníthatóan onnét fúj a szél - az elején picit nyögvenyelős megérteni, de amúgy nem gáz, és megéri hozzászokni.
(#) usane válasza pajti2 hozzászólására (») Jún 13, 2017 /
 
Semmi nyögvenyelős nincs benne. Ktamás félig el is mondta neki, de guglival is mmegtalálta volna már."T" időalap, "x" bekapcsolt idő, "T-x" kikapcsolt idő, és a felbontás. LED dimmeléshez ennyi bőven elég. Nem láttam a kódot, de nyilván van egy fix időalap, a késleltetést delay-el, vagy NOP-okkal állítja gondolom. Beteszi egy ciklusba az adott effektet, és minden ciklusban változtatja a ki és bekapcsolási idő arányát, nyilván úgy, hogy az összegük állandó maradjon.
Ezeket nyilván nem neked írtam, hanem neki, csak a nyögvenyelős miatt válaszoltam neked
A hozzászólás módosítva: Jún 13, 2017
(#) kriszrap hozzászólása Jún 13, 2017 /
 
Kijelzésem kódja De elötte feltöltöm a tömböket ami a ledek állapotát fogja tartalmazni.
  1. void tombol_rajz(int mill)
  2. {
  3.   int ido;
  4.   char i,k;//fontos
  5.   for(ido=0;ido<mill;ido++)
  6.   {
  7.      for(i=1;i<6;i++)
  8.      {
  9.       nyfigy();
  10.       LATA.RA4=l[i][1];
  11.       LATA.RA3=l[i][2];
  12.       LATA.RA2=l[i][3];
  13.       LATA.RA1=l[i][4];
  14.       LATA.RA0=l[i][5];
  15.  
  16.       LATB.RB7=l[i][6];
  17.       LATB.RB6=l[i][7];
  18.       LATB.RB5=l[i][8];
  19.       LATB.RB4=l[i][9];
  20.       LATB.RB3=l[i][10];
  21.  
  22.       LATB.RB2=l[i][11];
  23.       LATB.RB1=l[i][12];
  24.       LATB.RB0=l[i][13];
  25.       LATD.RD7=l[i][14];
  26.       LATD.RD6=l[i][15];
  27.  
  28.       LATD.RD5=l[i][16];
  29.       LATD.RD4=l[i][17];
  30.       LATC.RC7=l[i][18];
  31.       LATC.RC6=l[i][19];
  32.       LATC.RC5=l[i][20];
  33.  
  34.       LATD.RD0=l[i][21];
  35.       LATD.RD1=l[i][22];
  36.       LATD.RD2=l[i][23];
  37.       LATD.RD3=l[i][24];
  38.       LATC.RC4=l[i][25];
  39.       oszlopok(l[i][0]);
  40.       Delay_us(200);//ennyi ideig villágitanak a ledek
  41.       oszlopok(0);Elsötétitem a ledeket.
  42.       if(megszakitas==1)break;
  43.      }
  44.      if(megszakitas==1)break;
  45.   }
  46.   //tömbök üritése
  47.   for(k=0;k<6;k++)
  48.       for(i=0;i<26;i++)
  49.         l[k][i]=0;
  50. }

megjegyzés: Tudom sokat indexelek.....
PWM-eztem már nem nagy szám..
Idézet:
„Animációnként ujraprogramozi”

Nekem ez meglepő volt mert azt hittem ti is újra írjátok amikor változtattok a kódon. Sorosan még nem csináltam ilyet.....
(#) ktamas66 válasza kriszrap hozzászólására (») Jún 14, 2017 /
 
Egyszerűen a 200-at két részre bontod:
  1. Delay_us(Fenyero);//ennyi ideig villágitanak a ledek
  2. oszlopok(0);Elsötétitem a ledeket.
  3. Delay_us(200-Fenyero);//ennyi ideig nem villágitanak a ledek
(#) foxi63 válasza kriszrap hozzászólására (») Jún 16, 2017 /
 
Szia!
A szoftveres pwm legegyszerűbb módjához 2 regiszter kell. egyikben tárolod az adott pwm kitöltési tényezőt (0-255). a másik pedig egy maradékot tároló regiszter.
Az, hogy milyen sűrűn frissíted az állapotot (frekvencia) az ízlés szerinti, a lényeg:
A maradék regiszterhez hozzáadod a pwm regiszter értékét, és ha az túlcsordul (255<maradék)akkor bekapcsolod a ledet, ha nem akkor pedig ki. Belátható, ha a pwm értéke 1 akkor 255 összeadás után lesz 1 egységnyi ideig 1 ujabb 255 idő pedig szünet.
A lényeg, hogy nem kell delay(xx) és egyéb hókuszpókusz.
(#) sonajkniz hozzászólása Jún 16, 2017 /
 
Eddig nem folytam bele ebbe a multiplexeléses szabályzásba, mert nem értek a C-hez.
De ez kezd egyre bonyolultabb lenni.
Meg szeretném érdeklődni, hogy C-ben nem lehet lekérdezni a timerek flag bitjeit?
Valamint nem lehet törölni a timerek számlálóit? Vagy az nem oldható meg, hogy a program várakozzon a flag bit bebillenésére?
(#) kissi válasza sonajkniz hozzászólására (») Jún 16, 2017 /
 
Szia!
Mindent lehet, csak tudni kell, hogy mit akar az ember és azt hogyan kell megadni, de ott van a kezedben a lehetőség !
(#) sonajkniz válasza kissi hozzászólására (») Jún 16, 2017 /
 
Akkor nem értem ezt a delay-os variálást. Bőven elég hosszú az a várakozás ahhoz, hogy megérje két timerrel felépíteni a szabályzást. Már csak azért is, mert ha timer2 addja a kitöltési időt, akkor akár potméterrel, akár fotoellenállással, de akár a szintenkénti adatok végére biggyesztett értékkel programból is megadható a PWM mértéke.
Arról nem beszélve, hogy míg timer2 flag bitjére várunk, meghívhatunk valamilyen rutint. Pl analóg jel beolvasását.
(#) pajti2 válasza sonajkniz hozzászólására (») Jún 16, 2017 /
 
Természetesen meg lehet csinálni, arra vannak kitalálva az aszinkron program ciklus design, vagy az interruptok. Annyi velük a probléma, hogy részletesebben kell felépíteni az alkalmazást, és egy egyszerűbb esetben fáj a hócipője mindenkinek vacakolni a részletekkel, ha nem muszáj. Majd vacakol miatta akkor a nép, ha muszáj.
(#) kissi válasza sonajkniz hozzászólására (») Jún 16, 2017 /
 
Mindent meg lehet többféleképpen is oldani...A megoldás mikéntje sok mindentől függ: milyen eszközeid vannak, annak mennyire ismered a lehetőségeit, mennyire vagy képzett és alapos, mennyire sürgős, mennyire kell spórolni ( idővel, energiával, pénzzel ), stb. !

Ezek alapján választ mindenki, aztán ezek alapján bírál mindenki !
(#) sonajkniz válasza kissi hozzászólására (») Jún 16, 2017 /
 
Én nem bíráltam. Azzal kezdtem, hogy nem értek a C-hez.
Pajti2 válaszából arra következtetek, hogy ez a megoldás C-ben nehézkes.
Ez számomra nem volt világos. Lévén, hogy assemblyben ez annyira egyszerű, hogy meg sem fordult még a fejemben, hogy multiplexeléshez mást is lehetne használni a timeren kívűl.
(#) kissi válasza sonajkniz hozzászólására (») Jún 16, 2017 /
 
Idézet:
„Én nem bíráltam.”
Nem Rád értettem, általánosságban gondoltam !

C-ben se nehéz megoldani, amit assemblyben meg tudsz csinálni ! Itt inkább arról van szó, hogy asm-ben se gondolna erre, mert nem ismeri a módszert, ill. nehéznek tartaná !
(#) ricsi779 hozzászólása Jún 18, 2017 /
 
Hello
Nekem az lenne a kérdésem,_h Bővebben: Link ezzel a valamivel mondjuk ha jobban bele mélyednék a témába tudnám mondjuk 1korszerübb hűtő digitális részét le ellenőrizni? vagy köze sincs a dolognak hozzá?
Ha butaságot írtam bocsánat érte,_kérem akkor valaki magyarázza el,_h mi kell hozzá?
A hozzászólás módosítva: Jún 19, 2017
(#) kissi válasza ricsi779 hozzászólására (») Jún 18, 2017 /
 
Szia!
Ez egy mikrokontroller programozó, amivel a Microchip cég mikrovezérlői programozhatóak. Ha megtanulsz programozni, akkor esetleg tudsz majd olyan programot írni, amivel a hűtő elektronikája gép nélkül is működtethető ( de ehhez programozni kell, valamint a hűtő működését és áramkörét is nagyon jól kell ismerni ! ) !
(#) Bakman válasza ricsi779 hozzászólására (») Jún 18, 2017 /
 
Nem, ez egy programozó, PIC mikrokontrollereket lehet programozni vele. Egy hűtő, amiben van digitális rész is, csomó dolgot tartalmazhat, amihez több műszer is elkélhet. Összetettebb a dolog, nem olyan egyszerű, hogy rácsatlakozok és mérek, aztán eldöntöm, hogy jó-e vagy sem.
(#) pajti2 válasza ricsi779 hozzászólására (») Jún 18, 2017 /
 
Külön csak a korszerű hűtő esetére: ha meghibásodik, általában kiírja a hibakódot önként is, amiből ki lehet találni, hogy mi baja - benne lesz a hűtő leírásában.

A linkelt eszköz pedig egy mikrovezérlő programozó, aminek vagy van, vagy nincs köze a kiszemelt hűtőgép elektronikájához. Ha tudsz a hűtő elektronikájáról olyan felvételeket csinálni, amin olvasható az ic-k típusjele, akkor tudunk biztosabbat mondani.
(#) Moderátor hozzászólása lastewer hozzászólására (») Jún 19, 2017
 
Apróba tedd!
(#) don_peter hozzászólása Jún 20, 2017 /
 
Srácok, ha 5-10db NorFlash memóriát akarok egy cím és egy adatbusszal vezérelni, akkor kell erősítés?
Egyszerre csak 1 memória lenne használva, de az adatbuszon lógna mind az 5-10 memória.
PIC bírná a mókát?
(#) pajti2 válasza don_peter hozzászólására (») Jún 20, 2017 /
 
Röviden: valószínűleg bírná.

Gondolom nem akarod őket egymással szembe hajtani (a kétirányú jelekre gondolok), és még véletlenül sem nézed el annak az időzítését, hogy mikor kapcsolj irányt.

A nor flash memóriáknak az adatlapján ott találod a bemeneti terhelésüket, a mai cuccok kérnek talán 1 uA-t szivárgási áramnak, de a bemeneti kapacitás (pld 40 pf) egy kvázi feltöltendő kondenzátor, amit töltened kell ahhoz, hogy a jelszint érvényes legyen. Ha párhuzamosan kapcsolsz 10-et, akkor a 40 pf-ból már 400 lett. Ugye játszottál már olyan játékot, hogy feltölteni egy elektrolit kondit árammal, és beledobni egy doboznyi vasszögbe? Na úgy képzeld el, hogy azt az energiát kell mindig beletolnod olyankor, amikor ellentétes irányba töltenéd a bemenetüket. Csak azért, mert a chip select jel nem aktív, attól a bemeneti terhelésük még jelen van a vonalon. Ha hosszú vonalat használsz, talán soros ellenállást is védelemnek, plussz még sebességet is akarsz elérni a parazita jelenségekkel szemben, akkor előfordulhat, hogy a pic végül nem fogja bírni. Workaround gyanánt ha lecsökkented a sebességet, az megoldja a problémát. Ha a kicsi sebesség nem opció, használj vonali meghajtókat, azok arra vannak kitalálva.
(#) don_peter válasza pajti2 hozzászólására (») Jún 20, 2017 /
 
Csak adat feltöltésig lenne használva, meg néha olvasásra, de csak egyesével.
Pl.: indításnál lekérdezni az összestől egyenként a jelenlétét, majd ha írni kell bele adatot, akkor beírni egyesével.

Nem lesznek egymással szemben hajtva.
(#) kriszrap hozzászólása Jún 23, 2017 /
 
Sziasztok
RGB ledeket használok mostani projectbe.
Minden szinten 8 led van 5db szint van 8*5.
Ti hogy szoktátok megoldani azt hogy egy szintent több szin legyen egyszerre .
Arra gondolok hogy 4 led piros másik fele 4db mondjuk zöld ezt idömultiplexelve.
C be ugy csináltam meg a fügvényt hogy:
  1. kirajzol(1,1,1,1,0,0,0,0,szín);// tömbökbe eltárolom
  2. engedelyez(ido);//időmultiplexelve a tömbök értékét ki rajzolom

Szín helyére írom 1-5 az a piros (1 szint pirosa.....5 szint pirosa)
6-10 az a zöld : 6 1 szint zöldje .....10 5 szint zöldje) stb......

Hogy lehetne megoldani azt hogy egy szinten több színt lehessen kírajzolni???

Egy elméletem van de szerintem nem a legjobb megoldás.
A példát használom és a kód:
  1. kirajzol(1,1,1,1,0,0,0,0,5);//ezek a piros ledek
  2. kirajzol(1,1,1,1,0,0,0,0,4);
  3. kirajzol(1,1,1,1,0,0,0,0,3);
  4. kirajzol(1,1,1,1,0,0,0,0,2);
  5. kirajzol(1,1,1,1,0,0,0,0,1);
  6. engedelyez(1)// 1ms  időmultiplexelve
  7.  
  8. kirajzol(0,0,0,0,1,1,1,1,6);
  9. kirajzol(0,0,0,0,1,1,1,1,7);
  10. kirajzol(0,0,0,0,1,1,1,1,8);
  11. kirajzol(0,0,0,0,1,1,1,1,9);
  12. kirajzol(0,0,0,0,1,1,1,1,10);
  13. engedelyez(1)// 1ms időmultiplexelve

Ezt a két képet váltakoztattva gyorsan sikerül De szerintem nem igy kellene .
A hozzászólás módosítva: Jún 23, 2017
(#) pajti2 válasza kriszrap hozzászólására (») Jún 23, 2017 /
 
A konkrét kód előtt még elméletileg kellene tisztázni, mid van, és mit hoznál ki belőle? Ha olyan RGB ledjeid vannak, amiknek a GND-je közös, azokra egy időben szokás tápot adni mindhárom színre, és csak sorok / oszlopok / szintek között multiplexelsz opcionálisan, led színek között jellemzően nem. Idő multiplexelhetsz led színek között is, ha annyira meg vagy szorítva a vezetékek számával, de az RGB ledeknél elkezd túl sok lenni a vezeték.
(#) kriszrap válasza pajti2 hozzászólására (») Jún 24, 2017 /
 
Közös GNDs a ledem de össze rakásnál nem közösítettem csak a + lábakat közösítettem.
Akkor a függvényemet hogy lenne célszerű úgy átalakítani hogy átlátható legyen mert akkor minden egyes lednek külön meg kell adnom a színét. Hát én igy gondoltam ki.

  1. kirajzol(LED1,SZIN,LED2,SZIN,LED3,SZIN,LED4,SZIN,LED5,SZIN,LED6,SZIN,LED7,SZIN,LED8,SZINT);
  2. szin:
  3. 1 piros
  4. 2 zöld
  5. 3 kék
  6. 4 cyán kék
  7. 5 rózsaszín
  8. stb....
Következő: »»   958 / 1210
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