Fórum témák
» Több friss téma |
Sajnos a MikroC beépített függvényeinek felépítését nem lehet látni, de szerintem ugyanilyen elven működik.
Idézet: „a MikroC beépített függvényeinek felépítését nem lehet látni,” Ez nem teljesen igaz. MPLAB X-ben kérsz rá egy fordítást, majd megnyitod a PIC programmemóriája ablakot, és ott lessz az egész asm. kódban. A hozzászólás módosítva: Szept 23, 2015
Igen, fordítás után valóban látszik MikroC-ben is, MPLAB sem kell hozzá.
Viszont látszólag nálam más probléma van. Egy kicsit már előrébb vagyok, 0..3-ig már működnek a portok, viszont RA4 nem. RC4 állapota 15ms-onként változik. Alapbeállításként RA4-en van kivezetve a belső órajel, azt hiszem ezzel lehet a gond. A konfigurációs biteket már beállítottam úgy, hogy RA4 láb I/O funkciójú legyen, de a hiba változatlan.
Most úgy tűnik, hogy működik.
Annyit változtattam, hogy bitenként állítottam be a PORTA adatáramlási irányát ilyen módon: TRISA0_bit = 1; Nem értem mi lehetett a gond. Most jöhet az EEPROM rész: Ha sem LVD, sem ADC nincs a PIC-ben, akkor lehetséges valahogy kikapcsoláskor menteni? A hozzászólás módosítva: Szept 23, 2015
Ha semmi nem előzi meg a kikapcsolást akkor vannak tápfigyelő ic-k amik logikai 1-be vagy 0-ba állnak a gyárilag beállított feszültségértéknél. Választasz olyat ami a tuti tápfeszültséged alatt van valamivel és tápágba teszel egy nagyobb kondit, hogy ne egyből foggyon el az energia. Ezt az ic-t kákötöd valamelyik portra bemenetként és ezt figyeled minden ciklusba, ha vált, mentesz.
Igen. A tápfeszt diódával bontsd kétfelé. A PIC tápjára tegyél egy 1000q-s kondit, Ha tud a PIC IOC-t, az a legjobb, mert akkor megszakításból is tudod kezelni, ha nem, akkor pedig sűrűn be kell olvasni azt a lábat, amire a másik diódát kötötted. Természetesen azt a lábat testre kell húzni egy 2,2K-s ellenállással. Amint érzékel, a c port értékét mentsd egy változóba, és minden kimenetet kapcsolj le. Nehogy idő előtt kisüljön a 100q. Ezután indulhat a mentési rutin.
A hozzászólás módosítva: Szept 23, 2015
Idézet: A q alatt milyen mértékegységet értesz? „1000q-s kondit”
A TRISA = 0x0F csak a RA0..RA3 lábakat állítja bemenetnek, a TRISA = 0x3F pedig mind a 6 lábat.
Értem. Azt µF-el vagy csak u-val szoktuk jelölni, ezért nem értettem.
Most látom, hogy az oldal át is alakítja a görög "mű"-re ha az F-el egybeírom. Na megint tanultam valamit. A hozzászólás módosítva: Szept 23, 2015
Stimmel, Csak valamiért nálam ez a "ku" qQ. Fogalmam sincs, miért így írja.
Köszönöm mindenkinek a segítséget.
Sajnos továbbra sem a kívánt módon működik a dolog. Nagyon érdekes, mert a programom csak annyiban tér el a MikroC példaprogramjától, hogy több bemenetet is "pásztázok", plusz a bemenetek logikai 1-re vannak húzva, és a gombok húznak földre. Ennek megfelelően átírtam a Button(); függvény harmadik paraméterét (logikai aktív szint). A gomb nyomva tartása esetén is prellezik a kimenet, holott az még csak az oldstate változónak adna 1-es értéket. Csatoltam egy képet a bekötésről. Szerk.: Watchdog timer ki van kapcsolva. Hp41C: Valóban. RA5-öt nem használom, de RA4 emiatt nem működött megfelelően. A hozzászólás módosítva: Szept 23, 2015
Működik
Minden gombnak külön kell egy oldstate változó, mert ha az egyik gomb megnyomásakor 1-re íródik, akkor onnastól az összes gombot aktívnak érzékeli. Most jöhet az EEPROM-ba mentél optimalizálása. Köszönöm mindenkinek a segítséget. Üdv, Ati
Sziasztok!
Adott egy alábbi kis PIC development board: http://www.piccircuit.com/shop/pic-dev-board/119-icp12-usbstick-pic...d.html Egy hete szenvedek, hogy egy saját programot rátegyek a bootloaderen keresztül. Rengeteg helyen olvastam már utána, de bármit követtem el, sehogy sem sikerült összehoznom, hogy a legegyszerűbb LED villogtatás is sikerüljön. A nyák egy 18f2550-t foglal magában és ha minden igaz, akkor a Microchip bootloadere (Microchip USB HID Bootloader) van rajta. Írtam a gyártónak is, ő csak annyit mondott, hogy át kell címezni a program forráskódját így: START=0x102A END=0x7FFF Majd mellékelte a következő fórumot is. http://www.mikroe.com/forum/viewtopic.php?t=7370 Próbáltam, az MPlab-ben az XC8-as compilerrel vacakolni, de nem ment. Próbáltam, módosítottam a linker fájlt is, de így sem működött. MikroC-vel is próbálkoztam, az sem ment. A bootloadert nem gyalultam le, mert egyrészt "PROTECTED" volt a linkerben a memóriaterülete, másrészt bármikor feltöltve a gyárilag kapott .hex-et, működött minden funkciója, tudtam kommunikálni a panellel oda-vissza. Esetleg van köztetek olyan, aki e család valamelyik csipjével dolgozik és belefutott ebbe a problémába, és meg is tudta oldani? Már egy hete szívok vele napi több órát, hogy megoldást keresgessek és próbálgassam a módszereket, de nem megy. Köszönöm előre is a segítségeteket.
Nem kell feltétlenül midegyiknek külön egy változó, hisz amúgy is csak 1 vagy 0 lesz benne... az oldstate változó mindegyik bitjét felhasználhatod egy külön gombhoz és csak maszkolnod kell, hogy a megfelelő helyre kerüljenek. Ezzel csak egyetlen bájtot kell elmenteni az EEPROM-ba
Valóban, ez tényleg szebb megoldás. Az EEPROM-ba viszont így is csak egy bájtot kell menteni, a PORTC értékét.
Na ez a baj a C nyelvvel.
Egy ilyen egyszerű feladaton is ennyit kell gyötrődni. Ez assemblyben így nézne ki:
Microchip Applications Libraries letöltése és telepítése után az USB szekcióban találsz USB mintaprogramokat.
MPLAB + C18-cal vannak tapasztalataim: 1. Módosított linker állomány kell a projektekhez (a mintapéldák között találsz ilyeneket) 2. A reset és az interrupt vektorokat át kell helyezni az 0x1000, 0x1008, 0x1018 címekre (a mintapéldák main.c állományában ilyen és hasonló sorok:
3. A MAL (vagy úlabban MLA) mintapéldák újabb kiadásait nem ismerem. A régebbiek nem nagyon támogatták a 2550-et. A PIC18F4550 mintapéldákat tehát lehet, hogy egy kicsit idomítani kell...
Felhívom a kedves tanácsadó figyelmét arra, hogy a 16F630 nem rendelkezik btg utasítással. Ha makro -nak definiáltuk, a MpAsm több utasításra fordítja le, így nem célszerű egy btfsc / btfss jellegű utasítás után írni.... Valamint a PCLATH módosítását is kerüljük: ld. movwf 0x0A.
A hozzászólás módosítva: Szept 25, 2015
Köszönöm a figyelmeztetést!
Elkerülte a figyelmemet a PIC tipusa, ráadásul én a 18-as szériát részesítem előnyben. Máskor jobban odafigyelek az ilyen részletekre. Mindazonálltal a C-ről alkotott véleményemet fenntartom.
Meg tudná valaki mondani nekem, hogy az alábbi config-okban mi a különbség (16F690)?
_FOSC_INTRCIO; _INTRC_OSC_NOCLKOUT; _INTOSCIO A leírása ugyanaz mindegyiknek: belső oszci, I/O portokként működnek a lábak.
Újabb kérdés: 16F690, hardveres I2C. Hogyan kell a slave felől jövő ACK jelet figyelni?
Sziasztok!
Rendelkezem egy Pic32MX440f256h Pinguino fejlesztő környezettel,amelynek saját szoftja van,amiben megírhatom a forráskódot,compilalhatom is és fel is dobhatom a kütyüre. A nyelv amiben írni kell a forráskódot nagyrészt kompatibilis az Arduinoéval. Valamifele C és Assembly ötvözet. Néhány dolgot mar kiviteleztem vele,a kérdésem,hogy csak C -ben hogyan tudom megírni a programot? Gondolok itt arra,hogy én C-t tanultam CodeBlocks -ba és például abban szeretnem megírni a forráskódot,mire van szükségem? Pic32MX440f256h includera? Más egyébre? A hozzászólás módosítva: Szept 26, 2015
Gondolom a 16f690-est master-ként akarod használni
Idézet: „Hogyan kell a slave felől jövő ACK jelet figyelni?” De ebben a PIC-ben csak az SPI megy master módban az I2C csak slave módban.
Ó, hogy a pék rakja tele! Szoftveres I2C master módra van valahol példa assemblyben?
Köszönöm! Hát ez bonyolultabb mint hittem...
Sziasztok!
Akadt egy megoldandó problémám. A felállás jelenleg az, hogy egy bemenő jel hatására az egyik kimeneten bekapcsol egy LED, majd egy idő után kialszik. A problémám az, hogy a LED helyett egy mikro szervó motort kellene a két véghelyzet között vezérelni, tehát a jelre beáll az egyik véghelyzetbe, majd a várakozási idő után a másikba. PIC16F628A-ról van szó. Feltételezem PWM nélkül nem megy, viszont ebben nincs tapasztalatom. Ha valaki tud segíteni, azt megköszönöm!
Szia!
Ragaszkodsz ehhez a PIC-hez? Mert ha csak ennyi a feladat, akkor egy PIC12F1840-el többre mennél. Mindössze 8 lábú, és vannak analóg bemenetei. Azaz a kívánt pozíciókat többfordulatos potikkal tudnád beállítani.
Szia! Azért használom ezt, mert csak ebből van itthon. Közben a feladatot sikerült megoldanom, bár valószínűleg nem a legegyszerűbb úton.
|
Bejelentkezés
Hirdetés |