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   1052 / 1203
(#) don_peter válasza ktamas66 hozzászólására (») Okt 18, 2018 /
 
Igen a szimulátor nullát mér, kivéve ha stimulálom.. (ez nem mindig megy, valamiért)
Mire gondolsz mikor ezt írod?
Idézet:
„Valósan lehet nem így van, de az időzítés számításánál átvered magad.”


HP41C: Igen, ez igaz, de nem lesz 0% kitöltés.
Ettől független, ez még lehet hiba.
Esetleg valami javaslat, hogy tudnám ezt megfelelőképpen átírni?
Minden javaslatot megköszönöm, mert tudom, hogy ez nem a legjobb, de nem volt jobb ötletem.
(#) ktamas66 válasza don_peter hozzászólására (») Okt 18, 2018 / 1
 
Valahogy így csinálnám:
  1. void interrupt ISR(void) {
  2.         unsigned int temp = 0;
  3.        
  4.             if(TMR2IF){
  5.                 temp = ADRESH * 256 + ADRESL;   // kiolvasom az előző IT alatt indított mérést
  6.                 GO_DONE=1;      // indítok egy újat
  7.                 ADC += temp;
  8.                 Count++;    
  9.                 temp = ADRESH * 256 + ADRESL; // nem kell GO_DONE-t vizsgálni, úgyis letelt annyi idő (1MHz)
  10.                 GO_DONE=1;      // indítok egy újat, ezt fogom kiolvasni a következőben
  11.                 ADC += temp;
  12.                 Count++;
  13.            
  14.             // Egyéb ami még kell
  15.             // Én a számláló és az eredmény nullázását nem ide raknám
  16.                
  17.                 TMR2IF = 0;
  18.  
  19.             }
  20.      
  21.     }

Az inicializálásnál figyelni kell legyen előző mérés (kell néhányat mérni falból, mielőtt élesben indítod). Ha jól számoltam így a két mérés belefér a 100us-ba (1MHz).
(#) Hp41C válasza ktamas66 hozzászólására (») Okt 18, 2018 /
 
Sokat vitatkoztam itt a fórumon, hogy miért így állítjuk össze a 16 bites (vagy hosszabb) számokat (sok művelettel), amikor egy C beépített lehetőséggel (u n i o n) néhány utasítással megoldható a feladat. C18 (beállítható, hogy int -é konvertáljon) az első operandus (ADRESH) típusával kezdi a számolást, xc8 pedig mindent int -re konvertál a számolás előtt.
A hozzászólás módosítva: Okt 18, 2018
(#) don_peter válasza ktamas66 hozzászólására (») Okt 18, 2018 /
 
Ezzel te akkor kihagyod a 10-es utóosztást? Vagy az ettől független még kell bele?
Illetve így minden bebillenéskor mérni fog (nyilván az előzőt+aktuálisat), de így miképpen lesz ebből nekem érvényes mérésem? Mert gondolom ez a két mérés még nem mérés.
Írod, hogy a számlálót és az eredményt, illetve a nullázást nem a megszakításban raknád.
Főprogramból figyeljem Count tartamát és ha elér egy bizonyos számot osszak, értékeljem az eredményt és nullázzak?

Nem kellene megállítani a megszakítást, ameddig az eredményeket megkapom?

Így tulajdon képen mindig az első 2 mérés kerül bele az ADC-be.
Ezt azért, hogy mindig magasat mérjek?
A hozzászólás módosítva: Okt 18, 2018
(#) ktamas66 válasza Hp41C hozzászólására (») Okt 18, 2018 /
 
Azért az XC8 sem teljesen hülye:
  1. 40:                            temp = ADRESH * 256 + ADRESL;   // kiolvasom az el?z? IT alatt indított mérést
  2. 039C  081E     MOVF ADRESH, W
  3. 039D  00F6     MOVWF 0x76
  4. 039E  1683     BSF STATUS, 0x5
  5. 039F  081E     MOVF ADRESH, W
  6. 03A0  00F5     MOVWF temp


A temp a 0x75-re került.
(#) ktamas66 válasza don_peter hozzászólására (») Okt 18, 2018 / 1
 
Igen, így ki lehet hagyni az utóosztást, vagy lehet csökkenteni, mivel gondolom nem csak mérésből állna a programod. A két mérés belefér a 100us-ba, tehát mindig magasat mér. Hátrány lehet, hogy csak két mintát vesz, ha vannak tranziensek, azt kit tudja hogy méri bele. A számolásokkal lehet tologatni a mérés időpontját, akár több temp változót is lehet használni, és utólag számolni. A lényeg, hogy maradjon idő a főprogramra is, ne csak az IT-ben fusson mindig. Mivel amíg az AD dolgozik számítások történnek, ha állítod az órajelet ellenőrizni kell végez-e az AD mire a számítások befejeződnek.
(#) ktamas66 válasza ktamas66 hozzászólására (») Okt 18, 2018 /
 
Még egy dolog: én itt az ADC-t sima int-re állítottam, így van kiszámolva az időzítés.
(#) ktamas66 hozzászólása Okt 18, 2018 /
 
Most nézem, hogy rossz a számításom, mivel 48us-ot eljátszik valahol, míg belép a megszakításba (valószínűleg regisztereket ment). Így sokkal kevesebb idő marad. Ha magasabb órajelet választasz, ez gyorsabban lezajlana.
(#) Hp41C válasza ktamas66 hozzászólására (») Okt 19, 2018 /
 
Nem is olyan régen még ennyire az volt:
16F1847: XC8 V1.33 optimalizált kód (még a 60 napos periódusból):
  1. 1851:              temp = 256 * ADRESH + ADRESL;
  2.   09A8    0021     MOVLB 0x1
  3.   09A9    081C     MOVF 0x1c, W   ; ADRESH
  4.   09AA    00EA     MOVWF 0x6a
  5.   09AB    01E9     CLRF 0x69
  6.   09AC    081B     MOVF 0x1b, W  ; ADRESL
  7.   09AD    07E9     ADDWF 0x69, F
  8.   09AE    1803     BTFSC 0x3, 0    ; STATUS C bit
  9.   09AF    0AEA     INCF 0x6a, F

A leginkább az tetszik, hogy az alsó byte -ot kinullázza, majd hozzáadja a ADRESL -t, majd még az átvitellel is foglalkozik.
2014 -ben készült ez a verzió.... Éljen
(#) don_peter válasza ktamas66 hozzászólására (») Okt 24, 2018 /
 
Próbálgatom, lehet magasabb órajel lesz a nyerő.
(#) Bell válasza don_peter hozzászólására (») Okt 25, 2018 /
 
Kettő hatványaival való osztás egyszerű léptetés.
Ez biztosan gyorsabb, mint egy akármilyen osztás.
(#) madzagos hozzászólása Okt 25, 2018 /
 
Tisztelt szakértők! Egy 16f628-as pic törlésénél ezt a hibát kaptam. Mit lehet ilyenkor tenni?a pic eredetileg másolásvédelemmel volt ellátva. Másik ugyanilyen picet simán tudtam törölni.
A hozzászólás módosítva: Okt 25, 2018
(#) Bakman válasza madzagos hozzászólására (») Okt 25, 2018 /
 
Nem a törlés (Erase) gombra, hanem az üresség ellenőrzésére* (Blank Check) kattintottál.

*Mi ennek a magyar megfelelője?
(#) madzagos válasza Bakman hozzászólására (») Okt 25, 2018 /
 
A másik picnél is először a törlés gombra nyomtam aztán a Blank Checkre és utána újra tudtam írni. ennél a picnél ugyanezt végrehajtom, és ezt adja ki.
(#) Bakman válasza madzagos hozzászólására (») Okt 25, 2018 /
 
Próbáld a Use Vpp First Program Entry opciót.
(#) madzagos válasza Bakman hozzászólására (») Okt 25, 2018 /
 
Kipróbáltam erre ezt írja ki.
(#) madzagos válasza madzagos hozzászólására (») Okt 25, 2018 /
 
Szerintem megy a kukába nem kínlódok vele.
(#) superuser válasza madzagos hozzászólására (») Okt 25, 2018 /
 
Ha LVP módban (mclr jelszint TTL) próbálsz programozni (törölni) olyan PIC-et ami nem LVP módban volt programozva (mclr jelszint 13V környéke), akkor ilyen hibaüzenetet kapsz. Persze a PIC is tönkremehetett.
(#) madzagos válasza superuser hozzászólására (») Okt 25, 2018 /
 
A másik ugyanilyen picet simán tudtam törölni. Két egyforma panelböl lettek kivéve. A másikat sikeresen fel tudtam programozni.
(#) rolandgw hozzászólása Okt 25, 2018 /
 
Üdv!
Szeretnék megkérni valakit, akinél van telepített MPLAB 5.05, nézze meg - ha lehet, hogy van-e már MPLAB Snap programozói támogatás az ATMEGA3209/4809 vezérlőkhöz (UPDI). Nem akarok ekkora programot feleslegesen telepíteni.
Köszönöm!
(#) Hp41C válasza madzagos hozzászólására (») Okt 25, 2018 /
 
Mekkora a tápfeszültsége a programozás alatt?
Idézet:
„All bulk erase operations must take place with VDD between 4.5-5.5V.”
(#) madzagos válasza Hp41C hozzászólására (») Okt 25, 2018 /
 
5volt-ra van beállítva.
(#) silent15 hozzászólása Okt 26, 2018 /
 
Sziasztok!

Mid-range 16F sorozatnál tudnátok tapasztalatot mondani a belső felhúzó ellenállásról? I2C és nyomógombhoz kellene, lehet rá építeni ilyen célra, vagy megbízhatóbb a külső felhúzás? Leírnátok a tapasztalataitokat ?

Köszönöm!
(#) eSDi válasza rolandgw hozzászólására (») Okt 26, 2018 /
 
Hali

Még piros a Snap előtti bogyó.
(#) Bakman válasza silent15 hozzászólására (») Okt 26, 2018 /
 
A belső felhúzó kb. a 30 kΩ-os tartományba esik, mindenképpen gyengébb, mint a külső, pl. 1 kΩ-os.
(#) eSDi válasza silent15 hozzászólására (») Okt 26, 2018 /
 
Nyomógombokhoz minden gond nélkül használhatod. Hardveres I2C/SPI-nél nincs jelentősége, mert tiltva van, amikor az SSP aktív.

SSP.png
    
(#) rolandgw válasza eSDi hozzászólására (») Okt 26, 2018 /
 
Köszi!
(#) Hp41C válasza eSDi hozzászólására (») Okt 26, 2018 /
 
Az I2C busz nyitott kollektoros / drain -es vonalakkal működik, így a felhúzó ellenállás és a vonal kapacitása fogja meghatározni az alkalmazható maximális átviteli sebességet. 100 kHz -es átvitelhez 2k7 felhúzó ellenállás körüli kell, de a pontos értéket a busz hosszából, a rá kapcsolt egységek számából és bemeneti kapacitásukból kell kiszámítani.
(#) silent15 válasza Hp41C hozzászólására (») Okt 26, 2018 /
 
DS1307 és a PIC adatlapja 100kHz-hez max 400pF-ot és maximum 1000ns -ot ír. (RPU = tr/Cb) Így cirka 2,5KR jön ki, de tényleg függ a panel kialakításától. Akkor csak a nyomógombnál hagyom el az ellenállást.

Köszönöm mindenkinek a felvilágosítást!
(#) silent15 hozzászólása Okt 28, 2018 /
 
Sziasztok, van egy 16F18323 kontrollerem. Nincs rajta se kvarc, se semmi, csak a natúr kapcsolás. 100nF 5V.

A C2 lábat szeretném kapcsolgatni (sok mást szeretnék még, de ennyire visszabutítottam, mert nem találom a hibám), de a lábon 1,7V környéke van. A lábra semmi nincs rákötve. Mit rontok el? Egyszerűen nem jövök rá, van még valami periféria ami használná a lábat és tiltanom kell?

Köszönöm!

  1. // CONFIG1
  2. #pragma config FEXTOSC = OFF     // FEXTOSC External Oscillator mode Selection bits (HS (crystal oscillator) above 4 MHz)
  3. #pragma config RSTOSC = HFINT32 // Power-up default value for COSC bits (HFINTOSC with 2x PLL (32MHz))
  4. #pragma config CLKOUTEN = OFF   // Clock Out Enable bit (CLKOUT function is disabled; I/O or oscillator function on OSC2)
  5. #pragma config CSWEN = OFF      // Clock Switch Enable bit (The NOSC and NDIV bits cannot be changed by user software)
  6. #pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
  7.  
  8. // CONFIG2
  9. #pragma config MCLRE = OFF      // Master Clear Enable bit (MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up under control of port pin's WPU control bit.)
  10. #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
  11. #pragma config WDTE = OFF       // Watchdog Timer Enable bits (WDT disabled; SWDTEN is ignored)
  12. #pragma config LPBOREN = OFF    // Low-power BOR enable bit (ULPBOR disabled)
  13. #pragma config BOREN = ON       // Brown-out Reset Enable bits (Brown-out Reset enabled, SBOREN bit ignored)
  14. #pragma config BORV = LOW       // Brown-out Reset Voltage selection bit (Brown-out voltage (Vbor) set to 2.45V)
  15. #pragma config PPS1WAY = OFF    // PPSLOCK bit One-Way Set Enable bit (The PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence))
  16. #pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable bit (Stack Overflow or Underflow will cause a Reset)
  17. #pragma config DEBUG = OFF      // Debugger enable bit (Background debugger disabled)
  18.  
  19. // CONFIG3
  20. #pragma config WRT = OFF        // User NVM self-write protection bits (Write protection off)
  21. #pragma config LVP = ON         // Low Voltage Programming Enable bit (Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored.)
  22.  
  23. // CONFIG4
  24. #pragma config CP = OFF         // User NVM Program Memory Code Protection bit (User NVM code protection disabled)
  25. #pragma config CPD = OFF        // Data NVM Memory Code Protection bit (Data NVM code protection disabled)
  26.  
  27. #include <xc.h>
  28. #define _XTAL_FREQ 32000000
  29. void main(void) {
  30.     TRISCbits.TRISC2 = 0;
  31.     ANSELCbits.ANSC2 = 0;
  32.     LATCbits.LATC2 = 1;
  33.     __delay_ms(2500);
  34.     LATCbits.LATC2 = 0;
  35.     return;
  36. }
A hozzászólás módosítva: Okt 28, 2018
Következő: »»   1052 / 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