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   245 / 1210
(#) trudnai válasza Pepebá hozzászólására (») Ápr 25, 2012 / 1
 
Nem mindegyik mikro C-s forditoban van a %f implementalva, hgy helyet takaritsanak meg. Ha van, akkor altalaban a float-okhoz meg kell adni, hogy egy masik printf valtozatot linkeljen be a linker, ami tartalmazza a float konverzios rutinokat. Most nem kovettem melyik forditot hasznalod, de a doksiban vagy googliban keress ra, hogy "CCS printf float" (termeszetesen csereldd le a CCS-at a forditodra)

C18-ban ha jol tudom nincs ilyen lehetoseg egyaltalan, de pl igy tudod kiiratni:

  1. // tort resz pontossaga
  2. #define SZORZO 100
  3. // itt van a tizedes pontos szamunk
  4. float szam = 1234.5678;
  5. // atalakitjuk a tortet egeszekre
  6. unsigned egesz = szam;
  7. unsigned tort = szam*SZORZO - egesz*SZORZO;
  8.  
  9. // kiirjuk a tortet
  10. printf("Szam: %u.%u\n", egesz, tort);


Amugy %l -nek (kis L-nek) ill %lu (kis %Lu) %ld (kis %Ld) mukodnie kellene a tmp32-del...
(#) szitko válasza vilmosd hozzászólására (») Ápr 25, 2012 /
 
Én belekezdtem egy Űrsiklóvezérlésbe MPLAB+ASM+PIC12f683-al, de a visszatérési adatvezérlés már nem fért bele. Lehet ha C-be írom belefért volna?
(#) vilmosd válasza szitko hozzászólására (») Ápr 25, 2012 /
 
Probald meg esetleg 12C508-asba es C++ segitsegevel.
(#) Hp41C válasza vilmosd hozzászólására (») Ápr 25, 2012 /
 
1., 2., 3.
Vagy ezek alapján egy pic32F -fel kell kezdeni, mondjuk egy led villogtatást. Még a memória is elégnek látszik, az utasításkészlet sem korlátoz. Itt a szabadság... De ahhoz, hogy elindítsd a villogást többszáz oldalt kell elolvasni, megérteni, stb. Egy 12F508, 12F509 adatlapja 106 oldal, egy 16F628A -é 178, egy 18F2520 -é 412, egy 24FJ64GA002 -é 268, egy PIC32MX130F064B -é 320. De az utóbbi kettő sokat hivatkozik a család reference manualjára, ami megint többszáz oldal. Mindegy - ez a trendi...
(#) szitko válasza vilmosd hozzászólására (») Ápr 25, 2012 /
 
Hogy ez nem jutott eszembe!
A viccet félretéve, amikor elkezdtem PIC-el foglalkozni, hallgattam az olyan emberek tanácsára, mint pl. a tiéd, hogy ASM a kezdők nyelve, e téren. Most egy másik mikrovezérlő családot is tanulgatok párhozamossan, de azt már C-ben, és így, hogy az ASM-ben megismertem a regiszterek használatát, stb... már sokkal egyszerűbb a C programozás.
Azt viszont nem értem, hogy akik most kezdik a PIC programozást, miért félnek attól a kb 35 ASM utasítástól. (16f esetén)
(#) icserny válasza szitko hozzászólására (») Ápr 25, 2012 /
 
Idézet:
„miért félnek attól a kb 35 ASM utasítástól. (16f esetén)”
Pont azért félnek, mert kevés az utasítás (elvégre a RISC is ezt jelenti), s abból nem könnyű kikerekíteni a kívánt algoritmust. Ha valaki netán programozott már előtte CISC eszközt, akkor még nehezebb... A PIC24 vagy az MSP430 utasításkészlete már sokkal emberszabásúbb. De ha nem muszáj, nem piszmog az ember az assembly program útvesztőjében (a program méretének növekedésével egyre nehezebb áttakinteni a programot).
(#) vilmosd válasza Hp41C hozzászólására (») Ápr 25, 2012 /
 
Szoval lehet ragni ezt a temat. Olyan ez mint a gumicsont. De sokszor latni a feltett kerdesekbol (mindegy ASM, C, Pascal) hogy a kedves kerdezonek halvany lila f.. ogalma sincs a PIC mukodeserol. Azt viszont a magas szintu nyelvek pl a PC-nel is jotekonyan eltakarjak. "Mert en mar regota programozok am C-ben" cimu kijelentesek pl azt jelentik, hogy nagyon keveset ismer az elektronikabol, es az adott uC felepitesebol. Utana jon a kerdes hogy "hova kossem a LED-et". Na ilyenkor kezdem azzal, hogy ASM. Na de mindegy mindenki ugy csinalja, ahogy jolesik. Eszt nem tudok adni legfeljebb tanacsot.
(#) trudnai válasza icserny hozzászólására (») Ápr 25, 2012 /
 
Idézet:
„De ha nem muszáj, nem piszmog az ember az assembly program útvesztőjében (a program méretének növekedésével egyre nehezebb áttakinteni a programot).”


En mas velemenyen vagyok ezzel kapcsolatban. Egy program attekinthetoseget nem a nyelv befolyasolja, hanem a modszer ahogy a programot felepitjuk. C-ben is lehet borzalmas, attekinthetetlen kodot irni, es asm-ben is lehet szepen strukturalt, ujrafelhasznalhato modulokkal felepitett algoritmus konyvtarakra epitkezni.

Ami fokent a C mellett szol az egyreszt az absztrakcio magasabb szintje (a fejleszto az algoritmusra koncentral, nem a regiszterek, memoria es a program tar optimalis kihasznalasara), masreszt a hordozhatosag (pl irsz egy PID algoritmust amit szepen attudsz ultetni kisebb modositasokkal MSP430-ra vagy AVR-re vagy akar PC-re is).
(#) Pepebá válasza icserny hozzászólására (») Ápr 26, 2012 /
 
Köszi az infót, igen hasznos volt, sokat segített. Az outdec() függvényt már nézegettem, sőt belepiszkáltam. Pozitív hőmérsékleteknél az előjel kiírást megszüntettem.
Átalakítást illetve új függvény LCD-re kiírást megcsinálom.
(#) Pepebá válasza trudnai hozzászólására (») Ápr 26, 2012 /
 
C18 fordítót használok, MPLAB-ban.
Miután nem volt sikerem a float típusú változók kiíratásával (ami most már világos számomra hogy nem is lehetett) hasonló megoldással próbálkoztam.
Most az a gondom hogy:
float szam=tmp32/10
unsigned egesz=szam
unsigned tort= szam*10-egesz*10
esetében a tort értéke mindíg 0 (a tmp32 értéke pl:235) Kipróbáltam ha a szam=235, akkor működik a dolog. Szam=tmp32 esetében, a szam nem lesz egyenlő 23,5 -l
Egyébként a printf utasításban az kis "L", lu és ld milyen opciók?
(#) Hp41C válasza Pepebá hozzászólására (») Ápr 26, 2012 / 1
 
Szia!

A C szórakozik veled... A kifejezés kiértékelésekor számba veszi a paraméterek és az eredmény típusát. A 10 egy int érték, a tort unsigned int. Ebből kitalálja, hogy a szorzás egész szorzás, így ne csodálkozz, hogy az eredmény mindig 0.
  1. unsigned tort=(szam*10.0)-egesz*10;

Minek a float osztás és szorzás?
  1. unsigned egesz=tmp32 / 10;
  2. unsigned tort= tmp32 % 10;

avagy
  1. unsigned egesz=tmp32 / 10;
  2. unsigned tort= tmp32 - egesz * 10;
(#) trudnai válasza Pepebá hozzászólására (») Ápr 26, 2012 /
 
Nyilvan azert nem, mert a tmp32 valtozod (gondolom) long int vagy long unsigned tipusu, s ezert a 10-el torteno osztas is egesz tipuson hajtodik vegre -- ily modon elveszited az osztas maradekat es csak az egesz reszet fogja a float tipusu valtozodba tolteni. Ezt kikerulni ugy lehet, hogy a tmp32 szamot elobb at kell alakitani floatta az un. castingolassal:

  1. float szam = (float)tmp32/10


Azonban ha mar egyszer a tmp32 egesz tipus volt, akkor nem ertem miert alakitod at float-ta egyaltalan?

  1. unsigned egesz2 = tmp32/10;
  2. unsigned tort2 = tmp32 - egesz2*10;
  3.  
  4. printf("Szam2: %u.%u\n", egesz2, tort2);


Idézet:
„Egyébként a printf utasításban az kis "L", lu és ld milyen opciók?”


"%l" azaz "long"... Amugy itt vannak a formatum stringek, de a C18 doksijaban vannak konkretan benne, hogy a Microchip miket implementalt:

Konverziós előírások (printf - formátumsztring)
(#) Hp41C válasza vilmosd hozzászólására (») Ápr 26, 2012 /
 
Szia!

Most készültem el vele: 6 digites 7 szegmenses óra DCF77 szinkronozással PIC10F322-re sot23-6 tokban. Dátum évszázaddal és a hét napjával is kijelezhető... (424 assembly sor - ha a szimulátor kezelné a 10F322 megszakítását, akkor még kettővel kevesebb)
(#) trudnai válasza Hp41C hozzászólására (») Ápr 26, 2012 /
 
Hu ezt jo lenne latni! Nyilvanos a terv es a forras kod?
(#) Hp41C válasza trudnai hozzászólására (») Ápr 26, 2012 /
 
Nincs benne semmi különös:
6db 74HC595 már a dekódolt szegmens vezérlést lépteti ki Roman Black féle My Shift1 Protocol porotokol kicsit módosított változatával. A kijelzés egy analóg lábra adott feszültségtől függ: idő, dátum, évszázad és a hét napja vagy a mostani és az előző órában történt sikeres szinkronok száma.

Kivezetések: táp, föld, DCF77 bemenet, 1 vezetékes soros kimenet, analóg kijelzés változtatás. Összesen 5 láb. Még maradt egy felhasználatlan - óránként csipoghatna is...
(#) Zsora válasza Hp41C hozzászólására (») Ápr 26, 2012 /
 
Pazarlás a 6db soros-párhuzamos átalakító; lehetne multiplexálni is!
(#) Zsora válasza Zsora hozzászólására (») Ápr 26, 2012 /
 
Egyébként meg a 6+1db IC helyett nem lenne egyszerűbb és helytakarékosabb 1db többlábú mikrovezérlő? Multiplex vezérléshez 14 lábú jószág elég is.
(Persze tudom hogy ezt a kapcsolást a pici mikrovezérlők használhatóságának demonstrálására készítetted.)
(#) Hp41C válasza Zsora hozzászólására (») Ápr 26, 2012 /
 
Szia!
Helytakarékosság? Erre nem is gondoltam.... :rinya: Egy valamire való hétszegmenses kijelző sokkal nagyobb, mint a SO16 tok. Egy 74HC595 jól elfér a hozzá tartozó digit alatt. Az ICSP csatlakozó a DCF77 és a feszültség bemenet csatlakozása is. Még a tápcsatlakozás is megoldható vele. A digitek között csak találok egy sot23 -nyi helyet... A soros felület megengedi, hogy a kijelzést ki lehessen terjeszteni szinte tetszőleges számú digitre.

A lényeg inkább az, hogy az összes funkció belefér a 1/2 kszóba...
(#) Hp41C válasza Zsora hozzászólására (») Ápr 26, 2012 /
 
Ne feledd el, hogy a közös kivezetés áramát már nem bírja el egy kontroller kimenet, ide kell valami meghajtó. A 74HC595 közvetlenül hajthatja a digitet 45 Ft/digit költséggel (a 8 db SMD ellenállást nem számítottam).
(#) Pepebá válasza Hp41C hozzászólására (») Ápr 26, 2012 /
 
Köszönöm a segítséget a 10.0- val történő művelet eredményében már meg van a tört rész.
(#) Zsora válasza Hp41C hozzászólására (») Ápr 26, 2012 /
 
Ez igaz. A 6db tranzisztorról megfeledkeztem.
(#) Pepebá válasza trudnai hozzászólására (») Ápr 26, 2012 /
 
Köszi a castingolással:
float szam = (float)tmp32/10 hasonlóaní 10.0-val való művelettel működik a dolog. Ki lehet írni a tört részt.
Pontosan ezért kell nekem az egész típust átalakítanom hogy ki tudjam íratni.
A linket külön köszönöm, hiszen itt szinte minden megtalálható.
(#) vilmosd válasza Hp41C hozzászólására (») Ápr 26, 2012 /
 
Mar ne haragudj, de inkabb valami szazlabut kellett volna hasznalni a PIC24 vagy a PIC32 sorozatbol, es legalabb C#, vagy Java nyelven kellett volna megirni a programot. Nagyon tetszenek ezek az otletes es egyszeru megoldasok, de sajnos ma ez nem trendi.
(#) trudnai válasza Pepebá hozzászólására (») Ápr 26, 2012 /
 
Idézet:
„Pontosan ezért kell nekem az egész típust átalakítanom hogy ki tudjam íratni.”


Ertem, de ahogy Hp41C is leirta ill jomagam is, ehhez nem kell elobb atalakitanod float-ta, es utana vissza int tipussa -- mar csak azert sem, mert a C18 nem tudja a float-os format stringeket kezelni, ezert igy is ugy is integer lesz a vegeredmeny...
(#) c27 hozzászólása Ápr 26, 2012 /
 
Valaki nem tudná megmondani miért nem működik nekem a WDT az Mplabban?
(#) k válasza vilmosd hozzászólására (») Ápr 26, 2012 /
 
Mindenkinek köszönöm a segítséget, csak eddig dolgoztam, azért nem tudtam válaszolni.
Az űrsikló program lezárult, ezért maradok a földön.
A programozáshoz van egy modulrendszerű demopanelem, és egy hálózati panelem. Képek mellékelve.
Ezeken szeretnék tanulni.
A hálózati panelt értelem szerűen hálózaton keresztüli vezérlés fejlesztésére használnám.
Valamint van egy tervem, a meglévő - mellékelt képen látható kamerámat mozgásérzékelők felhasználásával vezérelném, úgy, hogy ahol mozgást érzékel a kamera, automatikusan az oda beprogramozott helyre fordul.
A kamera egyébként 485-ös kábelen keresztül kapja a vezérlő jeleket.
(#) k válasza Pepebá hozzászólására (») Ápr 26, 2012 /
 
Az elsőt ismertem, A második linket köszönöm.
(#) k válasza sirály12 hozzászólására (») Ápr 26, 2012 /
 
Köszi amit küldtél, ezt valahogy nem találtam meg, most küzdök vele, - ha nagyon elakadok, akkor kérdezek.
(#) Hp41C válasza Pepebá hozzászólására (») Ápr 26, 2012 /
 
A 10 egy egész konstans, a 10.0 egy float konstans a fordító szemével nézve.
Arra felhívnám a figyelmet, hogy az 1/10 egy végtelen, szakaszos kettedes tört, vele számolva előbb utóbb pontatlan lesz az eredmény a véges számábrázolás miatt. Ha sokjegyű számokkal kell műveletet végezni és fontos a pontosság, akkor célszerűbb hosszú egész számokkal számolni és külön nyilvántartani a tizedespont helyét. A tizedespontot a szöveggé alakítás és a kijelzőre való küldés között is a helyére lehet tenni.
(#) c27 válasza c27 hozzászólására (») Ápr 26, 2012 /
 
Nekem nem tudna senki sem segíteni? Lehet primitív a kérdésem de akkor már az is jobb a törölve lesz mint, hogy levegőnek néznek. (Az előző oldalon egyszer már feltettem a kérdést beállítottam a konfigbe a wdt on-t beírom az inicializálásba a wdt beállításait de nem működik nem tettem direkt bele crlwdt-t, de nincs reset.)
Következő: »»   245 / 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