Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Szereztem egy PICKIT3-at de még mindíg nem ok.
Elindítottam PICKIT3 szoftvert, tápfesz programozóról kapja, bekapcsolva a PIC MPLAB: Debugger / Select tool / PICKit3 kiválasztva A következő jelenik meg: No PICkit 3 Connected. Másik verzió: PICKIT3 szoftvert nem indítottam el, eszköz nincs csatlakoztatva. MPLAB: Debugger / Select tool / PICKit3 kiválasztva A következő jelenik meg: No PICkit 3 Connected. Ekkor csatlakoztatom a programozót a PCB-vel, majd a következő fut tovább: PICkit 3 detected Connecting to PICkit 3... Running self test... Self test completed Firmware Suite Version...... 01.26.65 Firmware type......................dsPIC33F/24F/24H PICkit 3 Connected. PK3Err0045: You must connect to a target device to use PICkit 3.
Na most nem indítottam PICKIT2 szoftvert, hanem külső tápról jhajtom és ezt kaptam:
PICkit 3 detected Connecting to PICkit 3... Firmware Suite Version...... 01.26.65 Firmware type......................dsPIC33F/24F/24H PICkit 3 Connected. PK3Err0045: You must connect to a target device to use PICkit 3. Target Detected Device ID Revision = 0000300a Talán most kezdődhet a buli ![]()
Valaki nem tud véletlen egy nagyon egyszerű, működő egységnyi erősítésű műveleti er. kapcsolást arra hogy a PIC A/D bemenetén lehessen egy nem közösmódú jelet érzékelni?
Köszi!
Ez itt elég erősen off.
Van műveleti erősítős topik is a fórumon, ott jobb helye lett volna. A nem közös módusú jel az differenciális módusú, remélem Te is erre gondolsz. Tipikus megoldás a különbségképző műveleti erősítős alapkapcsolás (differencia erősítő). Kivonó áramkör
Úgy néz ki, hogy összeállt a kapcsolat.
Most hogy tudnám kiolvasni az adatmemóriába írt adatokat? VieW/file regiszterben látom a változókat, de mindegyik után RRRR áll. Elvileg "írtam" az adatmemóriába de nem látom. Hogy tudnám kiolvasni az adatmemóriába írt adatokat?
Szia!
De a movwf CCP3CON,ACCESS vagy a movf CCPPR2L,w,ACCESS már nem fog menni a 18F26K80 -on, mert nem az ACCESS ram területen vannak... Ha valaki ezeket kezelte előbb, értele lehet a banksel -nek.
Az általad linkelt adatlap nem jó a PIC18F26K80-hoz! Ahhoz ez való: Bővebben: Link
Beállítottam a debug-oláshoz szükséges kommunikációs csatornát
Mivel PGEC1/PGED1 csatornán programozok ezért config __ICS_PGD1 ; communicate on PGC1/EMUC1 and PGD1/EMUD1 Még mindíg nem OK
Watch ablak? Igaz itt a változóidat látod, ami az adatmemóban van...
Nézz körül a microchip műveleti erősítőinek adatlapjaiban.
Igazad van, én voltam a hülye. A végén nem vettem észre, hogy 80 szerepel, nem 20
![]() Ez alapján a beállításaid jónak tűnnek. Én megpróbálnám esetleg egy másik verziójú MPLAB-ban szimulálni, vagy kiszámolni egy olyan "utóosztást" a megszakításra, hogy egyik lábat másodpercenként billentse át. Így megtudod, hogy a szimulátor jó vagy sem.
Próbáld azt a debug módot törölni a config-ban, ha netán be van állítva most, majd az MPLAB beállítja ha kell neki! Nekem bajt okozott a működésben, mikor engedélyeztem, igaz az egy 18F-en volt!
Megvan! A szimulátor volt a hibás. Debuggolva pörög a számláló a Watch ablakban rendesen. Mondjuk így nem engedi átírni manuálisan a TMR1 értékét, de a CCPR3-ét igen. Ha megállítom a program futását és a CCPR3-ba azt a számot írom ami épp a TMR1-ben van, majd léptetek egyet akkor a TMR1 nullázódik. Szóval idáig rendben van, viszont megszakítás nem történik!
Ezeket állítottam be:
Próbálj egyel nagyobb értéket írni a CCPR3-ba.
Megtettem, 1-el nagyobb számot írtam a CCPR3-ba mint ami a TMR1-ben volt, majd tovább léptettem. A TMR1 a léptetés után nulla lett majd 2, 4 stb... (A goto$ ciklusban ugye.)
De megszakítás nem történt.
Viszont egyszer történik megszakítás! Lefordítom a programot, beégetem, majd elindítom és egyszer belép a megszakításba CCP3IF miatt, majd lekezeli a megszakítást és kilép. Utána viszont soha többé nem lép bele a megszakításba.
Megvan! ![]() Ez aztán az érdekes! A megszakítás így néz ki:
A hiba pedig a következő volt; hogy töröltem a PIE4 regiszter CCP3IF bitjét. Ugyanis ilyen nem létezik! A CCP3IF bit nem a PIE4-ben, hanem a PIR4-ben van (rosszul írtam). A fordító bezzeg nem sírt hogy nincs ilyen, hanem helyette amikor és ezt írtam:
Akkor valójában ő ezt csinálta:
Tehát nem a flagbitet hanem az engedélyezés bitet törölte a bolond. ![]()
Ez ilyen sajnos, nekünk kell figyelni erre!
Érdemes deffiniálni saját neveket, mert akkor csak egy helyen kell odafigyelni!
Kedves fórum társak! Az alábbiakban kérnék srgítséget: A mellékelt forráskód PIC16F88-ra lett írva. A kérdésem az lenne, hogy változtatás nélkül PIC16F628-ba betöltve működne-e? Ha nem, mit kellene átírni benne? Hogy mit is szeretnék megépíteni a következő linken látható. Bővebben: Link
Idézet: „A hiba pedig a következő volt; hogy töröltem a PIE4 regiszter CCP3IF bitjét. Ugyanis ilyen nem létezik! A CCP3IF bit nem a PIE4-ben, hanem a PIR4-ben van (rosszul írtam). A fordító bezzeg nem sírt hogy nincs ilyen” A fordito errol nem tehet! A fordito nem lat neveket, csak szamokat, ugyanis ezek #define ill EQU -kent vannak letarolva es ezeket az elofordito (preprocessor) atalakitja szamokka. A forditonak tehat nincs lehetosege ilyen tipusu hibak felderitesere, igy ne azt okold. Nem tudom PIC ASM-hez letezik-e mar ilyen megoldas, de lint vagy plint -tel elmeletileg ki lehetne derinteni ilyen jellegu hibakat. Korul kellene nezni hatha a gnupic-esek csinaltak mar ilyet. Idézet: Termeszetesen nem. Mivel a ket PIC kozott igen sok kulonbseg van, ezert az inicializalo reszeket ertelem szerint at kell irni a F628 periferiaihoz. „A kérdésem az lenne, hogy változtatás nélkül PIC16F628-ba betöltve működne-e?”
Ez nézőpont kérdése. Én tudnék olyan fordítót írni, ami felismeri ezeket az összefüggéseket. Persze eszembe se jutna nekiállni!
![]()
Persze, hogy lehet ilyet irni -- es vannak is ilyenek, C-ben pl ha bitfieldet hasznalsz, azt sem tudod mas portra vagy regiszterre emelni
![]()
A programozas elso szamu torvenye:
A program UTASITASAID es nem kivansagaid szerint mukodik. Ha nem jot irtal, ne a forditot okold. Ha harom felest kertel, de kettot akartal mondani, nem a csapos a hulye, ha harmat ad. ![]() Idézet: „Ha harom felest kertel, de kettot akartal mondani, nem a csapos a hulye, ha harmat ad.” Ez pontosan igy van! Ambar ha kettot kersz es harmat akartal mondani akkor a csapos nagyon hulye tud lenni -- foleg ugy hajnal 3 korul ![]()
Nem, most az történt hogy kértem három felest és a pultos meg nem szólt hogy igazából ez egy virágbolt. Inkább adott három szál rózsát.
Én is hibáztam, de a fordító is szólhatott volna hogy valami nem stimmel, de ne csinálja már azt hogy ha olyan nincs akkor helyette random megváltoztat valami más bitet. ![]()
De nem random es nem is valtoztatott meg semmit sem. Ha mar analogianal tartunk, ahogy a fordito mukodik:
Bemegy a Tescoba, es mirelit hasab burgonyat akarsz venni. Annyit tudsz, hogy MIRELIT, HASAB; Namost, ezt a fordito nem tudja ertelmezni, ezert az elofordito szepen lecsereli a neveket szamokra: MIRELIT EQU 15; HASAB EQU 6; Tehat a fordito azt latja, hogy neked a 15-os folyosorol kell a 6-os polc. Namost, ha te azt irod, hogy MIRELIT, HAJFESTEK; akkor az elofordito azt mondja, hogy 15, es a HAJFESTEK EQU 8 miatt azt, hogy 8... A fordito meg boldog, hogy te a 15-os folyosobol a 8-adik pocra vagy kivancsi. Az ot nem edekli, hogy ott sem nem a hajfestek, sem pedig a hasab burgonya nincsen, az majd neked lesz a bajod ![]()
Igazából a fordító számára CCP3IF is egy szám, meg a CCP3IE is egy szám. Sőt a PIR4, és a PIE4 is csak egy szám.
Abban a .h fileban van meghatározva hogy melyik névhez milyen szám tartozik, aminek a neve egyezik a pic típusával. Próbáld ki BCF PIR4, CCP3IF helyett: BCF 0x0FB7, 0 Elvileg mennie kell, ha nem néztem el a címeket ![]()
Ja... én azt gondoltam hogy a regiszter nevét és a bit nevét egyként kezeli.
|
Bejelentkezés
Hirdetés |