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   783 / 1210
(#) pajti2 válasza apromax hozzászólására (») Ápr 30, 2016 /
 
A fentiekben már csak az a közben felvetődött kérdés nem volt érintve, hogy
Idézet:
„nem adtunk neki típust”
.
De igen, adtunk. A C-ben minden típus alapból integer. Ha azt írod "signed", az "signed int", ha azt írod "long", az valójában "long int", és amikor majd kijavítva a 16 bites fordítódhoz azt fogod leírni "unsigned long", az valójában "unsigned long int". C alaptulajdonságról van szó, nincsen benne semmi különös. A C-vel foglalkozó könyvekben nem kellene az elején átugorni a fejlődéstörténetükről szóló részt, hogy az úgyis csak halál unalmas, mert abban lehet megtalálni ilyesmi utalásokat.

A sima "unsigned" pedig "unsigned int" volt, és azért is nem működött a program, mert túl kicsi volt a változó, hogy beleférjen a szorzás eredmény, túlcsordult, és elveszett az adat. Az "int" mindig a fordítóra jellemző bitszélességű. 32 bites fordítóval 4 byte-os változót ad, de 16 bites fordítóval csak 16 bitest. Az és azért okozott hibát.
(#) don_peter válasza Hp41C hozzászólására (») Ápr 30, 2016 /
 
Igen pont erre gondoltam.
Mármint olyasmire mint a 18F4550-en is van, hogy PC-és programmal lehet feltölteni a programot amit az ember ír rá.
Jó lenne egy könnyen frissíthető megoldást összehoznom..

pajti2: köszi..
Amúgy ezekhez lehet is letölteni ilyen kódot vagy ezt nekem kellene majd megírni?

Más:
Valakit érdekelne PIC32MX795F512L okoska?
Kicsit drága, és ha lennénk páran és rendelnénk együtt az lenne a legjobb megoldás.
Aliéknál egész kedvező lenne, de nyilván csak 10-es csomagban kedvező, ami összességében már kicsit sok lenne nekem egyedül. Lenne valaki aki bevállalna pár darabot?
Bővebben: Link
(#) pajti2 válasza don_peter hozzászólására (») Máj 1, 2016 / 1
 
Idézet:
„Amúgy ezekhez lehet is letölteni ilyen kódot vagy ezt nekem kellene majd megírni?”


Belekotortam találomra az egyik régi mla-ba, és a 2013 februáriban ott vannak ilyesmik hogy:
-Android Accessories\Web Bootloader Demo - OpenAccessory Framework
-TCPIP\Internet Bootloader
-USB\Device - Bootloaders
-USB\Host - Bootloaders

Szóval gondolom akadnak rá példák neten bőven. Tölts le pár mla-t, vagy nézelődj blogokat, olvasd el a doksijaikat, nézd meg a kódot, lőni lehet a témában kész cuccot is. De amúgy írni sem bonyolult. A bootflasher sem más, csak egy program, ami ellenőriz valami induláskori elektronikai állapotot, és ha úgy találja, nekiáll olvasni valami kommunikációs portot, és amit azon kap, azzal újra írja a flash területet. Nem ördöngösség, és bármelyik pic-en működni tud, ami tud saját flash-t írni. Épp csak ügyesen kell elhelyezni a program részeket, hogy ne zavarják egymást feleslegesen. A 32-es pic-eknek arra van külön hw támogatásuk is van, az az előnyük a témában (adatlapon találsz rá utalást).
(#) elektroszala hozzászólása Máj 1, 2016 /
 
Üdv!
3 pic-et kellene UART-on beszéltetnem(2400 baudon), de csak "masternek" kellene kvarcot tennem. A kérdéseim: szükséges-e a közös órajel, tekintve, hogy nagyon eltérő hőmérsékletben fognak üzemelni (-10 és 60 fok között). Vagy ilyen alacson órajelen ( a "szolgák" 500Khz-en fognak ketyegni), és ilyen alacsony baud rátán nem lesz gond, és felesleges a közös órajel?
(#) Bakman válasza elektroszala hozzászólására (») Máj 1, 2016 /
 
Az UART sebessége fix, teljesen mindegy, hogy a kontroller milyen órajellel jár, már ha az adott sebességgel tudja kezelni az UART-ot.
(#) eSDi válasza elektroszala hozzászólására (») Máj 1, 2016 /
 
Üdv!

Mivel benne van a protokoll nevében, hogy aszinkron, így semmilyen esetben sem kell órajelszinkront alkalmazni. A start és stop bitek szinkronizálják az átvitelt. Azt viszont meg kell nézned, hogy az 500kHz-es órajel a slave PIC-ek esetében mennyit mászik el ezen a hőmérséklet intervallumon belül és az UART átviteli sebességét úgy válaszd meg, hogy a legkisebb és legnagyobb eltérés esetén is kicsi legyen az UART hibába.
(#) elektroszala válasza eSDi hozzászólására (») Máj 1, 2016 /
 
0.16% hibát hoz a táblázat 500kHz-es órajelnél 2400,4800,9600 baudra is.
Jártam már úgy 2db 16f6420-as pic-el, hogy az egyik belső oszcillátorról ment 4Megán, a másik rezonátorról(szintén 4 megán), és a 9600-as Uart-nál gyakorlatilag nem működött a kommunikáció. Igaz, az egyik kint volt az ablakban a kb 0 fokban, a másik a szobában. 50 centi kábel volt közöttük, az szinte semmi. Ahogy átkapcsoltam a belső oszcillátorosat a rezonátorára, rögtön jó lett a kommunikáció. Na ebbe hibába nem szeretnék beleesni, ezért gondoltam arra, hogy a mester adná az órajelet (nem az Uart szinkront!). Ez esetben addig megvan, hogy a slave -nél a CLKIN-re adom az órajelet, de a mester melyik lába a CLKOUT?
(#) diablo válasza Hp41C hozzászólására (») Máj 1, 2016 /
 
Köszi a válaszokat, most már ezt is fogom tudni!
Csak van egy olyan apró pici problémám, hogy kipróbálva az XC8 nem fordítja le a fenti union-t az __attribute__((packed))__ kiegészítés miatt. Akkor, hogy is lehet így hordozható kódot készíteni és nem szívatni magamat a közel jövőben ha használni akarom a függvényt mondjuk XC16 fordítóval?
Még valami. Ha ez egy fordítófüggetlen direktíva lenne, akkor miért nem találom meg egy könyvben sem, csak az XC16 fordító manual-jában?
Meg nem kellene az XC8-nak is ismernie az utasítást, attól függetlenül hogy nincs rá szüksége?
A hozzászólás módosítva: Máj 1, 2016
(#) _BiG_ válasza diablo hozzászólására (») Máj 1, 2016 /
 
Erre az esetre feltalálták a feltételes fordítási direktívát (ifdef, ifndef...)
(#) pajti2 válasza diablo hozzászólására (») Máj 1, 2016 /
 
Kicsi emlékeztető:
  1. union __attribute__((__packed__)) convert_struct {


De az is lehet, hogy a te fordítód így fogja szeretni:
  1. union __attribute__((packed)) convert_struct {


Jelezd, ha egyik sem jó.
(#) cross51 válasza pajti2 hozzászólására (») Máj 1, 2016 /
 
pajti2:
Ha jól tudom az XC8 nem támogatja az attributúmokat így szerintem egyik se lesz jó
diablo:
Ha hordozható kódot akarsz az XC16 XC32 kezeli az attributúmokat csak az XC8 nem, erre ez megoldás lehet:
  1. #if defined(__XC8)
  2.     #define __attribute__(a)
  3. #endif
A hozzászólás módosítva: Máj 1, 2016
(#) diablo válasza pajti2 hozzászólására (») Máj 1, 2016 /
 
Igen, itt elírtam, de MPLAB-ban nem.
A második sem jó.
Idézet:
„../main.c:56: warning: (1429) attribute "packed" is not understood by the compiler; this attribute will be ignored”

Az __attribute__-t ismeri, mert kiemeli, csak a packed nem tetszik neki. Szerintem.

_BiG_: Gondoltam rá, de ha áttérek más mikrovezérlőre ahol egészen más a fordító, akkor ott lehet megint bele kell nyúlni a kódba mert az meg megint másképp szereti... Így visszaemlékezve, volt már hogy találtam a neten egy "tuti szuper" kódot, de elég sok ehhez hasonló utasítást kellett kitörölnöm belőle, hogy nálam is működjön... Nem tudom miért nem szabványosak ezek az utasítások. Az uint8_t, uint16_t...stb. deklarálásokat is tudom szeretni...
A hozzászólás módosítva: Máj 1, 2016
(#) cross51 válasza diablo hozzászólására (») Máj 1, 2016 /
 
Ha vissza emlékszel Hp41C hozzászólására akkor 8 biten nem lényeg, ha csak warning-ot dob akkor mindegy, de ha zavar:
  1. #pragma warning disable 1429

Nem tudom, hogy az __attribute__-ra mért nem szólt mert, ha megnézed az XC8 User Guide-ot akkor ott az attribute-ot mindig 16 és 32 bites fordítókhzo írják és a 8 bitesnél másképp lehet megtenni. Az előző #define-és részlet egy MLA-s programból lett kiszedve, tehát szerintem kell.

Szerk.:
és ha az uint8_t definiálás zavar typedef uint8_t unsigned char; ezeket azért használják mert rövidebb és a char-ról tudod, hogy 8 bites de az int már fordítótól függ így ezzel tudod pontosan megadni, hogy signed vagy unsigned és milyen hosszú a változó 8, 16, 32, 64 bites.
A hozzászólás módosítva: Máj 1, 2016
(#) _BiG_ válasza diablo hozzászólására (») Máj 1, 2016 /
 
Ezt a különböző fordítók készítőin kéne leverni. Mert szeretnek kitérni a C nyelv szabványából.
A forráskód magas szintű, pont azért, hogy a különböző hardverek gépi kódjait lehessen mögé tenni a fordítóval. De ha a fordító "szűklátókörű"...

Mondjuk filóztam, és arra jutottam, hogy egy 8 bites fordítónak (pl XC8) minek a "packed", mikor ott minden byte-határon van, nem képződik "luk" a memóriában. Tippem az, hogy ezt a lehetőséget, mint feleslegest, simán kispórolták.

Viszont te olyan trükköket is használhatsz, hogy "üres" byte-okat definiálsz az adatstruktúrába, ha kell, így az union-on belül sem fog elcsúszkálni semmi. Nyelvi korlátja nincs. Csak te ne zavarodj bele.
Platformfüggetlenség igényli, hogy kicsit "szájbarágósan" programozzunk, azaz minden jelölve, signed, unsigned, stb. Hogy ne a fordító "találja ki", aszerint, hogy mi az alapértelmezése. Nemrég volt is itt kérdés, hogy az "int" így magában milyen melyik fordítóval. Írd ki, hogy milyen legyen és akkor tuti.
A hozzászólás módosítva: Máj 1, 2016
(#) diablo válasza cross51 hozzászólására (») Máj 1, 2016 /
 
Ha csak warning lenne..
Idézet:
„../main.c:56: warning: (1429) attribute "packed" is not understood by the compiler; this attribute will be ignored
../main.c:56: error: (323) struct/union tag or "{" expected
../main.c:56: error: (314) ";" expected
../main.c:58: error: (285) no identifier in declaration
../main.c:58: warning: (374) missing basic type; int assumed
../main.c:58: error: (314) ";" expected”


Kipróbáltam a define-os kódot, működik, köszi! Bár még mindig nem tartom tökéletes megoldásnak.

Tudom, hogy úgy meglehetne csinálni, de még nem vettem rá magam. Gyorsabban kitudtam cserélni mint megírni egy ilyen typedef-es header állományt. Meg úgy én elvárnám a Microchip-től, hogy tegyék már be ők a fordítójukba.

_BiG_:
Signed, unsigned-ot XC8 óta jelölöm. Hi-Tech C-nél azt hiszem még szerencsém volt, mert egyezett a programozás órákon tanultakkal, de XC8-ban meg már fordítva volt értelmezve azt hiszem a char típus. Majd ha találkozok egy Microchip-es fejlesztővel azon leverem ezeket.
(#) Hp41C válasza cross51 hozzászólására (») Máj 1, 2016 /
 
Idézet:
„...és ha az uint8_t definiálás zavar typedef uint8_t unsigned char; ezeket azért használják mert rövidebb és a char-ról tudod, hogy 8 bites de az int már fordítótól függ így ezzel tudod pontosan megadni, hogy signed vagy unsigned és milyen hosszú a változó 8, 16, 32, 64 bites.”

Sajnos jött az a fránya unicode. Azaz egy karakter már nem biztosan 8 bites. Akkor használják az uint8_t megoldásokat, ha azt szeretnéd, hogy a forrásban látszódjon, hogy valóban 8 bitről van szó.
Továbbá egy 16 bites fordító az int -et 16 bitesnek, egy 32 bites fordító 32 bitesnek, egy 64 bites fordító 64 bitesnek tekinti.
Sőt az enum deklarációt jobb kerülni, ha kölönböző platformon szeretnél ugyanolyan helyfoglalású struktúrákat használni (állományból beolvasni), mert a felhasznált típus adatbitjeiben különbség lehet.
(#) kriszrap hozzászólása Máj 1, 2016 /
 
Sziasztok
Nagyon kezdő kérdésem lenne.
A képen látható módszer nyúgotan csinálhatom úgy ???
Tranzisztorok ami majd hajta a oszlopokat(5x5x5nél) Emittereit köthetem PIC groundjára???

Shot_425.jpg
    
(#) _BiG_ válasza Hp41C hozzászólására (») Máj 1, 2016 /
 
Sőt, a float típus sem egy életbiztosítás, mert ki tudja, hogy egy másik platformon ugyanaz-e az ábrázolási módja. Milyen a mantissza és a karakterisztika hossza, elhelyezkedése, implicitbites-e, a karakterisztika netán kettes komplemens, vagy előjeles...
Amikor két különböző eszköz adatot cserél, hát lehet kavar, nehogy jólérezzük magunkat...
(#) pajti2 válasza kriszrap hozzászólására (») Máj 2, 2016 /
 
Jó lesz úgy is, vagy ha az 1k-nál nagyobb ellenállást találsz csak a fiókban, pic függvényében fölfelé 1k..10k..100k bármi jó, vagy akár el is lehet hagyni, ha van a pic-nek programozható weak pull-up funkciója.
(#) pajti2 válasza cross51 hozzászólására (») Máj 2, 2016 /
 
Az xc8 környezetről mindenki tudja, hogy még gagyi. Nem különösebben meglepi, ha valami nem normális rajta Ha éppen kell egy kerülő út, packed helyett játszadozhatsz pointerekkel is, ha egészen biztosan jól megértetted, miért is van rá szükség, és hogyan dolgozik. Kicsit fapadosabb ugyan, de te magad is legyárthatod azokat az elemeket pointeres utalásokkal, amiket az union létrehozna neked. Asm szinten már nulla lesz a különbség. Esetleg aki alapozott asm-ben is, neki egyébként sem kellene, hogy gondot okozzon.

Egyik verzió:
  1. union __attribute__((__packed__)) convert_struct {
  2.   unsigned char b[4];
  3.   unsigned long u; };
  4.  
  5. union convert_struct s1;
  6. s1.b[0]= Temperature_Low;
  7. s1.b[1]= Temperature_High;
  8. s1.b[2]= 0;
  9. s1.b[3]= 0;
  10. s1.u*= 110;
  11. s1.u/= 16382;
  12. s1.u-= 40;
  13. //s1.b[0]-ban van a 8 bites vegeredmeny


Másik verzió:
  1. unsigned char b[4];
  2. unsigned long* p1;
  3.  
  4. p1= (unsigned long*)b;
  5. b[0]= Temperature_Low;
  6. b[1]= Temperature_High;
  7. b[2]= 0;
  8. b[3]= 0;
  9. *p1*= 110;
  10. *p1/= 16382;
  11. *p1-= 40;
  12. //b[0]-ban van a 8 bites vegeredmeny


A kódrészleteket én magam nem fordítottam le, nem próbáltam ki, ha hibaüzenet van rá, jelezd.
(#) pajti2 válasza Hp41C hozzászólására (») Máj 2, 2016 /
 
Az utf16 esetében ott van az unsigned short, az miért nem jó?
(#) kriszrap válasza pajti2 hozzászólására (») Máj 2, 2016 /
 
Még annyit hogy a tranziztorok hajtány a ledek minusz lábát az is mehet a vdd be?? Nagy áram miatt kérdezem.
(#) Udvari Zsombor hozzászólása Máj 2, 2016 /
 
Csak elvi kérdés: Nem hülyeség egy 8×2 LCD-n alapuló WAV hangrögzítőben gondolkodni?
(#) don_peter válasza Udvari Zsombor hozzászólására (») Máj 2, 2016 /
 
Magadnak készíted?
Akkor miért lenne?
Később még mindig lehet majd rajta variálni, csak az alapok legyenek meg
(#) diablo válasza kriszrap hozzászólására (») Máj 2, 2016 /
 
Miért ragaszkodsz a 74HC595-höz? Én a múltkor linkelt DM13A-val tennék egy próbát: több csatorna, beállítható áramgenerátor (max 60mA/csatorna), open-drain kimenetek amelyekre maximum 17V kapcsolható, ami egy 5 LED-ből álló oszlophoz elég, már ha csak oszloponként akarod őket vezérelni és nem külön-külön minden LED-et. A tervezés is könnyebb lenne, mert nem kell hozzá se tranzisztor se előtét ellenállás a LED-ekhez.
(#) kriszrap válasza diablo hozzászólására (») Máj 2, 2016 /
 
Meg kiakarom probálni shiftregiszterrel elég kezdő vagyok hogy ilyennel probáljam meg.
Tranyo emittere nyugodtan mehet a pic groundjába nem lesz baj az áram miatt?
(#) diablo válasza kriszrap hozzászólására (») Máj 2, 2016 /
 
Nem lesz baj, miért is lenne? Máshová nem is tudod kötni, ha csak nem akarod külön táppal hajtani a PIC-et és a LED-es áramkört.
A DM13A is shift regiszter csak fel van turbózva egy kicsit.
Mindjárt rendelek is magamnak belőle.
A hozzászólás módosítva: Máj 2, 2016
(#) Hp41C válasza pajti2 hozzászólására (») Máj 2, 2016 /
 
Én csak magyarázom, hogy ma már az sem biztos, hogy egy karakter 8 bites...
(#) kriszrap válasza diablo hozzászólására (») Máj 2, 2016 /
 
Majd külön tápról megy majd akkor sincs baj???
A hozzászólás módosítva: Máj 2, 2016
(#) Udvari Zsombor válasza don_peter hozzászólására (») Máj 2, 2016 /
 
Hát, ez nem lesz egyszerű, mert egyrészt "mínuszban van" (-5000Ft, amit még "törlesztenem" kell) a zsebpénzem, másrészt még csak elvi síkon van meg a dolog, harmadrészt nem értek a programozáshoz (HTML-t már próbáltam, de az se ment valami nagyon), negyedrészt pedig még nincsenek meg az alkatrészek.
Fejben úgy számoltam, hogy minimum 8 nyomógomb, 3 kapcsoló, 1 PIC (foglalattal szerelve!), 1db (háttérfény nélküli!) 8×2 alfanumerikus LCD, 1 electret mikrofon, 2 (kapcsolós) sztereo jack csatlakozó és (külső) tápfeszültség-csatlakozó meg elemtartó +breadboard. Ez elég, vagy kellene még hozzá némi egyéb körítés?
A hozzászólás módosítva: Máj 2, 2016
Következő: »»   783 / 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