Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   1201 / 1210
(#) Bakman válasza KoblogPerGyok hozzászólására (») Jan 9, 2024 /
 
Idézet:
„a T2CONbits.TMR2ON=1; nem vonja maga után a timer resetet is?”
Jogos észrevétel. Részben igen, részben nem. Az elő- és utóosztó számlálót törli.
Idézet:
„sokszor a Timer2 külső oszcillátorról is mehet”
A nyolc bites kategóriában ez viszonylag új dolog, régebbi kontrollerekben fixen Fosc/4 adja az órajelet.
(#) Laja1 válasza KoblogPerGyok hozzászólására (») Jan 9, 2024 /
 
Tulajdonképpen ezt a rögtönzött programot azért írtam, hogy kiderítsem, hogy működik-e a kontroller és a kvarc. A gomb megnyomásakor a LED-nek világítania kellene azonnal és egy idő múlva kialudnia. De ha ez nem is történik meg, csak világít a LED, akkor a kvarc és a kontroller jó. De ez sem működik. (Gondoltam később kijátszom az időzítést, azért volt benne időzítő is, de már az elején ez megfeneklett...)
(#) KoblogPerGyok válasza Laja1 hozzászólására (») Jan 9, 2024 /
 
Igen, de a kódod sem feltétlen jó, amivel tesztelni szeretnéd. Volatile a flag, no meg lehet reseteli a timert a folytonos bekapcsolása. Ha nem tudjuk pontosan mik okozhatják a programban a hibát, akkor törekedni kell a lehető legegyszerűbb, tutira működő programmal tesztelni. Utána hardver birizgálás, ha az a baja, mert akkor a legprimitívebb LED villogásnak is el kell indulnia. De a te kódodban lehet vannak hibaforrások, ezeket mindenképpen ki kell zárni.

Én így szoktam.
A hozzászólás módosítva: Jan 9, 2024
(#) KoblogPerGyok válasza Bakman hozzászólására (») Jan 9, 2024 /
 
Én rögtön dsPIC33FJ128-al kezdtem kényszerből, annak a lelki világát kezdem kiismerni, ezeket a PIC-eket nem vágom, de szerintem hasonlóképp kell nekifogni. 100x programhiba, 1x hardver. Ezt a saját brőmön kellett megtapasztalnom. Mennyi de mennyiszer fordult ez elő velem
(#) Bakman válasza Laja1 hozzászólására (») Jan 9, 2024 /
 
KoblogPerGyok által felvetett, esetleges probléma kikerülésére csupaszítsd le a programot az abszolút minimumra:
  1. while (1)
  2. {
  3.  
  4. PORTDbits.RD4 = !PORTDbits.RD4;
  5. __delay_ms(500);
  6.  
  7. }
(#) KoblogPerGyok válasza Laja1 hozzászólására (») Jan 10, 2024 /
 
Illetve nekem így volt:

  1. //A beépített delay-ek ezek nélkül nem muködnek!!!
  2. #define _XTAL_FREQ 79872000UL
  3. #define FCY (_XTAL_FREQ/2)
  4.  
  5. #include <libpic30.h>
  6. // #pragma config statements should precede project file includes.
  7. // Use project enums instead of #define for ON and OFF.
  8.  
  9. //Függvény prototípusok
  10. void Ora_init();


Az UL kell a_XTAL_FREQ -nél, hogy a fordító/IDE tudja mekkora a szám valójában, ami bőven nagyobb mint a 16 bit. A másik, hogy a delay-eket tartalmazó libpic include-ja mindenképpen a #define _XTAL_FREQ 79872000UL után kell, mert addig a fordító nem tudja, hogy a lib-ben mennyi is ez az érték.

Nekem ilyenek kellettek, de a dspic 16 bites, de szerintem a logikája azonos. Persze, nekem az UL azért volt fontos, mert mint látod azzal számolok is. Szóval lehet nem segít, de nem is árt, meg persze simán tudhatod is, csak gondoltam ide írom, hátha másnak is kell.
(#) benjami válasza KoblogPerGyok hozzászólására (») Jan 10, 2024 / 1
 
Itt egy kis összefoglaló táblázat arról, hogy milyen típuskényszerítési lehetőségek vannak konstans megadásakor. Lehetőség van típus nélkül definiált konstans típuskényszerítésére, ha megszorozzuk egy típusos konstanssal, pl:
  1. #define TIPUSTALAN_SZAM  987
  2. uint32_t szam1 = 1UL * TIPUSTALAN_SZAM;
  3. uint32_t szam2 = (1234567890ULL * TIPUSTALAN_SZAM) / 34567;

A 3. sorban típuskényszerítés nélkül hibás eredmény keletkezne a szorzás túlcsordulása miatt.
(#) Laja1 válasza KoblogPerGyok hozzászólására (») Jan 11, 2024 /
 
Tehát az én esetemben ezeket kellene írni?
#define _XTAL_FREQ 20000000UL
#include <libpic30.h>

Ezt pedig nem:
#define FCY (_XTAL_FREQ/2)
void Ora_init();

És a flag volatile legyen.
Jól értem? Ha igen, akkor ezeket a módosításokat megcsinálom a tényleges programban (nem a próba, lebutított programban) és tesztelem.

Köszönöm!
(#) Bakman válasza Laja1 hozzászólására (») Jan 11, 2024 /
 
Nem, a te esetedben nem. A
  1. #define _XTAL_FREQ 20000000
megfelelő formátum ahhoz a PIC-hez, amit tesztelni próbálsz. Csináld meg azt, amit korábban írtam, az a lehető legegyszerűbb program, a Timer piszkálása biztos, hogy nem kever bele a program működésébe.
(#) david10 hozzászólása Jan 12, 2024 /
 
Sziasztok,
Egy PIC16F18446-os mikrokontrollerből szeretném kiolvasni a belső sorozatszámot (pontosabban a Device Information Area-t).
Számomra a legegyszerűbb megoldásnak a
  1. const uint16_t DIA_MUI0_beolvasott @ 0x8100;
sor tűnt még a program legelején, (ez a gyártó által készített videónak az alapján) azonban erre a main.c:209:21: error: expected ';' after top level declarator hibát írja ki a fordító.
Hogyan lehetne minél egyszerűbben kiolvasni ezt az értéket ami a 0x8100-as címen van?
Előre is köszönöm.
(#) Bakman válasza david10 hozzászólására (») Jan 12, 2024 /
 
A hibaüzenet azt írja, hiányzik a pontosvessző, valószínűleg a mutatott utasítást megelőző sorban.
(#) Hp41C válasza david10 hozzászólására (») Jan 12, 2024 / 1
 
Adatlap: 13.4 fejezet:
NVMCON1bits.NMVREGS =1 ; NVMADR = 0x0100; NVMCON1bits.RD=1;
A kiolvasott érték a NVMDAT regiszterben lesz.
(#) david10 válasza Hp41C hozzászólására (») Jan 13, 2024 /
 
Köszönöm a válaszokat, a Hp41C kódjával működik a regiszterek olvasása.
Bakman: előre én is erre gondoltam, de nekem jónak tűnik ahogyan írtam. Csatoltam egy fényképet a kódról és a hibaüzenetről. Mintha valamilyen szintaktikai hiba lenne a C/C++ nyelv között.

hiba.PNG
    
(#) Laja1 válasza Bakman hozzászólására (») Jan 13, 2024 /
 
Megcsináltam ezt az egyszerűsítést. Mértem a lábon a feszültségváltozást. DE sajnos folyamatosan 0 V-t mérek ezen az RD4-es lábon. Ez azt jelenti, hogy a kvarcot, vagy a kis kondikat túlmelegítettem és tönkrementek?

Veszek újat és újragyártom.
(#) Bakman válasza Laja1 hozzászólására (») Jan 13, 2024 /
 
Erre nem lehet egyértelmű választ adni. Egyrészt maga a PIC kellően bonyolult ahhoz, hogy csak cserével lehessen kizárni a kontroller hibát, másrészt kezdődthet ott is, hogy nem jó a programozód. Sok ismeretlennel rendelkező egyenlet.
(#) KoblogPerGyok válasza Laja1 hozzászólására (») Jan 13, 2024 /
 
Fel tudnál tenni egy közeli fotót, fotókat róla?

Meg kellene vizsgálni, hogy minden kondi, ellenállás a helyén van-e. Minden tápfeszt, vagy egyéb feszt igénylő láb be van-e kötve. Ha minden ok-nak néz ki, akkor még a teljes kódot is feltehetnéd, a sima while-ban lévő LED villogtatással együtt, különös figyelemmel a pragma config-okra. Mekkora LED előtét ellenállás van, milyen a LED stb. No meg a kvarc is.

A helyzet az, hogy nálam a dsPIC heyes felprogramozása, valamint a megfelelő tápok, kondik kibogarászása minimim 3 nap volt. Igaz totál az elejétől kezdtem, no meg a belső PLL-je lett felprogramozva 80MHz-re, ami kicsit más.

De ettől függetlenül már lehet sanszos a hardver hiba is. Nekem elsőre ment minden, de előtte sokat lapoztam az adatlapot arra emlékszem! A hardver hiba nálam a legkevesebbszer fordult elő, még akkor is amikor olyan láb kapott tápot, ami elvileg ki is nyírta volna az egészet, de nem, kibírta.

A másik, hogy a multiméteres mérésekkel nem foglalkoztam miután az IC a helyén (DIP tokban) volt, mert igen könnyen rövidre zárható két láb. Én a DIP tokban a megfelelő helyeken mértem a feszt a GND-khez képest, valamint a többi lábon is, hogy semmiképpen le legyen gond. MINDEN lábon szakadás mérés előtte, csak utána a tápfesz a DIP tokon mérve, ha jó, akkor utána az IC. Utána már semmit sem, vagy a kábel kivezetéseken mértem maximum.

De tegyél lécci fel fotókat és a teljes kódot hátha.... De tényleg elfüstölhettek sajnos.
A hozzászólás módosítva: Jan 13, 2024
(#) Laja1 válasza KoblogPerGyok hozzászólására (») Jan 13, 2024 / 1
 
Találtam egy 32 kHz-es kvarcot és két 22 pF-os kondit és kicseréltem. És jó. Az eredeti program is fut, nemcsak a próbaprogram. Mondjuk még nem tökéletes a hőmérő, mert falsot mér, de majd módosítgatom.
Tehát kinyírtam a kvarcot a sok hővel forrasztásnál.

Köszönöm a segítségeket!!
(#) KoblogPerGyok válasza Laja1 hozzászólására (») Jan 13, 2024 /
 
Ok, akkor a nehezebb út volt, de a lényeg, hogy megy. Ezek szerint nem voltál szerencsés, tényleg hardver hiba lett a vége. Van itthon egy marék kvarcom... Győr környéke, ha érdekel.
(#) Laja1 válasza KoblogPerGyok hozzászólására (») Jan 13, 2024 /
 
De rendes vagy! De Fótról talán nem éri meg.
(#) treshold hozzászólása Jan 21, 2024 /
 
Segítséget kérnék az alábbiakhoz:
PIC18F16Q40-nél nem sikerül a megszakítást megírni Asseblyben.
Ez egy új generációs PIC és nem találok rá még hasonló minta progit sem
MPLAB X IDE V6.15-öt használok.
Feladat:
Alaphelyzetben 13. láb, LATB,4 kimeneten LED1 villog. (EZ MŰKÖDIK)
Ha a 17. láb INT2-re impulzus jön, akkor a 16. láb LATC,0 kimeneten LED2-nek világítania kell (megszakításba ugrás) majd villog tovább LED1.
A megszakításba ugrás nem működik.

  1. ; DATE: 2024.01.21. - UTOLSÓ MÓDOSITAS
  2.  
  3. PROCESSOR 18F16Q40
  4.    
  5. ; CONFIG1
  6.   CONFIG  FEXTOSC = OFF         ; External Oscillator Selection (Oscillator not enabled)
  7.   CONFIG  RSTOSC = HFINTOSC_64MHZ; Reset Oscillator Selection (HFINTOSC with HFFRQ = 64 MHz and CDIV = 1:1)
  8.  
  9. ; CONFIG2
  10.   CONFIG  CLKOUTEN = OFF        ; Clock out Enable bit (CLKOUT function is disabled)
  11.   CONFIG  PR1WAY = ON           ; PRLOCKED One-Way Set Enable bit (PRLOCKED bit can be cleared and set only once)
  12.   CONFIG  CSWEN = ON            ; Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
  13.   CONFIG  FCMEN = ON            ; Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)
  14.   CONFIG  FCMENP = ON           ; Fail-Safe Clock Monitor - Primary XTAL Enable bit (Fail-Safe Clock Monitor enabled; timer will flag FSCMP bit and OSFIF interrupt on EXTOSC failure.)
  15.   CONFIG  FCMENS = ON           ; Fail-Safe Clock Monitor - Secondary XTAL Enable bit (Fail-Safe Clock Monitor enabled; timer will flag FSCMP bit and OSFIF interrupt on SOSC failure.)
  16.  
  17. ; CONFIG3
  18.   CONFIG  MCLRE = EXTMCLR      ; MCLR Enable bit (If LVP = 0, MCLR pin is MCLR; If LVP = 1, RE3 pin function is MCLR )
  19.   CONFIG  PWRTS = PWRT_OFF      ; Power-up timer selection bits (PWRT is disabled)
  20.   CONFIG  MVECEN = OFF          ; Multi-vector enable bit (Interrupt contoller does not use vector table to prioritze interrupts)
  21.   CONFIG  IVT1WAY = ON          ; IVTLOCK bit One-way set enable bit (IVTLOCKED bit can be cleared and set only once)
  22.   CONFIG  LPBOREN = OFF        ; Low Power BOR Enable bit (Low-Power BOR disabled)
  23.   CONFIG  BOREN = SBORDIS       ; Brown-out Reset Enable bits (Brown-out Reset enabled , SBOREN bit is ignored)
  24.  
  25. ; CONFIG4
  26.   CONFIG  BORV = VBOR_1P9       ; Brown-out Reset Voltage Selection bits (Brown-out Reset Voltage (VBOR) set to 1.9V)
  27.   CONFIG  ZCD = OFF             ; ZCD Disable bit (ZCD module is disabled. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON)
  28.   CONFIG  PPS1WAY = ON          ; PPSLOCK bit One-Way Set Enable bit (PPSLOCKED bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle)
  29.   CONFIG  STVREN = ON           ; Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
  30.   CONFIG  LVP = ON              ; Low Voltage Programming Enable bit (Low voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored)
  31.   CONFIG  XINST = OFF           ; Extended Instruction Set Enable bit (Extended Instruction Set and Indexed Addressing Mode disabled)
  32.  
  33. ; CONFIG5
  34.   CONFIG  WDTCPS = WDTCPS_31    ; WDT Period selection bits (Divider ratio 1:65536; software control of WDTPS)
  35.   CONFIG  WDTE = OFF            ; WDT operating mode (WDT Disabled; SWDTEN is ignored)
  36.  
  37. ; CONFIG6
  38.   CONFIG  WDTCWS = WDTCWS_7     ; WDT Window Select bits (window always open (100%); software control; keyed access not required)
  39.   CONFIG  WDTCCS = SC           ; WDT input clock selector (Software Control)
  40.  
  41. ; CONFIG7
  42.   CONFIG  BBSIZE = BBSIZE_512   ; Boot Block Size selection bits (Boot Block size is 512 words)
  43.   CONFIG  BBEN = OFF            ; Boot Block enable bit (Boot block disabled)
  44.   CONFIG  SAFEN = OFF           ; Storage Area Flash enable bit (SAF disabled)
  45.   CONFIG  DEBUG = OFF           ; Background Debugger (Background Debugger disabled)
  46.  
  47. ; CONFIG8
  48.   CONFIG  WRTB = OFF            ; Boot Block Write Protection bit (Boot Block not Write protected)
  49.   CONFIG  WRTC = OFF            ; Configuration Register Write Protection bit (Configuration registers not Write protected)
  50.   CONFIG  WRTD = OFF            ; Data EEPROM Write Protection bit (Data EEPROM not Write protected)
  51.   CONFIG  WRTSAF = OFF          ; SAF Write protection bit (SAF not Write Protected)
  52.   CONFIG  WRTAPP = OFF          ; Application Block write protection bit (Application Block not write protected)
  53.  
  54. ; CONFIG9
  55.   CONFIG  CP = ON               ; PFM and Data EEPROM Code Protection bit (PFM and Data EEPROM code protection enabled)
  56.  
  57.  #include <xc.inc>
  58.  
  59. #define     LED1        LATB,4
  60. #define     LED2        LATC,0   ;HANG
  61.  
  62.  ; Variable settings
  63.  
  64. STATUS_TEMP     EQU             0x000   ; w register for context saving (ACCESS)
  65. WREG_TEMP       EQU             0x001   ; status used for context saving
  66. BSR_TEMP        EQU             0x002   ; bank select used for ISR context saving
  67. FLAG            EQU             0x003   ; Jelz?bit     
  68. FLAG_FLAG       EQU             0x004   ; Jelz?bit
  69.  
  70. Delay1          equ     0x77              ; Define two file registers for the
  71. Delay2          equ     0x78                ; delay loop
  72. Delay3          equ     0x79                ; delay loop
  73. Delay4          equ     0x7A                ; delay loop
  74.  
  75.   PSECT resetVec,class=code,delta=2
  76.   resetVect:
  77.     PAGESEL main
  78.     goto main
  79.    
  80. ;*******[ Magas szint? megszakítás kezel? rutin KEZDETE ]************************************
  81.  
  82.         ORG     0X0008
  83.         goto    ISR_H
  84.  
  85. ;*******[ Alacsony szint? megszakítás kezel? r11utin KEZDETE ]************************************
  86.  
  87.         ORG     0X0018
  88.         goto    ISR_L
  89.        
  90. ;*******[ A tényleges alacsony szint? megszakítás rutin ]***************************************
  91. ISR_L:
  92.     ; Context Saving for Low ISR
  93.         movff   STATUS,STATUS_TEMP      ;save STATUS register
  94.         movff   WREG,WREG_TEMP          ;save working register
  95.         movff   BSR,BSR_TEMP            ;save BSR register
  96.        
  97.         bsf     LATC,0
  98.         bcf     PIR10,0         ;INT2 FLAG törlés
  99.        
  100.                 movff   BSR_TEMP,BSR            ;restore BSR register
  101.         movff   WREG_TEMP,WREG          ;restore working register
  102.         movff   STATUS_TEMP,STATUS      ;restore STATUS register
  103.     RETFIE
  104.    
  105.    
  106.     ;*******[ A tényleges magas szint? megszakítás rutin ]***************************************
  107.    
  108.  
  109. ISR_H:
  110.     ; Context Saving for High ISR
  111.         movff   STATUS,STATUS_TEMP      ;save STATUS register
  112.         movff   WREG,WREG_TEMP          ;save working register
  113.         movff   BSR,BSR_TEMP            ;save BSR register
  114.        
  115.         bsf     LATC,0
  116.         bcf     PIR10,0         ;INT2 FLAG törlés
  117.        
  118.         movff   BSR_TEMP,BSR            ;restore BSR register
  119.         movff   WREG_TEMP,WREG          ;restore working register
  120.         movff   STATUS_TEMP,STATUS      ;restore STATUS register
  121.     RETFIE
  122.    
  123.  PSECT code
  124.  main:
  125.    
  126.    Oscillator_settings:
  127. ;    movlw   01100000B;// NDIV 1; NOSC HFINTOSC;
  128.  ;   movwf   OSCCON1
  129.  
  130.     movlw   0x0;// SOSCPWR Low power; CSWHOLD may proceed;
  131.     movwf   OSCCON3
  132.    
  133.     movlw   0x0;// EXTOEN disabled; HFOEN disabled; MFOEN disabled; LFOEN disabled; SOSCEN disabled; ADOEN disabled;
  134.     movwf   OSCEN
  135.    
  136.     movlw   00000110B; // HFFRQ 32_MHz xxxx0110;
  137.     movwf   OSCFRQ
  138.    
  139.     movlw   0x0;// TUN undefined;
  140.     movwf   OSCTUNE
  141.    
  142.     movlw   0x0;// ACTEN disabled; ACTUD enabled;
  143.     movwf   ACTCON
  144.    
  145. BANKSEL PORTB ;
  146. CLRF PORTA ;Clear PORTB
  147. CLRF PORTB ;Clear PORTB
  148. CLRF PORTC ;Clear PORTC
  149.    
  150. BANKSEL LATB ;
  151. CLRF LATA ;Clear Data Latch
  152. CLRF LATB ;Clear Data Latch
  153. CLRF LATC ;Clear Data Latch
  154.    
  155. BANKSEL ANSELB ;
  156. CLRF ANSELA ;Enable digital drivers
  157. CLRF ANSELB ;Enable digital drivers
  158. CLRF ANSELC ;Enable digital drivers
  159.    
  160. BANKSEL TRISB ;
  161. movlw   00000100B   ;Ra2 BE
  162. movwf   TRISA
  163. movlw   00100000B   ;RB4 Ki, RB5 be
  164. movwf   TRISB
  165. CLRF    TRISC        ;RC0 ki, RC7 ki
  166.    
  167. movlw   11100000B   ;Megszakítás, INT2 megszakítás lefutó élre
  168. movwf   INTCON0
  169.    
  170. movlw   00000001B   ;(INT2IF) External Interrupt 2 Interrupt Priority
  171. movwf   IPR10
  172.    
  173. movlw   00000001B   ;(INT2IE) External Interrupt 2 Interrupt Enable
  174. movwf   PIE10
  175.    
  176. movlw   11000000B   ;
  177. movwf   INTCON1
  178.  
  179. MainLoop:
  180. bsf         LATB,4             ; turn on LED1
  181. call    SUBRUTIN
  182. bcf         LATB,4             ; Turn off LED1
  183. call    SUBRUTIN
  184. bra          MainLoop            ; Do it again...
  185.  
  186. SUBRUTIN:
  187. OndelayLoop:
  188.      decfsz    Delay1, f            ; Waste time.  
  189.      goto      OndelayLoop         ;
  190.      decfsz    Delay2, f            ;
  191.      goto      OndelayLoop         ;
  192.      decfsz    Delay3,F            ;
  193.      goto      OndelayLoop  
  194.      decfsz    Delay4,F            ;
  195.      goto      OndelayLoop
  196.      return                        ;
  197.                    
  198.      END resetVect;reset_vec
A hozzászólás módosítva: Jan 23, 2024
Moderátor által szerkesztve
(#) KoblogPerGyok válasza treshold hozzászólására (») Jan 22, 2024 /
 
Szia!

Rég volt, hogy ilyet írtam, megkérdeztem az agyat, hátha:

  1. ; PIC18F16Q40 INT2 megszakítás kezelése
  2.  
  3. ; Az INT2 megszakítási vektor címe: 0x000C
  4. ; A vektori tábla elejének címe: 0x0000
  5.  
  6.     ORG 0x000C           ; Az INT2 megszakítási vektor címe
  7.     GOTO MyInt2Handler   ; Ugrás a kezelő rutinba
  8.  
  9. MyInt2Handler:
  10.     ; Ide írd be az INT2 megszakítás kezelő kódját
  11.     ; Például:
  12.     BSF STATUS, RP0      ; Bank 1 kiválasztása
  13.     BCF INTCON3, INT2IF  ; INT2 megszakítás flag törlése
  14.     BCF STATUS, RP0      ; Vissza a Bank 0-ba
  15.     ; További kód az INT2 megszakítás kezeléséhez
  16.  
  17.     RETFIE               ; Megszakításból való visszatérés


A megszakításaid címe jó? Nem kell a bank select? Hátha nem törli a flag-et.

Datasheet

A datasheet 116. oldalán az int0 0x08-on van, a tiéd, ami a programodban van ORG 0X0018
goto ISR_L az nem a SPI1RX (Serial Peripheral Interface) -nek van?

De álmos is vagyok, meg nem is tudtam nagyon átnézni, de hátha.
A hozzászólás módosítva: Jan 22, 2024
(#) treshold válasza KoblogPerGyok hozzászólására (») Jan 23, 2024 / 1
 
"Az INT2 megszakítási vektor címe: 0x000C"
Nem 0x50? 116. oldal
(#) Hp41C válasza treshold hozzászólására (») Jan 23, 2024 /
 
Szia!

A konfigurációban az MVECEN bittel kikapcsolod a vektoros megszakítási módot.

Az adatlap szerint ekkor a megszakítás az alábbi módon működik:
Idézet:
„11.3.3 Interrupt Vector Table Address Calculation
MVECEN = 0
When the MVECEN Configuration bit is cleared, the address pointed to by IVTBASE is used as the high-priority interrupt vector address. The low-priority interrupt vector address is offset eight instruction words from the address in IVTBASE.”

A programod nem állítja be az IVTBASE regisztereket.
Azok indulási értéke valószínűleg 0, így a megszakítás helyett újraindulás történik.
(#) treshold válasza Hp41C hozzászólására (») Feb 9, 2024 /
 
Ha jól értem, MVECEN = OFF akkor a megszakítás nem vektoros, hanem úgy működik, mint a PIC18F14K22-nél, hogy van egy alacsony és egy magas szintű megszakítás? Nekem ez kellene.
(#) treshold válasza Hp41C hozzászólására (») Feb 9, 2024 /
 
"For PIC18 devices, IVTBASE defaults to 000008h, hence the high-priority interrupt vector address will
be 000008h and the low-priority interrupt vector address will be 000018h."

Illetve a két címet kell használnom?
A hozzászólás módosítva: Feb 9, 2024
(#) Hp41C válasza treshold hozzászólására (») Feb 10, 2024 /
 
Idézet:
„For PIC18 devices, IVTBASE defaults to 000008h, hence the high-priority interrupt vector address will be 000008h and the low-priority interrupt vector address will be 000018h."”

elkerülte a figyelmemet. Bocsánat.
A következőt ajánlom figyelmedbe: TB3162 "Backward Compatibility"
Érdekes dolgokat ír az adatlap 11. fejezete a regiszter mentésekről.
(#) treshold válasza Hp41C hozzászólására (») Feb 11, 2024 /
 
INT2 flag-et a programba beállítva sikerült megszakításba ugrasztani. LED2 (LATC,0) világított.
Debug simualtoron is rendesen fut.

Közben kiderült, hogy míg a PIC18F14K22 INT2 a 17-es, adíg a PIC18F16Q40-é a 14. lábon van.

Viszont ahogy nézem IOC - Interrupt-on-Change segítségével a 17-es lábra tudom vinni a megszakítást (PCB adott és fontos, hogy ne kelljen módosítani), csak akkor már nem INT2 lesz a leánykori neve ?
A hozzászólás módosítva: Feb 11, 2024
(#) Bakman válasza treshold hozzászólására (») Feb 11, 2024 /
 
PIC18F16Q40 esetén a PPS segítségével arra a lábra állítod, amelyikre akarod.

Interrupt-on-change bármelyik lábra beállítható, ahhoz nem tartozik PPS regiszter, csak a megfelelő bitet kell 1-re állítani az IOCxN (lefutó) és/vagy IOCxP (felfutó) regiszterben. Ha csak az egyik változás kell, akkor érdemesebb ezt használni, mert az Interrupt 0, 1 vagy 2 mindkét élre reagál.
(#) djadji hozzászólása Feb 23, 2024 /
 
Sziasztok!
Mindig gondot okoz, hogy hogyan tudok egy PIC vezérelte kis villánymotorral meghajtani/megmozgatni valamit. Egy játékautót, porszívó kereket, ablaknyitót, redőny felhúzót, függöny-húzót, szellőző nyílást stb. Ezt hogyan szoktátok megoldani, lehetőleg költséghatékonyan? Fogaskerék, ékszíj, fogasszíj? És honnan lehet beszerezni ilyen kis méretű fogaskereket, egyebeket?
Kerékpár láncra gondoltam, de az nagyon nagy ilyesmire. Van erre valami bevált megoldás? Vagy mindenki maga "gányol" össze valamit?
(#) kaqkk válasza djadji hozzászólására (») Feb 23, 2024 /
 
Itt nézz körül
A hozzászólás módosítva: Feb 23, 2024
Következő: »»   1201 / 1210
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem