Fórum témák
» Több friss téma |
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.
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 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).
Ü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?
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.
Ü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.
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?
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
Erre az esetre feltalálták a feltételes fordítási direktívát (ifdef, ifndef...)
Kicsi emlékeztető:
De az is lehet, hogy a te fordítód így fogja szeretni:
Jelezd, ha egyik sem jó.
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:
A hozzászólás módosítva: 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. ![]() A hozzászólás módosítva: 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:
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
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
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. ![]() ![]() _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. ![]() 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.
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???
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...
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.
Az xc8 környezetről mindenki tudja, hogy még gagyi. Nem különösebben meglepi, ha valami nem normális rajta
![]() Egyik verzió:
Másik verzió:
A kódrészleteket én magam nem fordítottam le, nem próbáltam ki, ha hibaüzenet van rá, jelezd.
Az utf16 esetében ott van az unsigned short, az miért nem jó?
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.
Csak elvi kérdés: Nem hülyeség egy 8×2 LCD-n alapuló WAV hangrögzítőben gondolkodni?
![]()
Magadnak készíted?
Akkor miért lenne? Később még mindig lehet majd rajta variálni, csak az alapok legyenek meg ![]()
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.
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?
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
Én csak magyarázom, hogy ma már az sem biztos, hogy egy karakter 8 bites...
Majd külön tápról megy majd akkor sincs baj???
A hozzászólás módosítva: Máj 2, 2016
![]() 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
|
Bejelentkezés
Hirdetés |