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
![]() ![]() 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 |