Fórum témák
» Több friss téma |
Volt ma időm próbálkozni és így már jó lett, mindenkinek köszönöm a segítséget, még fogok írni ha elakadok.
Ez lett a végleges megoldás A hozzászólás módosítva: Feb 24, 2019
Sziasztok!
Egy egyszerű kérdés! Szerintetek ez a Timer0 beállítás, és megszakítás helyes? 10ms-ként szeretnék számolni 100-ig. A PIC: PIC16F18456
A T0CON0bits.T0EN = 1; // TMR0 modul engedélyezve sort a Timer0 beállítás végére tenném.
Plusz a megszakítás így lesz jó.
Itt lehet a kutya elásva. A kimeneten csak 250 kHz jön, tehát a reset utáni alapbeállításon, 1 MHz-en jár, de nem értem miért.
Esetleg így?
// SCS INTOSC; IRCF 4MHz_HFINTOSC/4; IDLEN disabled; OSCCON = 0x52 // PRI_SD enabled; HFIOFL not stable; OSCCON2 = 0x04 // INTSRC disabled; PLLEN disabled; TUN 0; OSCTUNE = 0x00 A configban pedig: // CONFIG1H FOSC = IRC // Oscillator Selection bits->Internal RC oscillator PLLEN = OFF // 4 X PLL Enable bit->PLL is under software control PCLKEN = ON // Primary Clock Enable bit->Primary clock enabled FCMEN = OFF // Fail-Safe Clock Monitor Enable->Fail-Safe Clock Monitor disabled IESO = OFF // Internal/External Oscillator Switchover bit->Oscillator Switchover mode disabled // CONFIG3H HFOFST = ON // HFINTOSC Fast Start-up bit->HFINTOSC starts clocking the CPU without waiting for the oscillator to stablize.
Én mondjuk már majdnem csak 32 bitet használok (és így nem gondoltam bele, hogyha valaki most kezdi nem 32 bittel fog kezdeni).
De azért nagy előny hogy 4500 Ft kapsz egy olyan programozót ami az ICD3 képességeivel többnyire megegyezik/felette van. Az újabb PIC-eket azért pl.: 16f15xx-et sárgán támogatja persze a két kezdő "alapkövet" a 628-st 877-et nem támogatja. Ha valaki most kezd el programozni tanulni én neki már erősen csak az X-et ajánlanám. Én azon kívül hogy a mindennek mondható csak nem jónak JVM felzabálja a gépet azon kívül szerintem jobban használható mint a régi vagy akár a többiek eclipse-es "hagyjukmiei". Amire kíváncsi leszek, hogy a dev boardokra mikor rak rendes debuggert az M mert ami a curisoity-n van az hulladék (pedig elvileg valami pk3 alapú) legalábbis nálam egy pic32mm-hez.
Nagyon sokan csak utánépítők, azaz egy kész tervet töltenek le, az építik meg. Ehhez keresnek programozót. Ezen kapcsolások zöme régebbi, nem LVP kompatibilis Midrange kontrollert használ. Csak azért írtam, hogy tisztában legyen a képességekkel, aki vásárolni szeretne. Egy PICkit3 klónnal többre mennek ilyen esetben. Pozitívum, hogy az Atmel típusokat is fogja kezelni. A bővítés igen lassan folyik, a PICkit4 már egy éves és még csak ~300 típus tesztelt.
A PICkit2 -m több mint 2000 -et tud programozni és nem kell firmware-t frissíteni, ha családok között váltunk.
Sajnos a fordításkor ezeket a hibaüzeneteket kapom
![]() main.c:54:6: error: variable has incomplete type 'void' void low_priority interrupt TMR0_ISR(void) ^ main.c:54:18: error: expected ';' after top level declarator void low_priority interrupt TMR0_ISR(void) Ezek mik lehetnek? Nem találtam megoldást a neten.
A PICkit2 alapból olyan, hogy nem vált firmware-t vagy te csináltad? És a PICkit2 gondolom csak úgy tud breakpointot be rakni ha megállítod?
s Erre a ~300 típura már 2 éve talán van némi infó a neten a pic32cz/pic32cx-ről de semmi nincs még mindig róla. Ki tudja hogy mi folyik bent az M-nél. Azt nem tudom, hogy fejlesztik az ICD/PK/Snap-et mert elvileg ugyanaz a controller van benne csak az ICD-be van fpga +dram és ehhez és még egyéb apróságok, nem tudom hogy egy kódot írnak és kicsit portolva van vagy mindegyikhez külön írják.
A többiek "hagyjukmiei" ingyenesek! Gondolom te kifizetted az 1100 eurót, hogy ugyanezt fordítási eredményt megkapd.
![]()
Sziasztok!
Szeretnék ismételten segítséget kérni tisztelt fórumtársak. Szükségem lenne arra, hogy a kontroller PIN4 MCLR/RA3 lábát bemenetként használjam. PIC12F1822 2MHz belső óra, PLL=disabled, LVP=disabled Amire eddig jutottam, beállítások terén EZ VAN A KONTROLLERBEN. config word1: 2E04, b=%10111000000100 config word2: 1EFF, b=%01111011111111 option_reg=0b00001001; //WPUA engedélyezve wpua=0b00001010; //fehúzó ellenállás bekapcsolva PORT RA1 RA3 trisa=0b00101010; //bemenetek és kimenetek beállítása Adatlap szerint, ha bemenetként használnám az RA3-at, akkor config word1-ben: bit 6 MCLRE: MCLR/VPP Pin Function Select bit If LVP bit = 1: This bit is ignored. If LVP bit = 0: 1 = MCLR/VPP pin function is MCLR; Weak pull-up enabled. 0 = MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up under control of the WPUA register. Ennek megfelelően config word2-ben: bit 8 PLLEN: PLL Enable bit 1 = 4xPLL enabled 0 = 4xPLL disabled bit 13 LVP: Low-Voltage Programming Enable bit(1) 1 = Low-voltage programming enabled 0 = High-voltage on MCLR must be used for programming Ami érdekes, hogy a kontroller programját lefordítva, valamint a PICKIT2-be betöltve a lefordított HEX fájlt, a config word2 nem egyezik meg azzal, amit beállítottam a programban. (a config word1 az egyforma). A HEX fájlban visszaírta a fordító az LVP=1re (ez most számomra érdekes, miért?) Ezért továbbra sem használható bemenetként a láb, mert alacsony szintre kötve leáll a program, ergo még mindig MCLR bemenetként funkciónál. 2. lépésként a lefordított HEX fájt betöltve a programozóba, ott átírtam a config word2 beállítását úgy, hogy a bit13=0, majd beégettem a programot. Jó is lett, a program működik már, alacsony szintre kötve a lábat, nem áll le a program. Már kezdtem örülni volna, viszont előjött egy újabb hiba: A PICKIT2 nem látja a kontrollert. Újabb program feltőltésénél nem találja az IC-t, not device detected hibára leáll. Manuálisan kiválasztva a kontrollert, úgy se működik. Tools menüben kiválasztva a USE VPP First program entry-t választva se látja... Szóval teljesen tanácstalan vagyok, hogy mi lehet a hiba. Jó hosszúra sikerült ez, de próbáltam minden adatot, információt megadni nektek, hátha találkozott már valaki ezzel a hibával, vagy tudja, hogy mit rontottam el. Köszönöm. Üdv. Peti A hozzászólás módosítva: Feb 25, 2019
Idézet: „A PICkit2 alapból olyan, hogy nem vált firmware-t vagy te csináltad?” Alapból nem vált firmware -t. Egy firmware elkezeli a kontrollereket PIC12F -től a PIC32 -ig. A PICkit2 -ben egy Script Engine dolgozik, ami max 61 byte hosszú scripteket tud lefuttatni. Ezt a méretet tartani lehet, ha a script műveletek összetettebbek. Idézet a MpLabX 5.10 Readme for PICkit2.htm -ből:
De rég olvasom ezeket a sorokat... 4-5 éve programozza a 18F26K80 -at még az eredeti firmware -vel is. Idézet: „És a PICkit2 gondolom csak úgy tud breakpointot be rakni ha megállítod?” A nyomkövetés azokra a típusokra tud, amit a Microchip megvalósított és úgy, ahogy megcsinálta. Az ejtagproxy segítségével több PIC32 típust lehet kezelni. Idézet: „Ki tudja hogy mi folyik bent az M-nél.” Szerintem senki sem tudja (talán még a Microchip sem), hogy mi lesz. Az Atmel megvásárlásával más 32 bites kontrollerek gyártása is a kezükbe került.
Mi kapcsolódik a MCLR lábra?
Egyenlőre semmi.
Próbapanelen van összerakva. Vagy +5V-ra vagy 0V-ra kapcsolom egy kapcsolóval. Alapból egy "gyenge" felhúzó ellenállással (belsővel) van felhúzva +5V-ra. A kapcsolóval ezt 0V-ra húzom le. Első esetben ha kapcsolót bekapcsoltam, akkor leállt a program, MCLR miatt. Második esetben már nem állt le a program, ha nullára húztam a bemenetet. Csak most új programot nem tudok bele tölteni. Persze a programozó MCLR lába az rácsatlakozik a PIC-re. A hozzászólás módosítva: Feb 25, 2019
Annyit kipróbáltam, ha a próbapanelről kiveszem a kontrollert, és beteszem egy sima Hextool foglalatba, amit az égetőhőz direkt csináltam, úgy látja a PIC-et a PICKIT2.
Viszont ha visszarakom a helyére, úgy nem...
Meglett a hiba. Egy sima elírás volt az OSCCON-nál.
![]() ![]()
Akkor túl nagy terhelés az a "gyenge" ellenállás vagy ha még kondi is van az MCLR-en, vagy még a PGC/PGD lábakon is valami keresztbeakaszt.
Nem tudom mi lehet, nálam jó bárhogy is írom le.
Én MPLAB X 5.1-et és XC8 2.05-öt használok.
Te mivel próbáltad?
Épp most frissítettem IDE v5.15 és XC8 v2.05-re. De v5.10/v1.45-el is jó volt. Másold be ide a kódrészletet, abból talán kiderül.
Ha azt írtad be amit eSDi írt
Idézet: akkor működnie kell.„void __interrupt TMR0_ISR(void)” Ha viszont az amit a hibaüzenet ír: Idézet: „void low_priority interrupt TMR0_ISR(void)” akkor jó, hogy nem működik. Emlékeim szerint, ha prioritást is akarsz megadni akkor is az interrupt megnevezésnek előre kell mennie. (emlékeim szerint)
XC8 v1.45 és v2.05
Nekem így lefordul:
Meg így is:
A hozzászólás módosítva: Feb 25, 2019
Nem próbáltam, csak emlékezetből írtam. Akkor nem tudom ő mit írt el.
Bemásolom a szükséges részleteket. A lényeg annyi, hogy két helyen használom a TMR0-t, 10ms és 1ms-os beállításban.
PIC16F18456 -ra szeretném a programot megírni.
A fordításkor ezeket a hibaüzeneteket kapom: main.c:21:12: warning: implicit conversion from 'unsigned int' to 'unsigned char' changes value from 55535 to 239 [-Wconstant-conversion] TMR0 = 0xD8EF; // 10ms-os id?z<ED>t<E9>s be<E1>ll<ED>tva. f=100Hz. ~ ^~~~~~ main.c:34:12: warning: implicit conversion from 'unsigned int' to 'unsigned char' changes value from 64535 to 23 [-Wconstant-conversion] TMR0 = 0xFC17; // 1ms-os id?z<ED>t<E9>s be<E1>ll<ED>tva. f=1KHz. ~ ^~~~~~ main.c:54:6: error: variable has incomplete type 'void' void __interrupt TMR0_ISR(void) ^ main.c:54:17: error: expected ';' after top level declarator void __interrupt TMR0_ISR(void) ^ ; 2 warnings and 2 errors generated. A TMR0 beállítása sem okés ezek szerint. A hozzászólás módosítva: Feb 25, 2019
Próbáltam felébreszteni a pic-et uarton keresztül. Az adatlap szerint a BAUDCON,WUE bitjének beállításával egy felfelé futó élre az RX lábon ébreszti a pic-et. De nem ébred. Szimulátorban, működik csak élőben nem.
Kihagyom valamit?
Először is, tudtommal ebben a PICben a T0 az 8 bites, szóval azt a 2 warningot oldd meg, aztán nézd meg mit fordít.
Egyébként a user guide ezt írja:
void __interrupt(low_priority) myLoIsr(void)
Elvileg lehet használni 16bit-ben is.
datasheet 362. oldalon vannak a részletek. De valamit tuti elnézek mint legtöbbször ![]() |
Bejelentkezés
Hirdetés |