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   697 / 1210
(#) benjami válasza misu888 hozzászólására (») Aug 18, 2015 /
 
Kapcsolási rajz? Kód? Konfiguráció (charlcd.h) ? Az alapértelmezetten analóg bemenetként működő lábakat átállítottad digitális I/O-ra? Egyébként tud ez a program 4 és 8 bitet is, csak úgy kell beállítani, a leírásban benne is van.
A hozzászólás módosítva: Aug 18, 2015
(#) mark.budai hozzászólása Aug 18, 2015 /
 
Sziasztok! Adódott még egy kérdésem, de a neten nem találom. Az MPLAB X - XC8 párosban hogy tudom bekapcsolni a belső felhúzó ellenállásokat? Egyelőre csak egy bemenetet kéne felhúzni, de ez lényegtelen.
(#) Hp41C válasza mark.budai hozzászólására (») Aug 18, 2015 / 1
 
  1. INTCON2bits.NOT_RBPU = 0;       // initialize PORTB pull-ups on
(#) mark.budai válasza Hp41C hozzászólására (») Aug 18, 2015 /
 
Köszönöm szépen!
(#) Addye válasza Topika hozzászólására (») Aug 18, 2015 /
 
Köszön a sok segítséget, ezek nagyon jók lesznek kezdésnek!
(#) elektroszala hozzászólása Aug 19, 2015 /
 
Üdvözlet!
2400 baudos uart beállítható 40MHz órajel mellett ? (18f26k22) Csak hw uart jöhet szóba...
(#) Zsolt2 válasza elektroszala hozzászólására (») Aug 19, 2015 /
 
Beallithato. Brg16 regisztert 1-re kell allitani es az SPBRGHx:SPBRGx regiszterek erteke 1041.
(#) elektroszala válasza Zsolt2 hozzászólására (») Aug 19, 2015 /
 
Köszönöm a gyors választ!
(#) Pali79 hozzászólása Aug 19, 2015 /
 
Urak!
Tanácsra lenne szükségem. Egy LCD kivezérlésmérőn dolgozom. Hasonló kijelzéssel mit Vicsys-é (lásd a mellékelt képet). Addig eljutottam, hogy ADC-vel fel kell dolgozni a jelet. A kijelzés 1×8 pixeles vonalakkal törénik. Elgondolásom szerint ehhez 3 db egyéni karaktert kell létrehozni 1 db egyvonalas, 1 db kétvonalas, és 1 db három vonalas. Nekem csak az a megoldás jutott eszembe, hogy megvizsgálom az ADC értékét és annak megfelelően hívom az előre megírt kijelzőképet. Ez így elég egyszerű, talán még működne is, de baromi hosszú lesz a kód. Ennek az egyszerűsítésére szeretnék tanácsot kérni!

vumeter.jpg
    
(#) sonajkniz válasza Pali79 hozzászólására (») Aug 19, 2015 /
 
Szia!
Én úgy oldanám meg, hogy a beolvasott AD értéket (0-255) osztom 18-al. Kijelző felső sorát 0-nál kezdve beírom "L:" Majd pedig egy ciklussal annyiszor iratom ki a három vonalat, ami az osztás eredménye volt. Ezután a maradékot osztom 3-al. Ha 0-> üres mezö, ha 1-> 1vonal, ha 2-> 2 vonal. Ezután 13-ból levonom az első ciklus számát, majd a maradék értékkel ciklust készítve üres mezőket írok. így mind a 16 karaktert felülírom, és nem kell törölni, tehát nem fog villogni. Majd a második sorral ugyan ezt mégegyszer, csak a másik AD csatornáról.
(#) ktamas66 válasza Pali79 hozzászólására (») Aug 19, 2015 /
 
Ha jól számolom 42 vonalat kell maximum kijelezni. A kijelezendő értéket erre kell formázni. Utána ezt osztod 3-mal (itt egy segéd állandóval való osztáshoz/szorzáshoz). Egy ciklusban ennyiszer kiírod a 3 vonalat és mindig levonsz 3-at az értékből, a maradék megadja az utolsónak kijelezendő karaktert ( különösen egyszerű, ha 00, 01, 02, 03 helyre definiáltad). Ha közben a kiírt karaktereket is számolod a maradékot 0-val felülírod.
(#) mark.budai válasza Hp41C hozzászólására (») Aug 19, 2015 /
 
Sajns ez teljesen mégsem oldotta meg a problémámat, a B portot minden gond nélkül fel tudm húzni, a C-t már nem, és ott van a nyomógombom. Egyébként muszáj az egész portot felhúzni, vagy lehet külön csak az egyik bitjét is?
Nem akarok ám hülyeségeket kérdezni, de itt mutatkozik meg tökéletesen a (magyar nyelvű) oktató anyagok hiánya, illetve attól, hogy C nyelv, még a fordítókban elég nagy különbségek vannak, így egy egyetemes C-ről szóló anyaggal sokra nem megy az ember fia. A CCS-ben ezek egyáltalán nem okoztak problémát, de itt már egy sima bemenet kezelés is teljesen más.
(#) Pali79 válasza sonajkniz hozzászólására (») Aug 19, 2015 /
 
Az elgondolás nem rossz. Az osztást szerettem volna elkerülni, de úgy látom nem lesz más választás. Kigondolom, hogy tudnám a kódot így megírni. Addig is Köszönöm!
(#) Pali79 válasza ktamas66 hozzászólására (») Aug 19, 2015 /
 
Igen a 42 stimmel.
Idézet:
„A kijelezendő értéket erre kell formázni.”
Ezt, hogy érted pontosan? Nem egészen értem mit is kell 3-mal elosztani...
Tök jó ez a segéd, csak nálam az osztásra nem hajlandó valamiért, gyakorlatilag üres kódot ad vissza.
A vonalakat 00, 01, 02 helyre raktam, de oda rakom ahová akarom, ez nem gond.
(#) cross51 válasza mark.budai hozzászólására (») Aug 19, 2015 /
 
Nem tudom milyen PIC-et használsz, de a C porta általában nincs belső felhúzás, és nem muszáj az egész portot felhúzni a WPUx regiszterrel tudod beállítani, hogy melyik lábon van engedélyezve a belső felhúzás.
(#) ktamas66 válasza Pali79 hozzászólására (») Aug 19, 2015 /
 
Az AD eredményét úgy kell átalakítani, hogy 0-42 közötti számot kapjál mint kijelzendő érték (nem tudom lineárisat vagy logaritmikusat szeretnél, de végeredmény legyen 0-42 között). Ezt én a mintavételek számával és kettes osztásokkal szoktam variálni, de mint látod az állandóval való osztás sem bonyolult.
A 3-mal való osztás 0.333333-mal való szorzásnak felel meg .
(#) Pali79 válasza ktamas66 hozzászólására (») Aug 19, 2015 /
 
Értem már! Este kipróbálom. Köszönöm!
(#) benjami válasza mark.budai hozzászólására (») Aug 19, 2015 /
 
Az hogy egy mikrovezérlőben melyik porton tudod a felhúzó ellenállásokat bekapcsolni nem a fordítóprogramtól függ, hanem magától a mikrovezérlőtől. Nézted már az általad használt típus adatlapját (mondjuk ha a típust közzé tennéd az sem ártana) ?
(#) sonajkniz válasza ktamas66 hozzászólására (») Aug 19, 2015 /
 
Idézet:
„A 3-mal való osztás 0.333333-mal való szorzásnak felel meg”

Assemblyben ez még bonyolultabb, mint az osztás.
Itt egy egyszerű 8 bites osztórutin:
  1. CBLOCK
  2.     OSZTANDO
  3.     OSZTO
  4.     MARADEK
  5.     CIKLUS
  6.     ENDC
  7.         org             0x0000                                          ; program memória kezdö címe
  8.  
  9.  
  10. MAIN
  11.                 MOVLW   D'8'                        ;8 lépésben végezzük el az osztást
  12.                 MOVWF   CIKLUS
  13.                 CLRF    MARADEK                     ;a maradék kezdetben nulla legyen
  14.                 BCF     STATUS,C                ; a Carry bitet töröljük
  15. KIVONAS
  16.                 RLCF    OSZTANDO                ;ezen a ponto C mindig nulla!
  17.                 RLCF    MARADEK
  18.                 MOVF    OSZTO,W                 ;az osztó és a maradék
  19.                 SUBWF   MARADEK ,W                      ;összahasonlítása
  20.                 BNC     NO_KIVONAS              ;átlépjük, ha az osztó a nagyobb
  21.                 MOVF    OSZTO,W                 ;az osztóval csökkentjük a maradékot
  22.                 SUBWF   MARADEK
  23.                 INCF    OSZTANDO                ;a hányados következő bitje 1 lesz!
  24. NO_KIVONAS
  25.                 DECFSZ  CIKLUS                  ;ciklus számlálása
  26.                 BRA     KIVONAS
  27.  
  28.         GOTO    $-0
  29.  
  30.         END

Az osztás végén az osztandóból lessz az eredmény!
A hozzászólás módosítva: Aug 19, 2015
(#) ktamas66 válasza sonajkniz hozzászólására (») Aug 19, 2015 /
 
Arra gondoltam, hogy a linkelt oldalon a szorzás helyére kell a 0.33.... beírni, így adja a rutint. Ha megnézed 17 utasításból oldja meg .
(#) sonajkniz válasza ktamas66 hozzászólására (») Aug 19, 2015 /
 
Milyen PIC-re generál ez a program kódot? Mert az álltalam használt PIC-ek nem minden utasítást ismernek fel.
(#) mark.budai válasza cross51 hozzászólására (») Aug 19, 2015 /
 
Köszönöm, és benjami-nak is, 18F2455-ről van szó. Most nézem, hogy sajnos csak a B porton van belső felhúzási lehetőség, az A és C portról ez kimaradt, az adatlapban ezt meg pont nem néztem, figyelmetlen voltam. De a lényeg megvan, hogy a WPUx regiszterrel fel tudom húzni egyesével is a portok bitjeit. Köszi!
(#) ktamas66 válasza sonajkniz hozzászólására (») Aug 19, 2015 /
 
Szerintem elég általános, clrc a carry törlése. Ezt lehet STATUS-ban is, vagy csinálni rá makrót, de az újabbakban a clrc, rrf helyett lsrf is használható.
(#) killbill válasza Pali79 hozzászólására (») Aug 19, 2015 /
 
Eleg regi modszer a tablazat. Csinalsz egy tablazatot, aminek minden eleme egy A/D ertkhez tartozik. A tablazatban szereplo byte-ok pedig ket dolgot tarololnak. Mondjuk az also 4 biten azt, hogy hany darab harom csikos karaktert kell kirajzolni, es tovabbi ket biten pedig azt, hogy ez utan egy 0, 1, vagy ket csikos karakter kell. Ez tulajdonkeppen egy specialis osztotabla, mert a maradek is benne van. Ezzel elkerulod az osztast teljes egeszeben. Ha elotte az A/D erteket atszamolod valami alacsonyabb ertekre, mert ugysincs 256 vonalnak hely, akkor meg kisebb is lesz a tablazat.
A hozzászólás módosítva: Aug 19, 2015
(#) sonajkniz válasza killbill hozzászólására (») Aug 19, 2015 /
 
Idézet:
„Ezzel elkerulod az osztast teljes egeszeben.”

Idézet:
„Ha elotte az A/D erteket atszamolod valami alacsonyabb ertekre,”

És máris nem kerülted el az osztást!
(#) killbill válasza sonajkniz hozzászólására (») Aug 19, 2015 /
 
Igen, a 255->41 kerdest is valahogy meg kell oldani. Egyreszt megteheted azt, hogy szorzod 42-vel es osztod 256-tal. Utobbi nem osztas, mert csak el kell dobni a 16 bites szorzat also 8 bitjet. 42-vel szorozni meg talan konnyebb, mint osztani. Mert ahhoz csak 5 shifteles kell meg ketto osszeadas kell. Vagy, mivel a vegeredmeny ugyis csak 42 lepesben kell, akkor mar eleve lehet az A/D-t is igy hasznalni, azaz "hardverbol osztani". Mondjuk csak a felso 6 bitet felhasznalni az A/D-bol (néggyel osztás), es nem 100%-ig kivezerelni az A/D-t. De ha ez sem megy, akkor marad a 256 byte-os tablazat. De ez csak egy otlet volt a hetvenes evekbol, amikor gyengek voltak a processzorok...
mellesleg az általam az egy 'l'
A hozzászólás módosítva: Aug 19, 2015
(#) ktamas66 válasza killbill hozzászólására (») Aug 19, 2015 /
 
Én inkább ezt csinálnám: a 42 prímtényezői 2x3x7, a kettő megvan 256-ban is, tehát szerintem a legegyszerűbb venni 21 mintát (3x7), ezt összeadogatni egy 16 bites változóban. A végeredményt 128-al kellene osztani, de egyszerűbb szorozni 2-vel (rotálni) és a felső bájban ott az eredmény.
(#) Pali79 válasza ktamas66 hozzászólására (») Aug 19, 2015 /
 
A kódgenerálás jól működik, de a maradékot elhagyja. Végülis sonajkniz is azt írta mint Te. A 42-re formázás és 3-mal osztás, azt tulajdonképpen 18-cal osztás. Csak ez a "maradék megadja az utolsónak kijelezendő karaktert" dolgot nem tudom, hogyan oldjam meg.
(#) sonajkniz válasza Pali79 hozzászólására (») Aug 19, 2015 /
 
Ha azt az osztórutint használod, amit feltöltöttem, a MARADEK- ban egy 0-17-ig terjedő szám lessz. Miután a ciklus a kijelzőre kiírta a kellő számú háromvonalas karaktert, MARADEK-ot áttöltöd OSZTANDO-ba.Ha ezt 6-al osztod az eredmény 0, 1, vagy 2 lessz. Ha az általad elkészített karakterek a 0-ás helyen semmi, az 1-es helyen egy vonal, a 2-es helyen két vonal, akkor az utolsókarakter kódja OSZTANDO névre halgat.
A hozzászólás módosítva: Aug 19, 2015
(#) Pali79 válasza sonajkniz hozzászólására (») Aug 19, 2015 /
 
Kipróbálom ezt is, csak át kell írnom egy picit mert van benne legalább egy utasítás ami nekem nem jó, asszem...
Következő: »»   697 / 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