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   721 / 1210
(#) jany1966 hozzászólása Nov 6, 2015 /
 
A kép mert van aki segít, nem csak vitatkozik.
(#) Pali79 válasza jany1966 hozzászólására (») Nov 6, 2015 /
 
Ez pont ugyan olyan, mint amikor először feltetted. Új ablakban megnyitva jobban látszik. Csak, hogy segítsek is nem csak vitatkozzak.
(#) jany1966 hozzászólása Nov 6, 2015 /
 
Igazad lehet.
(#) sonajkniz válasza jany1966 hozzászólására (») Nov 7, 2015 /
 
Szia!
Ez az áramkör már kész van, vagy most akarod megépíteni?
(#) jany1966 hozzászólása Nov 7, 2015 /
 
Szia!
Ez már kész van ezt szeretném programozni.
(#) sonajkniz válasza jany1966 hozzászólására (») Nov 7, 2015 /
 
Van valami konkrét célod vele, vagy csak gyakorlásnak szánod?
Ugyanis a bemeneteket nem ártana átalakítani.
Fizikailag sem szerencsés megoldás, de az meg különösen zavaró programozásnál, hogy a gombokat alacsony, az egyéb bemeneteket pedig magas jelre kell lekérdezni.
(#) jany1966 hozzászólása Nov 7, 2015 /
 
Igen konkrét célom lenne vele, ezt a panelt így kapom készen.
Már ezt írtam az előző oldalakon.

"Olyat szeretnék vele csinálni, hogy kapcsolókat figyelne és különböző logikai műveletek és késleltetések után a kimeneteken lévő reléket kapcsolná. Plusz a kijelzőn különböző feliratok jelennének meg a kapcsoló vagy nyomógomb megnyomásakor. Ha lehet még azt is szeretném, hogy üzemórát számolna amit ha nincs táp alatt a PIC akkor is eltárol és aztán onnan folytatja a számolást."
(#) Bakman válasza sonajkniz hozzászólására (») Nov 7, 2015 /
 
Idézet:
„különösen zavaró programozásnál, hogy a gombokat alacsony, az egyéb bemeneteket pedig magas jelre kell lekérdezni.”
Ez igaz, viszont sokkal kevésbé zavarérzékeny az egész rendszer, ha felhúzóellenállásokkal vannak bekötve a nyomógombok.
(#) sonajkniz válasza Bakman hozzászólására (») Nov 7, 2015 /
 
Pont erre utaltam én is.
A gombok bekötése felhúzó ellenálláson van, pedig egynemű áramköri környezetben van a PIC-el, a bemenet pedig, ami nem tudni honnan fog jelet kapni, pozitívot kér egy 220 ohmos ellenálláson keresztül, zeneres védelemmel. Tételezzük fel, hogy a vezérelt környezet 24V-os.
Ebbeb az esetben a bemeneti ellenállásra és a zener diódára 1,6W villamos teljesítmény kerül. Kibírja?
Nem valószínű.
A másik észrevételem, hogy ha csak nem egy programvezérelt fényefekt elkészítése a cél, hanem valmilyen gép, berendezés működtetése, akkor a bemenetek számának illenék nagyobbnak lennie, nem a kimenetekének.
A hozzászólás módosítva: Nov 7, 2015
(#) jany1966 hozzászólása Nov 7, 2015 /
 
Igen ez pont egy 24v-os gépben lenne beszerelve.
Akkor mit javasoltok?
A CS1 CS2 is bemenet ha jól látom?
(#) sonajkniz válasza jany1966 hozzászólására (») Nov 7, 2015 /
 
Nos, ha tényleg teljesen kezdő vagy, és mindenáron ezzel akarsz startolni, akkor én is azt mondom, hogy foglalkozz inkább C-vel. Assemblyben ezt a feladatot kezdőként soha nem oldod meg.
A bemeneteket pedig mindenféleképp alakítsd át.
Legszerencsésebb az lenne, ha galvanikus leválasztást alkalmaznál optocsatolóval. De a minimum, hogy a következőképp kötöd át:
PIC lábától indul egy 220ohmos ellenállás. Ez a következőkhöz csatlakozik: 1K-s (nem nagyobb) felhúzóellenállás, 100n kondi negatívra kötve, schottky dióda anódja. A dióda katódja lessz a bemenet. Természetesen negatívot kér.
Sok sikert!
(#) sonajkniz válasza jany1966 hozzászólására (») Nov 7, 2015 1 /
 
Szia!
Kicsit átnéztem a kapcsolási rajzot, és nem kicsit találom zavarosnak.
A CS1 csatlakozó a PIC azon lábait hozza ki, amiken a bemenetek vannak, a CS2 pedig a kimenetek egy részét, miközben egy csomó láb vagy egyáltalán ninc használva, vagy csak egy felhúzóellenállás van rajta.
A CS4 - CS6 pedig kicsatolások a 4094 és az ULN 2803 közül. Ennek mi értelme?
Maga az alapkialakítás pedig újabb problémát vet fel.
A 4094-esek portbővítés céljait szolgálják. Ami nem rossz elgondolás, de jelen kapcsolásban nem fogom agyilag, mi a fenét csinál. Mindkét 4094 ugyanazt az órajelet és engedélyező jelet kapja. Ami elvileg rendben is lenne. Csakhogy IC8 nem a PIC-től kapja az adatokat, hanem IC7 Q5-ös kimenetéről. Ily módon IC7 kimenetén szépen megjelenik 1byte-nyi adat, míg IC8 összes kimenete IC7 Q5-ös kimenetének egy állapottal korábbi pozícióját jeleníti meg.
Ennek így nincs semmi értelme.
Főleg azért, mert a 8 hasznos és a 8 haszontalan kimenet (ez mindent összevetve 9 kimenet), a 8 bemenet, a kijelző, a gombok és az egyéb, még odarajzolt perifériák mindenféle bővítés nélkül beleférnek a PIC portjaiba.
Arról nem is beszélve, hogy kezdőként egy ilyen típusú portbővítést nem tudom hogy fogsz leprogramozni.
Azért, ha nem titok, elárulhatnád, hogy ez a ravasz áramkőr mire lett tervezve!
(#) eSDi válasza sonajkniz hozzászólására (») Nov 7, 2015 / 1
 
Üdv!

Nézd meg még egyszer. A 2db 4094-es sorba van kötve, nem a Q5-re van kötve a második bemenete, hanem QS-re. Így viszont már minden egyből egyértelmű, 16bit-et kell kiléptetnie a PIC-nek minden egyes módosításkor.
(#) Hp41C válasza jany1966 hozzászólására (») Nov 7, 2015 /
 
A relé tekercsével párhuzamosan tennék védődiódát. A bemeneteknél jobb a földre húzás (10..47k), nagyobb (1k) soros ellenállással és zener -rel való védelem. Pontosan akkor, ha a bemeneten a feszültség nagyobb is lehet, mint a pic tápfeszültsége. Nem látom a kötelező Vss - Vdd tápszúrő kondenzátorokat A PIC két oldalára 1-1 darab, és minden további IC -hez 1 db.
A két CD4094 -be 16 bitet kell beléptetni és csak eztán átírni a kimeneti tárolóba.
A hozzászólás módosítva: Nov 7, 2015
(#) Hp41C válasza Pali79 hozzászólására (») Nov 7, 2015 /
 
Íme, 5 perc alatt átírva...
(#) sonajkniz válasza eSDi hozzászólására (») Nov 7, 2015 /
 
Így már mindjárt más!
Mentségemre legyen mondva, nem nehéz az S-t 5-nek nézni.
(#) sonajkniz válasza (Felhasználó 15355) hozzászólására (») Nov 7, 2015 /
 
Ezt már én is néztem korábban.
Azért nem tudtam párhuzamot vonni, mert az oldalon nem ez a kapcs. rajz van, hanem ez.
Szerintem nem hasonlít.
A hozzászólás módosítva: Nov 7, 2015
(#) jany1966 hozzászólása Nov 7, 2015 /
 
Ez nem ugyan az ez más honnan származik.
Akkor egy kis átalakítással és programozással megoldható?
(#) sonajkniz válasza jany1966 hozzászólására (») Nov 7, 2015 /
 
Azt eddig sem mondta senki, hogy nem oldható meg.
(#) sonajkniz válasza (Felhasználó 15355) hozzászólására (») Nov 7, 2015 /
 
Belenéztem az álltalad belinkelt fórumba.
Érdekelt a téma, mert én is ebben utazom.
Kár, hogy teljesen befulladt az a topic.
(#) eSDi válasza sonajkniz hozzászólására (») Nov 7, 2015 /
 
Nekem is csak az adatlappól sikerült kihámozni.
(#) lokátoros válasza usane hozzászólására (») Nov 7, 2015 /
 
+1 like. Ez engem a ZX-Spectrum vs. Commodore 64 vitára emlékeztet. Az a meccs is döntetlenül végződött. sajnos nem sikerült lenyomni a gaz Commodore hívőket
De félretéve a viccet, szerintem megérne egy külön topicot hogy összeszedjük a C vs. assembly érveket, a különböző fejlesztési szempontok tükrében. Szerintem mindegyiknek megvan a maga helye egy adott platformon/projektben.
(#) diablo válasza sonajkniz hozzászólására (») Nov 7, 2015 /
 
Idézet:
„Nos, ha tényleg teljesen kezdő vagy, és mindenáron ezzel akarsz startolni, akkor én is azt mondom, hogy foglalkozz inkább C-vel. Assemblyben ezt a feladatot kezdőként soha nem oldod meg.”


Mondjuk erről beszéltem én is végig, hogy nem kezdőknek kellene ajánlgatni az asm-et, csak süket fülekre találtam. Főleg ha LCD kijelző vezérlése is a feladat. De úgy látszik nem sokan olvasták el a feladatot, mindenki azt hitte hogy szimpla LED villogtatással, futófényekkel akar játszani hobbiból... No mindegy. A többi "milyen fasza programot írtam asm-ben" hozzászólásokat inkább nem kommentálom.

De még most se tudjuk, hogy jany1966 melyik nyelvnél döntött végül, meg hogy eljutott-e már addig hogy feltudja programozni a PIC-et. Mert addig nincs értelme a panelről beszélni. Ami mellesleg szerintem jól használható, de ha van dugdosós próbapanel akkor a kezdő lépéseket én inkább azon tenném meg. Én feltudnám ajánlani a segítségemet MPLAB XC és XC8 fordító alatt, de abban meg ha jól tudom PicKit2 kompatibilitási gondok lesznek, aminek elhárításában meg Hp41C a szakértő.
(#) icserny válasza lokátoros hozzászólására (») Nov 7, 2015 / 1
 
Ne érdemes erre sok szót vesztegetni, hiszen felnőtt emberek járnak ide, akik el tudják dönteni, hogy mire mennyi időt akarnak áldozni, s hogyan érik el a kívánt célt a leghatékonyabb módon. Tehát mindenki úgy és olyan nyelven írja a programjait, ahogy jónak látja.

Szubjektív vélemény következik - én így látom ezt a kérdést (más meg másképp...):

PIC10/12/16 esetében a hardver nem támogatja a C használatát, ezért C-ből lefordított kód nem lesz hatékony. Életem első PIC programját PIC12F675-re írtam, fentiek miatt természetesen assemblyben. Ha nem is 10 perc alatt, de egy fél délután sikerült áttekinteni az utasításkészletet, s ha nyögvenyelősen is de estére összeállt az első komoly program (a legtöbb nehézséget a feltételvizsgálatok és a ciklusok megszervezése okozta). A LED villogtatást és egyebeket ugyan kihagytam, de ez esetemben megbocsátható, hiszen hajdanában már programoztam 8085 és Z80 mikroprocesszort hardverközeli módon.

PIC16/18/24/32 programozói modellje és utasításkészlete más és más, ha assemblyben programozunk, elég nehéz a váltás... Másrészt eljön az az idő, amikor a mennyiség átcsap minőségbe, azaz olyan hosszú lenne a program assemblyben, ami már áttekinthetetlen. Továbbá kinek van kedve/ideje százszámra kitalálni újabb és újabb címkéket? Makrókkal, szubrutinokkal lehet javítani a helyzeten, de eljön az a határ, amikor az ember azt mondja: nekem nincs arra időm/kedvem, hogy a (bonyolult) programomat assemblyben buheráljam, szeretnék gyorsabban és kényelmesebben eredményt elérni. Elvégre az idő is pénz, az élet pedig rövid.

Ráadásul a cél nem mindig a PIC működésének regiszter szintű követése, hanem inkább a működtetett periféria érdekel (RTC óra, nyomásmérő, kijelző, Ethernet/WiFi modul), amikor a PIC csak egy segédeszköz. A voltmérőm, a számítógépem vagy a telefonom belső működése sem érdekel, amikor használom. Ilyenkor természetes a magasszintű nyelvek használata (C, JAL, vagy akár BASIC), vagy mások által készített programkönyvtárak használata.

Azt én sem szeretem, ha a programkönyvtár nem nyíltforrású. Szerencsére lehet találni perifériakönyvtárakat, middleware könyvtárakat (USB/Ethernet/grafikus display), sőt, akár RTOS-t is nyíltforrású változatban. Még ha nem is mindegyik használható fel ingyenesen kereskedelmi alkalmazásra, tanulásra, otthoni használatra megfelelnek.
A hozzászólás módosítva: Nov 7, 2015
(#) sonajkniz válasza diablo hozzászólására (») Nov 7, 2015 /
 
Idézet:
„nem kezdőknek kellene ajánlgatni az asm-et”


De igen! Pont kezdőknek kell ajánlani, hogy az alapokat megértsék. Ha már érti, de nem akar belemélyedni, mert vagy nem érzi magát elég türelmesnek hozzá, vagy úgy véli, hogy nem fog olyan programot készíteni, amihez az ingyenes C fordító alkalmatlan, akkor válassza inkább a C-t. Ami programot jelenleg jany1966 készíteni akar, tökéletesen megfelel hozzá még a legrosszabb C fordító is. Viszont, ha valóban teljesen kezdő, komoly segítsség nélkül az adott platformon még egy kimenetet sem fog tudni bekapcsolni semilyen nyelven. Azért javasoltam neki inkább a C-t, mert akár te is összedobhatod neki az alapokat egy mintaprogram keretében, amitől feléled a kijelzője, és kapcsolgatni tudja a kimeneteket. Innen már el fog tudni indulni.
(#) sonajkniz válasza diablo hozzászólására (») Nov 7, 2015 /
 
Még egy apróság!
Idézet:
„A többi "milyen fasza programot írtam asm-ben" hozzászólásokat inkább nem kommentálom.”


Ezek kimondottan neked szóltak. Mert, hogy még HP41C-t is leoltottad, az azért meredek volt.
(#) Pali79 válasza diablo hozzászólására (») Nov 7, 2015 /
 
Szerinted tök kezdőként van értelme belekezdeni egy ilyen feladatba, akármilyen nyelven is?
(#) Hp41C válasza diablo hozzászólására (») Nov 7, 2015 /
 
Idézet:
„milyen ****** programot írtam asm-ben”

Nem csak elméleti, tanulási elgondolások miatt írtam, amit írtam a PIC -es kezdéssel kapcsolatban. Kipróbáltam. Vettem a fáradságot és megírtam több programot is assemblyben és HighTech C -ben akarom mondani XC8 PIC16 -ra fordító részében.
A képeken a tapasztalataim PIC16F1827 -re:
Prop_16F1827_Assembly.JPG - A feladat assembly -ben megoldva 3091 utasítás,
Prop_16F1847_XC8_Full.JPG - A feladat XC8 -ban megoldva, full optimalizálással az első 90 napban ingyenes, utána 290000 Ft+Áfa - 4640 utasítás,
Prop_16F1847_XC8_Free.JPG - A feladat XC8 -ban megoldva, free optimalizálással - 6740 utasítás.
Vegyük észre, hogy át kellett térni a nagyobb memóriájú testvérre 16F1847 - 8kszó programtárral.
Továbbá rengeteget kellett görcsölni, hogy egyáltalán beleférjen. Minden adattípushoz létre kellett hoznom egy uniont, hogy kivédjem a C fordító által szükségtelenül befordított kódokat. Pl.: egy int váltózó értékét szeretném beolvasni valahonnét két byte-ból, akkor valahogy össze kell rakni. Az union ezen segít, lehetővé teszi a byte- ok egymástól független írását... Nem hinném, hogy egy-két órán túlesett C (de írhatnám más programnyelv nevét is) programozó ezt választaná. A problémám nem is itt van, majd a gyakorlat meghozza...
  1. typedef union _INT_VAL
  2. {
  3.     int Val;
  4.     BYTE v[2];
  5.     struct
  6.     {
  7.         BYTE LB;
  8.         BYTE HB;
  9.     } byte;
  10.     struct
  11.     {
  12.         unsigned char b0:1;
  13.         unsigned char b1:1;
  14.         unsigned char b2:1;
  15.         unsigned char b3:1;
  16.         unsigned char b4:1;
  17.         unsigned char b5:1;
  18.         unsigned char b6:1;
  19.         unsigned char b7:1;
  20.         unsigned char b8:1;
  21.         unsigned char b9:1;
  22.         unsigned char b10:1;
  23.         unsigned char b11:1;
  24.         unsigned char b12:1;
  25.         unsigned char b13:1;
  26.         unsigned char b14:1;
  27.         unsigned char b15:1;
  28.     } bits;
  29. } INT_VAL;


A problémám ott van, hogy az ingyenes fordítót véve alapul, a C-s megoldáshoz legalább négyszeres kapacitású kontrollert kellene felhasználnom (sajnos nincs 18 lábbal), hanem még rengeteg időm is ráment arra, hogy felfedezzem a terjengősre sikerült megoldások kiváltásait.

Teljesen elbeszélünk egymás mellett.
- Teljesen kezdő PIC -es: Jobb, ha a LED villogással kezd és lépésenként halad. A kezdeti sikeren felbuzdulva, néhány hónap húlva jöhet elő egyáltalán az LCD.
- Haladó PIC -es: Szive szerint válasszon fordító programot és használja. A költségeket is vegye figyelembe.
- Ha egy feladatot meg kell oldani bizonyos megkötések között: Be fogja látni, hogy megéri megismerni mind a kontrollert, mind a többi elemet és a fordítóprogramot is alaposan, hogy meg tudja oldani a problémát.
10F, 12F, 12F1, 16F, 16F1 architectúráját nem a C igényeihez találták ki. Szinte korlátlan stack lehetőséggel bíró (I8080, I8085, Z80, stb) processzorokon fejlesztették ki. Sajnos ezeken a kontrollereken nincs ilyen erőforrás.
Részemről vége. Mindenki válassza a neki tetsző programot és közdjön a választása szerint.
A hozzászólás módosítva: Nov 7, 2015
(#) Bakman hozzászólása Nov 7, 2015 /
 
Sziasztok!

PIC 18F46K80

A Flowcode témában már ugyan kérdeztem, kevés válasz született. Másik fórum szerint a hiba a Flowcode-ban van. Mivel a környezet megengedi a C kód használatát, ebben kérnék segítséget. A feladat nagyon egyszerű, de nem ismerem a szintaktikát: AN0 lábon lévő feszültség mérése. 8 bites eredmény bőven elég, nem kell a 12 bit. Hogyan kell ezt C-ben megvalósítani? A cél az, hogy egy változóba, pl. legyen X, bekerüljön a mérés eredménye.

Nézegettem a példákat, de nem jutottam dűlőre velük. Ha jól sejtem, a sorrend a következő:

A/D konverter bekapcsolása
AN0 kiválasztása
Várakozás egy kicsit (1-2 us)
Eredmény kiolvasása
A/D kikapcsolása

Lenne oly kedves valaki és írna egy példát? A kontroller 64 MHz-en megy.

Előre is.
(#) bbalazs_ válasza Bakman hozzászólására (») Nov 7, 2015 /
 
Altalanossagban: (az adatlapban pontosan leirjak).

Eloszor az adott lab (AN0) bemenetnek allitasa a TRIS-ben
Ha van ANSEL regiszter, akkor ott, ha nincs, akkor valamelyik ADCON adja meg, hogy az analog lab legyen es ne sima digitalis input.
Utana a tobbi ADCON regiszterrel beallitod, hogy milyen legyen az igazitas (erdemes balra igazitottat kerni, akkor egyszeruen majd az ADRESH-t olvasod ki), aztan a ket referencia (erdemes Vcc es GND), aztan beallitod a toltesi es kiertekelesi idoket, ez mar nehezebb, de jatssz vele, max pontatlansagot okoz. En jo lassura allitanam, mert az orajel magas.
Utana bekapcsolod az AD-t (altalaban csatonavalasztassal egyutt).
Aztan inditod a konverziot, a GO bittel.
Varsz, amig ez a bit nem nullazodik.
Ekkor olvashatod az ADRESH-t.
Aztan mar kikapcsolhatod az AD-t...
Következő: »»   721 / 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