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   1049 / 1203
(#) sonajkniz válasza don_peter hozzászólására (») Okt 11, 2018 /
 
Ha az üresjárati (terheletlen) eredő feszültségre vagy kíváncsi, egyszerűbb, ha kiszámolod.
Elég pontos adatot fogsz kapni.
Ha pedig a kimeneten van pufferkondi és terhelés is, akkor timer2 flag bitjének bebillenésekor kezdj el mérni, folyamatosan az újabb bebillenésig. Közben egy számlálóval számold, hányszor mértél. Majd add össze a mérési adatokat, (bár ezt közben is teheted, így nem kell annyi ramot használni) majd oszd el a mérések számával.
(#) don_peter válasza sonajkniz hozzászólására (») Okt 11, 2018 /
 
Terheltre és terheletlenre is kíváncsi vagyok. Ellenállást mérek vele.
Kipróbálom a két bebillenés közti mérést.
Közben agyaltam és bár lehet rosszul gondolom, de a két bebillenés közt nem csak 1ms idő telik el?
1KHz-es PWM jelnél 1mp alatt 1000 jel érkezik?
Nem lenne kevés a minta?
A hozzászólás módosítva: Okt 11, 2018
(#) MrBrown hozzászólása Okt 11, 2018 /
 
Sziasztok,
16F1826-al kapcsolatban volna néhány kérdésem mert nem vagyok túl gyakorlott az adatlap olvasásban.
Első kérdés hogy ha LIR2450-el táplálom ami feltöltve 3,6V akkor nem muszály az L-es verziót választanom hiszen a "sima" is működik 1,8-5,5V-ig?
Második kérdés hogy ha jól olvasom a külső kvarc az RA6 - RA7 lábak közé megy viszont ha én egy hét szegmenses kijelzőt akarok vele közvetlenül hajtani akkor az A-G szegmensek mehetnek az RA2, RA3, RA4, RB0, RB1, RB2, RB3 azonos oldalon lévő lábakról vagy az RB0 nem lehet vezérlő láb?
Harmadik kérdés hogy az RA5/MCLR lábat muszály-e felhúynom külső ellenállással Vdd-re vagy ha nem használom RESET-re akkor lóghat üresen?
köszönöm.
(#) usane válasza MrBrown hozzászólására (») Okt 11, 2018 /
 
1. Igen, de 2,5V alatt max. 16MHz-en megy.
2. Igen, RA6-7 a kvarc, de mi bajod az RB0-val, nem látok rajta problémás perifériát?
3. Semmi sem kötelező, de ha ki is van kapcsolva az MCLR a lógó láb akkor is összeszedhet valami zavart ami okozhat véletlen resetet. Ajánlott felhúzni. Ha nem akarsz külső ellenállást, az adatlap szerint az RA5-ön is van WEAK PULL-UP, azaz belső felhúzó, használd azt.
A hozzászólás módosítva: Okt 11, 2018
(#) MrBrown válasza usane hozzászólására (») Okt 11, 2018 /
 
Köszönöm a válaszokat!
Jól értelmezem program szinten teljesen inaktívvá lehet tenni az RA5-öt vagy nem lehet de a weak pull-up-ot külön be kell kapcsolni rajta? Azt hittem az egy fizikailag beleintegrált felhúzó ellenállás?
(#) Hp41C válasza MrBrown hozzászólására (») Okt 11, 2018 /
 
A MCLR funkciót le lehet tiltani, de a programozási módba belépés funkcióját nem.
(#) sonajkniz válasza don_peter hozzászólására (») Okt 11, 2018 /
 
Attól függ, mekkora órajelen megy a proci.
Ha legalább 8 MHz-n akkor az analóg bemérés a keretfunkciókkal együtt is le futhat 10usec alatt.
Az pedig 100 mintavételezés. Annyi már csak elég.
(#) don_peter válasza sonajkniz hozzászólására (») Okt 12, 2018 /
 
Bocs, ezt elfelejtettem megemlíteni. 1MHz-en jár a PIC.
(#) usane válasza MrBrown hozzászólására (») Okt 12, 2018 /
 
Mit értesz azon, hogy teljesen inaktívvá tenni?
Ahogy Hp41C fórumtárs írta a MCLR funkció letiltható, ekkor a láb digitális bemenetként működik és csak bemenetként, vagy ha más periféria osztozik a lábon akkor az,de jelen esetben csak a SS1 funkció van rajta ami nem zavar mert alapból ki van kapcsolva. A felhúzó ellenállás integrált, de nem megy állandóan, szoftverből ki és bekapcsolható.
(#) sonajkniz válasza don_peter hozzászólására (») Okt 12, 2018 /
 
Így valóban kevés.
Van valami gyakorlati oka annak, hogy ilyen alacsony az órajel?
(#) sonajkniz válasza usane hozzászólására (») Okt 12, 2018 /
 
Csak óvatosan vitatkozom, mert a 16-os szériát nem ismerem.
De a 18-asnál, ha az MCLR-t letiltom, automatikusan bekapcsolódik a felhúzó ellenállás, viszont nem válik teljesen inaktívvá a reset funkció.
Zavar-gazdag környezetben sűrűn resetel.
Én ezt úgy szoktam kiküszöbölni, hogy a panelba beültetek egy jumpert, és miután befejeztem a programozást, rátolom a rövidzárat.
Ezzel az MCLR lábat GND-re húzom. Így már nem következik be reset.
(#) don_peter válasza sonajkniz hozzászólására (») Okt 12, 2018 /
 
Igazából nincs, lehetne magasabb órajelen is járatni.
Amúgy a timer2 megszakítást vehetem úgy, hogy mint ha mindig a felfutó élre történik a kiszolgálás?
(#) sonajkniz válasza don_peter hozzászólására (») Okt 12, 2018 / 1
 
Ha a CCP1CON úgy van beállítva, hogy aktív magas, akkor igen.
(#) MrBrown válasza usane hozzászólására (») Okt 12, 2018 /
 
Így már értem, köszönöm.
Valójában az a tervem hogy mivel használat közben sosem szeretném használni a reset funkciót szoftverből felhúzom a lábat és fizikailag levágom így értékes helyet nyerek egy vezetősávnak a nyákon plusz ugye megspórolok egy smd ellenállást is ami megint csak plusz helyet foglalna.
(#) don_peter válasza sonajkniz hozzászólására (») Okt 12, 2018 /
 
  1. CCP1CON  = 0x0C;

Idézet:
1100 = PWM mode; P1A, P1C active-high; P1B, P1D active-high
1101 = PWM mode; P1A, P1C active-high; P1B, P1D active-low
1110 = PWM mode; P1A, P1C active-low; P1B, P1D active-high
1111 = PWM mode; P1A, P1C active-low; P1B, P1D active-low”

Ezekből az aláhúzott van beállítva.
(#) sonajkniz válasza don_peter hozzászólására (») Okt 12, 2018 /
 
Ebben a beállításban, ha utóosztó nincs állítva, akkor a flag bit bebillenését követő órajelnél vált magasra a kimenet.
Ha van utóosztó, akkor timer2 lejáratát követő újrainduláskor (pontosabban PR2-ben beállított érték elérése utáni órajelnél) vált magasra a kimenet.
(#) don_peter válasza sonajkniz hozzászólására (») Okt 12, 2018 /
 
Húúú teljes most már a képzavar.
Pontokba szedve újra, mert már elvesztem.
Tehát az interrupt kiszolgáló:
  1. if(TMR2IF && TMR2IE){
  2.                 unsigned char i = 0;
  3.                 Count++;
  4.                 if(Count>100){
  5.                         ADC     = 0;
  6.                         for(i=0; i<100; i++) ADC += read_ADC(3);
  7.                         ADC             = ADC/100;
  8.                         Count   = 0;
  9.                         LED2 = !LED2;
  10.                 }
  11.                 TMR2IF = 0;
  12.         }

PIC 1MHz-es órajel beállítása:
  1. OSCCON  = 0b01000001;           // 1MHz-es belső órajel beállítva

Timer2 és ADC beállítása:
  1. // 1KHz
  2.         PR2     = 0b11111001;           // 249
  3.         T2CON   = 0b01001000;           // Alap esetben kikapcsolva, 10-es utóosztó a megszakításnak
  4.         TMR2IE  = 0;
  5.  
  6.         ADCON0  = 0b10001100;           // Right justified, VDD Ref, A3 chanel, A/D enabled
  7.         ADCON1  = 0x00;                         // FOSC/2
  8.         ADON    = 1;                            // AD enabled

Timer2 PWM indítása:
  1. TMR2IE  = 1;   
  2.                 TMR2ON  = 1;
  3.                 CCP1CON = 0x0C;
  4.                 PWMDuty(25);    // %-os érték

Ebből hogy tudnám megoldani, hogy kitöltés változtatása mellett tudjam mérni a helyes feszültséget? 10-től 50%-ig kellene a kiköltést változtatnom, így ebben a tartományban kellene a méréseket is jól végeznem.
(#) sonajkniz válasza don_peter hozzászólására (») Okt 12, 2018 /
 
Idézet:
„T2CON = 0b01001000; // Alap esetben kikapcsolva, 10-es utóosztó a megszakításnak”

Mi célt szolgál a megszakítás? Mert így a flag bit csak minden 10. PWM ciklus végén billen be.
Azaz a flag-tól flag-ig mérés így feleslegesen sok adatot szül.
Ráadásul az, hogy a kitöltést csak 50%-ig viszed fel, nem jelenti azt, hogy csak eddig kell mérni. A mérést a teljes impulzus hosszon kell végezni, minél többször.
(#) don_peter válasza sonajkniz hozzászólására (») Okt 12, 2018 /
 
Tudnál nekem segíteni, hogy miképpen állítsam be és hogy mérjem?
(a mi célt szolgál a megszakítás kérdésre Nem akarom folyamatosan mérni az ADC-t, elég lenne mondjuk minden másodpercbe vagy minden 5. másodpercbe megmérni a +-12v-ot.
Egy példát tudsz írni nekem, hogy oldjam meg a megfelelő mintavételezést, ami megszakításban mérne? A lényeg, hogy jól mérjen az eszköz.
A hozzászólás módosítva: Okt 12, 2018
(#) sonajkniz válasza don_peter hozzászólására (») Okt 12, 2018 /
 
PIC 18-ra assemblyben megírt példaprogramot át tudsz írni?
Ugyanis PIC 16-ost még sosem programoztam, C-ben meg pláne nem.
(#) don_peter válasza sonajkniz hozzászólására (») Okt 12, 2018 /
 
Szerintem meg tudom oldani, némileg már elkezdtem tanulmányozni az assembly-t, illetve van itt mellettem valaki aki érti is.
Megköszönöm a példát.
A hozzászólás módosítva: Okt 12, 2018
(#) sonajkniz válasza don_peter hozzászólására (») Okt 12, 2018 /
 
Rendben. Délután összedobom, de folytassuk privátban.
(#) don_peter válasza sonajkniz hozzászólására (») Okt 12, 2018 /
 
Rendben, előre is köszi a türelmed.
(#) lóri válasza sonajkniz hozzászólására (») Okt 12, 2018 /
 
Kár, hogy privátban, szeretem olvasni a fejleményeket, abból is tanul az ember.
(#) usane válasza sonajkniz hozzászólására (») Okt 12, 2018 /
 
A 18-asokat meg én nem vágom fejből, de ezt sem fejből néztem, az adatlap szerint ha MCLR engedélyezve van akkor automatikusan be van kapcsolva, egyébként a felhasználó által kontrollálva.
A zavarral kapcsolatban egyetrtek, azért is javasoltam neki, hogy lógni semmiképp ne lógjon. Felhúzva nálam még nem resetelt PIC, de lehet, hogy te zavartelibb környezetben használtad.
(#) usane válasza MrBrown hozzászólására (») Okt 12, 2018 /
 
Azért egy SMD ellenállás nem szekrény méretű, és azt hozzá kell tenni, hogy sokkal megbízhatóbb mint a belső felhúzók. Azok szoktak kiszámíthatatlanul viselkedni.
(#) sonajkniz válasza don_peter hozzászólására (») Okt 12, 2018 / 2
 
Elkészültem a programmal.
Tesztelve nincs, de kikommenteltem, így a lényeget látni fogod.
  1. LIST    P=PIC18F14K22   ; lista megadása
  2.     INCLUDE <P18F14K22.INC>     ; includde fájlok megadása
  3.     RADIX   hex                 ; alapértelmezet számrendszer megadása
  4.  
  5.     CONFIG  FOSC = IRC          ; bels? oszcillátor
  6.     CONFIG  WDTEN = OFF         ; watchdog kikapcsolása
  7.     CONFIG  LVP = OFF           ; alacsony feszültség? programozás kikapcsolva
  8.    
  9.     CBLOCK  0x0001
  10.     IDO :3,OSZTANDO :3,OSZTO :3,MARADEK :3,MERESEK :3,EREDMENY :3,SZAMLALO
  11.     CIKLUS
  12.     ENDC
  13.    
  14. ERTEKADAS   MACRO VALTOZO,ERTEK
  15.     MOVLW   LOW ERTEK
  16.     MOVWF   VALTOZO
  17.     MOVLW   HIGH ERTEK
  18.     MOVWF   VALTOZO+1
  19.     MOVLW   UPPER ERTEK
  20.     MOVWF   VALTOZO+2  
  21.     ENDM
  22. COPY    MACRO   MIT,HOVA
  23.     MOVFF   MIT,HOVA      
  24.     MOVFF   MIT+1,HOVA+1
  25.     MOVFF   MIT+2,HOVA +2
  26.     ENDM
  27. TORLES  MACRO   MIT
  28.     CLRF    MIT
  29.     CLRF    MIT+1
  30.     CLRF    MIT+2
  31.     ENDM    
  32.    
  33.         org             0x0000                   ;Program memória kezdö címe
  34.         nop                                              ;ICD miatt
  35.     GOTO    INICIALIZALAS
  36.     nop
  37.         org             0x0008
  38.     nop
  39.     GOTO    MEGSZAKITAS
  40.     nop
  41.    
  42.         org             0x0028    
  43.     NOP      
  44.  
  45. INICIALIZALAS
  46.     CLRF    LATA                ; kimeneti portok törlése
  47.     CLRF    LATB                ;
  48.     CLRF    LATC                ;
  49.     CLRF    ANSEL
  50.     CLRF    ANSELH
  51.     BSF     ANSELH,2
  52.     MOVLW   B'00101001'         ;Analóg csatorna beállítása
  53.     MOVWF   ADCON0
  54.     CLRF    ADCON1
  55.     BSF     ADCON2,7            ;Analóg felbontás 10 bit
  56.     MOVLW   B'00001111'         ; A port
  57.     MOVWF   TRISA
  58.     MOVLW   B'00001111'
  59.     MOVWF   WPUA  
  60.     MOVLW   B'00010000'         ; B port (RB4 analóg bemenet)
  61.     MOVWF   TRISB
  62.     MOVLW   B'00000000'         ; C port
  63.     MOVWF   TRISC
  64.     MOVLW   B'01010010'         ; oszcillátor frekvenciája 4MHz
  65.     MOVWF   OSCCON
  66.     ;-------------------------;Megszakítás beállítása---------------------------                                        
  67.     MOVLW   B'11000000'         ; megszakítás bekapcsolása
  68.     MOVWF   INTCON     
  69.     MOVLW   D'249'                      ; TMR2 impulzus szélesség
  70.     MOVWF   PR2
  71.     BSF     PIE1,TMR2IE         ; TMR2 megszakítás engedélyezés
  72.     MOVLW   D'125'              ; Kitöltés 50%
  73.     MOVWF   CCPR1L
  74.     MOVLW   B'00000101'         ;TMR2 engedélyezése 4-es előosztóval
  75.     MOVWF   T2CON               ;PWM frekvenciája 1KHz
  76.     MOVLW   B'00001100'
  77.     MOVWF   CCP1CON
  78.     BSF     PSTRCON,STRD    
  79. ;-------------------------------------------------------------------------------
  80.     ERTEKADAS   IDO,D'5000' ;5 másodperces időzítő beállítása
  81.     TORLES      MERESEK
  82.     CLRF    SZAMLALO
  83.    
  84. MAIN
  85.     ;Ide jöhet bármi program. Pl kitöltés állítgatása
  86.     ;A mérések 5 másodpercenként történnek, és az eredmény (kb 50 mérés átlaga)
  87.     ;alsó byte-ja EREDMENY, felső byte-ja EREDMENY+1 változóba kerül.
  88.     GOTO    MAIN
  89.  
  90. ;-------------------------------------------------------------------------------
  91. MEGSZAKITAS
  92.     MOVLW   1
  93.     SUBWF   IDO,F
  94.     CLRF    WREG
  95.     SUBWFB  IDO+1,F          ;Visszaszámlálás 5000-től 1msec-enként. (5sec)
  96.     SUBWFB  IDO+2,F
  97.     BTFSC   STATUS,C
  98.     GOTO    KILEP
  99.     ;---------
  100.     BCF     PIR1,TMR2IF      ;Törlöm a jelző bitet és letiltom a megszakítást,
  101.     BCF     PIE1,TMR2IE      ;hogy ne okozzon fölösleges jelzést.
  102. MERES ;----------------
  103.     BSF     ADCON0,GO
  104.     BTFSC   ADCON0,GO          
  105.     GOTO    $-2
  106.     MOVF    ADRESL,W         ;Folyamatosan ismétlem a méréseket mindaddig,
  107.     ADDWF   MERESEK,F        ;míg timer2 jelzőbitje nulla.A mérések eredményével
  108.     MOVF    ADRESH,W         ;folyamatosan növelem MERESEK változó értékét,vala-
  109.     ADDWFC  MERESEK+1,F      ;mint számolom a méréseket.
  110.     CLRF    WREG
  111.     ADDWFC  MERESEK+2,F
  112.     INCF    SZAMLALO
  113.     BTFSS   PIR1,TMR2IF
  114.     GOTO    MERES
  115.     ;------------------
  116.     CALL    OSZTAS          ;Meghívom az osztó rutint
  117.     ;------------------
  118.     ERTEKADAS   IDO,D'5000' ;Újra beállítom a késleltetést, törlöm a mérés
  119.     TORLES      MERESEK     ;változóit, törlöm a jelző bitet, visszaállítom
  120.     CLRF    SZAMLALO        ;a megszakítást.
  121.     BCF     PIR1,TMR2IF
  122.     BSF     PIE1,TMR2IE
  123.     RETFIE
  124. KILEP
  125.     BCF     PIR1,TMR2IF
  126.     RETFIE
  127. ;-------------------------------------------------------------------------------    
  128. OSZTAS
  129.     COPY    MERESEK,OSZTANDO
  130.     MOVFF   SZAMLALO,OSZTO
  131.     CLRF    OSZTO+1
  132.     CLRF    OSZTO+2
  133.     TORLES  MARADEK    
  134.         MOVLW   D'24'                    
  135.         MOVWF   CIKLUS
  136. VIZSGALAT_24   
  137.         BCF     STATUS,C                 
  138.         RLCF    OSZTANDO               
  139.         RLCF    OSZTANDO+1             
  140.         RLCF    OSZTANDO+
  141.         RLCF    MARADEK                  
  142.         RLCF    MARADEK+1
  143.         RLCF    MARADEK+2
  144.         MOVF    OSZTO,W            
  145.         SUBWF   MARADEK,W    
  146.         MOVF    OSZTO+1,W
  147.         SUBWFB  MARADEK+1,W
  148.         MOVF    OSZTO+2,W
  149.         SUBWFB  MARADEK+2,W
  150.         BNC     NINCS_KIVONAS_24
  151.         MOVF    OSZTO,W        
  152.         SUBWF   MARADEK
  153.         MOVF    OSZTO+1,W
  154.         SUBWFB  MARADEK+1
  155.         MOVF    OSZTO+2,W
  156.         SUBWFB  MARADEK+2
  157.         INCF    OSZTANDO
  158. NINCS_KIVONAS_24
  159.         DECFSZ  CIKLUS         
  160.         BRA     VIZSGALAT_24  
  161.         COPY    OSZTANDO,EREDMENY
  162.         RETURN
  163. ;-------------------------------------------------------------------------------
  164.         END
(#) don_peter válasza sonajkniz hozzászólására (») Okt 13, 2018 /
 
Köszi, sajnos csak jövőhéten tudom majd C-re fordíttatni, akkor számomra is teljesen tiszta lesz a logika.
(#) cross51 válasza sonajkniz hozzászólására (») Okt 13, 2018 /
 
Már nem assemblyzek, de miért kell a nop az org után mikor tanultam assembly-t mindig néztem az elektró tanárom példakódjait nála is ICD-re hivatkozva egy nop a reset vektoron.
Problémát okoz neki a GOTO 2 utasításciklusos feldolgozása?
(#) kissi válasza cross51 hozzászólására (») Okt 13, 2018 /
 
Szia!

Bővebben: Link

Nem írja, de szerintem azért, mert indulásnál vizsgálja, hogy belépjen-e DEBUG módba és ha igen, akkor el kell indulnia egy programnak, ami a korábban beolvasott első utasítást felülírja ( felülírná) !
Következő: »»   1049 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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