Fórum témák
» Több friss téma |
Az MPLAB-ban be kell állitsad a "Language toolsuite"-ot annak függvényében, milyen fordítót használsz. Emellett a "Build options" menüpont alatt is be kell tegyed, hogy a fordító header filejait hol lehet elérni. 12F683-at programoztam már, HI-TECH demó verziójú kompilátorral.
Tudsz MPLAB-al is beégetni, de van egy nagyon szimpatikus kis program, amit "PicKit2 Standalone application" néven lehet megkapni. Én ezt használom például, megszoktam. István
Sziasztok!
A következő a problémám: Megcsináltam ezt a termosztátot,szép is,jó is,de én szerettem volna hűtőgéphez is használni. Ezek a törökök a vesémbe láttak, kiadtak egy modosított változatot is, amilyet szerettem volna. Szerintük minden ugyan az, csak16f628 helyett 16f88-as pic kell más hex fájlal. Kipróbáltam. Hááát.. A nyomógombok prelleznek az új variációval,a kettes lábra menő nem is kezelhető. Cseréltem gombot,u.a. Visszatettem a 16f628-at,tökéletes. Mi nem jó?
Hali!
Rég jártam erre. Kényszerűségből félre kellett tennem a PIC programozgatást (azért a fórumot nyomon követtem), melyet a PICCOLO projekt felhasználásával fejlesztgettem. PIC18F4550 I2C buszon hőmérő szenzorokkal és port bővítőkkel, CDC USB kapcsolattal. LCD-vel akarom bővíteni. Viszont úgy emlékszem a projekt függvényei ezt nem teszik lehetővé, mivel azonos függvényt használna. Arra gondoltam hogy az USB kapcsolat figyelésével talán meg lehetne oldani, mivel azonos időben nincs szükség mindkettőre. A CDC kapcsolat adatforgalom megszűnésével járó, kapcsolat megszakadás megoldásra került (gyakorlatilag úgy viselkedik mint a HID kapcsolat ,lényeg meg lehet szakítani. Icserny Úr válaszát megköszönném amennyiben erre jár. Üdv. Idézet: Én itt elveszítettem a fonalat. Mi használna azonos függvényt? „a projekt függvényei ezt nem teszik lehetővé, mivel azonos függvényt használna.”
Sziasztok,
Bele fogtam az első PIC programomba, de máris segítséget kérnék. Amiről szó lenne: 12f683 és assembly-ben próbálkozom. Leírásokból, minta kódból illetve kútfőből próbálkozom. Amit első körben szeretnék, minden portot digitálissá beállítani, illetve utána azokra kötött led-et, ki be kapcsolgatni programmal. (alapoknál kezdem, még csak ismerkedem) A kérdéseim a következőek: - ha a __CONFIG nél _LVP_OFF szeretnék akkor kiakad, és nem tudom miért?!? kell e egyáltalán? - "org 0" mi, és miért kell, mire jó? - TRISIO val állítom hogy ki vagy bemenet, jól értelmezem? - GPIO al állítom hogy egy kimenet alacsony/magas e. (led ki be kapcsolása) - Jól értem hogy TRISIO/GPIO mindkettőnek csak 6 bitnyi adatot kell megadni? (pl b'000010' és nem b'00000010')? - MOVLW 0x07 (0x07 része) minek felel meg? (b'00000111')-nek? - TRISIO és ANSEL ezek állítják be hogy analog vagy digitális a port, de nem tiszta hogy működnek.
Előre is köszönöm a segítséget! Nagyon!
Hello!
Kezdő PIC-es vagyok és a következő kérdésem lenne. PIC16F648A-t szeretném programozni ICSP-n pickit3-al. Izolációt megoldottam, a táppal kapcsolatban lenne kérdésem. Ha a pickit 3-at on the programmer módban szeretném használni, az áramkörömről kell táplálnom. VDD és VSS ok. A kérdés, hogy a 12-13-voltot előálítja magának? Elvileg USB is csak 5V-ot ad, szóval alapjában véve hülyeséget kérdeztem, de hátha okosabb leszek. Még sosem használtam on the programmer módban. Üdv, Usane A hozzászólás módosítva: Jún 26, 2013
Idézet: "On the go" módra gondoltál? Ugyanúgy az USB csatlakozójára kell +5V-ot adni , mint máskor (nem feltétlenül az áramkörödről, lehet egy számítógép, vagy USB "töltő" is). A 12-13 V-ot természetesen előállítja. „Ha a pickit 3-at on the programmer módban szeretném használni, az áramkörömről kell táplálnom.” Idézet: Hat év alatt én is csak egyszer használtam ebben a módban a PICkit2 programozómat. „Még sosem használtam on the programmer módban.”
Szia!
__CONFIG nél _LVP_OFF: A 12F683 -nak nincs ilyen bitje. Olvasgasd az adatlapját. org 0: Abszolút kód fordításakor a kezdőcímet állítja be (épen 0 -ra). TRISIO -val állítom hogy ki- vagy bemenet, jól értelmezem: Igen. GPIO -val állítom hogy egy kimenet alacsony/magas: Igen. Jól értem, hogy TRISIO -nak / GPIO -nek csak 6 bitnyi adatot kell megadni: Igen, de úgyis 8 bites értéket fog kezelni a fordító, aminek a felső két bitje 0. MOVLW 0x07 (0x07 része) megfelel a b'00000111'. A 0x prefix a 16 -os számrendszert írja elő. TRISIO és ANSEL: Az ANSEL állítja be, hogy egy kivezetés analóg (a hozzá tartozó bit 1) vagy digitális (a hozzá tartozó bit 0). A TRISIO állítaja, hogy egy kivezetés bemenet (a hozzá tartozó bit 1) vagy kimenet (a hozzá tartozó bit 0). Egy analóg módra állított kivezetésről mindig 0 olvasható a portműveletekkel. Egy analóg módra állított kivezetésre logikai szinthez tartozó feszültség (a GPIO megfelelő bitjétől függ) kényszeríthető, ha a kivezetést kimenetnek programozzuk. A hozzászólás módosítva: Jún 26, 2013
Igen, nem csodálom. Bizony félre sikerült a mondat.
Arra gondoltam hogy az LCD-re írásra és az USB kommunikációra ugyan az a függvény van használva (_user_putc() függvény)
Köszönöm, másik kérdésem is lenne.
Fenti kód, mit állít, mihez kell? movlw 0x07 helyett lehet movlw b'00000111' használni vagy ilyen esetekben adott hogy milyen formátumot kell? Köszönöm előre is!
Szia!
A komparátor modul még felülbírálja az ANSEL beállítást. Ld adatlap 8. fejezet. Idézet: „movlw 0x07” Akármilyen, szintaktikilag helyes forma lehet a 0x07 helyett, aminek az eredménye 7 decimálisan: .7 vagy b'111' vagy (1<<CM2)|(1<<CM1)|(1<<CM0) stb. A hozzászólás módosítva: Jún 26, 2013
A CMCON0 regiszter a komparátor modul üzemmódját állítja be (8. fejezetben ismertetik részletesen.) A PIC mikrokontrollerek analóg célra használható lábai rendszerint alapállapotban analóg bemenetként vannak beállítva, ezért, ha digitális I/O-ként akarod használni, az analóg funkciókat le kell tiltani ezekre a lábakra. Többek között a komparátor modulhoz tartozó lábak ilyenek. Minden adatlapban az I/O portok ismertetésének van egy összefoglaló az érintett lábak konfigurálásáról. Ugyanígy van összefoglaló minden egyes modult ismertető fejezet végén.
Bármelyik számábrázolási formátumot használhatod, a fordítónak mindegy. Neked nem. Én nem nagyon szoktam használni a ezt a formát. Az adatlapban minden regiszter ismertetésénél a bitek aránylag könnyen megjegyezhető rövidítését felsorolják. Amíg kezdő az ember, ritkán fut olyanba, hogy a kontroller memóriája nem elég, ezért én amíg van hely, ezt valahogy így szoktam leírni:
Ez a program futása szempontjából teljesen egyenértékű a
A hozzászólás módosítva: Jún 26, 2013
Idézet: Ez egyáltalán nem szükségszerű, egyébként is csak a printf() használatánál jön számításba...„Arra gondoltam hogy az LCD-re írásra és az USB kommunikációra ugyan az a függvény van használva” A C18 fordítóhoz mellékelt gyári programkönyvtár két előre definiált kimenet használatát teszi lehetővé. Az alábbi beállítás esetén az _user_putc() függvényt hívja a printf():
Van ezen kívül egy _H_USART választási lehetőség is, amellyel az _usart_putc()-re lehet irányítani a kiírást:
Ha felüldefiniálod az _usart_putc() függvényt úgy, hogy az LCD-re írjon, akkor a stdout átváltásával kényelmesen váltogathatod a kimenetet. Alternatív lehetőség, hogy az _user_putc() függvénybe beteszel agy switch() utasítást, s akkor annyifelé irányíthatod a kimenetet ahány felé nem szégyelled. A hozzászólás módosítva: Jún 26, 2013
Sziasztok!
Segítséget szeretnék kérni. Elkezdtem egy bemenetválasztó program megírásába, C nyelven, MPLab-bal, 16F628-at felhasználva. Jelenleg csak a szimulátorral próbáltam, azonban az RA7, és RA6 lábakat nem tudom átírni magas szintűre. Az RA7-es lábat, stimulusból átírja, a 6-ost onnan sem. Config beállításoknál beállítottam, hogy ez a két láb I/O legyen, és ne oszcillátorhoz használja őket. Eddig ilyen problémával még nem találkoztam, és nem tudom, hogy hol és mi lehet a hiba. Csatoltam a forrásfájlt. A segítséget előre is köszönöm! Üdv. Balázs
Vitatkoznék egy kicsit:
- Mi is a különbség a két programrészlet között?
A bal oldali egymás után 3 módot állít be: a 0x01, a 0x03 és a 0x07 -est. Közben a 1. és a 3. mód a komparátor kimenetét a COUT lábra kapcsolja. Ez nem kívánatos működéshez vezethet. A jobb oldali megoldás a 0x00 módból egyből a 0x07 módba lép, ráadásul a beállítás (movwf) egy primitív művelet, amit a megszakítás nem szakíthat meg. Hasonlóan rossz gyakorlat, ha a kimenetek irányát ily módon álltjuk be: Mondjuk a PORTB 8 kivezetése közül 7 kimenet, és csak egy bemenet.
megoldás, a 0. bitet kimenetnek állítja be. Ezzel két meghajtót (a pic -ét és a külsőt, ami a bemeneti értéket szolgáltatja) szembekapcsol egy utasítás végrehajtási időre. Azaz mégsem annyi időre, hiszen a két utasítás között elfogadhat megszakítást a kontroller... Lehet, hogy én vagyok nagyon kukacoskodó, de kerülendő az ilyen megoldás. Ha a bitnevekkel szeretnénk hivatkozni, akkor az alábbit javaslom:
Köszönöm a felhomályosítást. Még nem egészen értem, de bízom benne sikerül ezek alapján megoldani. Egyenlőre átalakítom a hardvert és utána próbálkozom.
Jó, vitatkozzunk.
Ilyesmi a program elején fordulhat elő, inicializáláskor, amikor megszakítás még nincs engedélyezve.
Jó, vitatkozzunk.... Ilyesmi bárhol előfordulhat egy nagyobb programban. Ha megszokik egyfajta módszert a programozó, akkor azt fogja ismételgetni... Jobb, ha már a kezdetekben a korrekt megoldást tanulja meg. Sajnos egy kicsit többet kell írni. Sajnos ^ 3, hogy a magasabb szintű nyelveken is a bites állításra vannak példák (pl. egy 16 vagy 32 bites kontrolleren egy szó beállítása 15 / 31 bites állításból áll ), közben nem is gondolnak a következményekre...
A hozzászólás módosítva: Jún 27, 2013
Milyen éredekes lenne mondjuk az MSSI modul üzemmódját beállítani úgy I2C master módra 10 bites címzéssel (0x07):
0x01 - SPI Master Fosc/16; 0x02 - SPI Master Fosc/64; 0x03 - SPI Master TMR2 output / 2; 0x04 - SSP Slave, clock SCK pin, SS pin control enabled
Igazad van, lehet olyan esetet találni, amikor nem illik ezt a módszert használni. Bár 40 év programozói pályafutásom alatt nem találkoztam ilyen problémával.
Sziasztok, lehetne a fentebbi "vita" végeredményét az én szintemen is elmondani?
Csak részlegesen futottam át (majd meló után lesz időm olvasok tovább) de ha jól értem, lényeg hogy ha a 12f683 lábait digitális módban akarom használni akkor a Comparator OFF mode kell nekem? (miért?) Ezt meg ugye a CMCON0 bit 0,1,2 ami a (CM0, CM1, CM2) 1-1-1 re állításával érem el. (Ez a Comparator OFF mód az adatlap szerint.) A fentebbi vita ha jól értem arról szólt hogy ne külön külön egymás után állítsam ezt be, hanem egyszerre? azaz mindegy hogy:
vagy
csak a lényeg hogy egyszerre kapcsoljam át a biteket és ne egymás után?
A komparátor, ha nincs kikapcsolva, minden más beállítást felülbírál a PIC12F683 esetén. Addig, amíg nem kapcsolod ki a CM0,1,2 bitek magasba állításával, nem lehet digitális I/O-ként használni a komparátor által lefoglalt lábakat.
Tökmindegy, milyen formában adod meg, a fordító szempontjából ugyanazt jelenti mindkettő.
Sziasztok, megalkottam életem első programját:
A következőbe futottam bele: Warning[205], Message[302] ..... Errors : 0 ..... BUILD SUCCEEDED illetve MPLAB SIM: CORE-W0014: Halted due to PC incrementing over the Maximum PC address and wrapping back to Zero Most akkor rossz (hiányos/hibás) a kód, az MPLAB-al van gond vagy merre tovább? Előre is köszönöm!
Gartulálok!
Hiányzik egy direktíva, ami megmondja a fordítónak, hogy utasításterület jön. Ez a "code"
A Message [302] azt jelenti, hogy a megcímzett adatterület nem a 0 bankban van, és erre a fordító figyelmeztet. Az
A szimulátor azért szállt el, mert a programnal nincs vége, az üres (NOP utasításokkal teleírt) teljes programterületedet szimulálni próbálta. Aztán elfogyott a memória. Ilyen programokat a
A hozzászólás módosítva: Jún 27, 2013
Köszönöm, pár kérdésem megint lenne.
- a "code" mi, és miért kell? Mikor beraktam kiakadt tőle a fordító, illetve egyetlen minta programban sem volt benne. - az errorlevel +-302 hibajelzés ki/be kapcsolást értem, de a fordító a 17 illetve a 20 sorra jelzett ilyen hibát. Mind a kettő a bank 1 ben van. Elvileg előtte a "bsf STATUS,RP0" átléptem bank 1 be. Ezzel kapcsolatban mit ronttam el? Miért nem lépet át bank 1 be? Ilyen esetben nem akad ki a program? - Van olyan opció hogy sorról sorra végig járom a programot és közben lekérdezhetek ilyeneket hogy pl: (bank mennyiben vagyok, valamelyik digitális port alacsony/magas)? - ha jól értem a "goto $" vissza lép a saját sorára és végtelen ciklusba fut? - LIST, __CONFIG, START,end re ilyet kapok vissza: "Warning[205].....Found directive in column 1." Ez mi, kell vele törődni? - LIST, __CONFIG, START,end ha jól értem mindenképp kellenek, ezekről hol olvashatok? - Az "org 0" az azt csinálja hogy jelen esetben a 2048-nyi helyből a legelején kezd? Ha mondjuk azt mondanám hogy "org 30" akkor oda ugrik és ott kezdene? Előre is köszönöm!
A "code" még korai, akkor kell, ha több külön fordított részből áll össze egy projekt. Automatikusan írtam bele a programba. Ha abszolút kódot generáltatsz az MPASM-el, akkor nem kell.
A fordító nem foglalkozik azzal, hogy melyik bankra vonatkozik az adott utasítás. Ha nem a bank0-ban vanaz adott regiszter, kiírja. Ezért le szokták tiltani ezt a figyelmeztetést a program elején. Szerintem hasznos. A Debugger fülön ki lehet választani az MPLAB SIM-et, azzal lépésenként szimulálni a programot. (Remélem az MPLAB 8.xx-et használod, mert ha nem, akkor MPLAB-X ben nem tudok segíteni.) a View/Watch menüben ki lehet választani regisztereket, változókat, és megmutatja az állapotukat. Pontosítok, a goto $ utasításban a $ az utasítás címét (és nem sorát) jelenti amemóriában. A Start egy sima címke a programban, az end pedig kötelező lezárása a fordítandó résznek. A kontroller az utasítások végrehajtását a 0 címen kezdi. Ha 30-at írsz, akkor az első utasítás arra a címre kerül, ide egy ugró utasítást szoktak tenni, ami a program első utasítására ugrik, mert a memória elején vannak a megszakításvektor(ok). A LIST, CONFIG direktívák nem kezdődhetnek az első oszlopban, azért pampog miatta. A súgó szinte mindent elárul ezekről (is).
Akkor ha jól értem a "bsf STATUS,RP0" rendesen átlép bank1 be, de ettől független szól a fordító? Ha meg nem jó bankban lennék akkor kiakadna?
"goto $" helyett akár írhatnék "goto Start" ot is és akkor az egész lenne egy végtelen ciklusban? súgó alatt az MPLAB súgóját érted? MPLAB 8.88-at használok jelenleg, ezt tanácsolta valaki de már nem emlékszem ki. Megszakításokról hol olvashatok? (ha jól sejtem a logikai bemenetekhez nélkülözhetetlen) PWM / időzítés-ről olvasni valót hol találok?
Ez a View/Watch MPLAB-ban nagyon hasznos
Tesztelések közben felfigyeltem arra hogy 12f683 egyik lábát nem lehet kimenetre állítani, és utána olvasva az adatlapon is benne van. Ez miért van amúgy? Gyakran fogok ilyenekkel találkozni a PIC ek között?
"bsf STATUS,RP0" - Ne ezt a módszert szokd meg. banksel TRISIO. Tudom, hogy mind az PR0 mint az RP1 -et állítja hagyományos 10F, 12F, 16F kontrollereken. Ha a bankselt makot használod, az menni fog az advanced midrange (12F1xx, 16F1xxx) és a 18F -eken is. Ha már lesz egy kis gyakorlatod, akkor lehet a "bsf STATUS,RP0" formát is használni.
Az MpLab státus sorában a W értéke, a STATUS bitjei és az aktuális bank kivélasztás is látható. org 30: Igen. Amikor ezt a sort értelmezi a fordító a következő utasítást az itt meadott kifejezés értékének megfelelő címre állítja. Figyelem, többszámjegyű értéknél a hazsnált számrendszertől függ a kiszámolt érték. Ha nem akarsz meglepetéseket célszerű közvetlenül megadni. org 30 ; a dafault számrendszert használja org .48 ; decimálisAN org 0x30 ; hexadecimálisan ord b'110000' ; binárisan. |
Bejelentkezés
Hirdetés |