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   713 / 1210
(#) Zsolt2 válasza Droot hozzászólására (») Okt 19, 2015 /
 
A kepleteket itt talalhatod meg a Baud rata kiszamolasahoz: DS70000582E-page 12.
Ha BRGH=0 => ((50*10^6)/(16*9600))-1=324.52
Ha BRGH=1 => ((50*10^6)/(16*9600))-1=1301
(#) hapci hozzászólása Okt 19, 2015 /
 
A 16F628A komparátorát belső referenciával használnám. Jól gondolom-e, hogy a nem használt bemeneteket testre köthetem? (Az adatlap - más módozatoknál - a nem használt komparátor bemeneteket így mutatja.)
(#) Droot válasza Zsolt2 hozzászólására (») Okt 19, 2015 /
 
Így csináltam: ((62,5*10^6)/(16*9600))-1=405,9, tehát 406-ot állítottam be.
Az UART-ot jól csatolom a megfelelő lábakhoz?
(#) Zsolt2 válasza Droot hozzászólására (») Okt 19, 2015 /
 
A TX az RB8-as labra van csatolva, az RX is ugyanarra. Echo uzemmodban akarod hasznalni?
Az orajelet most 125Mhz-en jaratod?
(#) Droot válasza Zsolt2 hozzászólására (») Okt 19, 2015 /
 
Nem echoban, külön külön lábra szeretném. Igen, számításaim szerint most 125MHz-en működik és ezt egy Timer-el teszteltem.
Egy másik lábra hogy lehetne átrakni, pl a mellette lévőre vagy a Tx-et vagy az Rx-et?
(#) Zsolt2 válasza Droot hozzászólására (») Okt 19, 2015 /
 
  1. RPINR18bits.U1RXR = 41;
, igy az RX atkerul az RB9-es labra.
(#) Droot válasza Zsolt2 hozzászólására (») Okt 19, 2015 /
 
Köszönöm szépen!
Délután kipróbálom.
Jó ez hogy bárhová kapcsolhatom a perifériákat, csak még nem igazodtam ki rajta teljesen.
(#) SKY hozzászólása Okt 19, 2015 /
 
Sziasztok!
Meg tudná valaki mondani, hogy az alábbi PIC-ben lévő két ADC (12 & 16 bit) tud-e egyszerre, egy időben működni és mintavételezni 1-1 lábon? Illetve mennyi a maximális késleltetés, ha nem?
PIC24FJ128GC006
Köszönöm a választ!
(#) Droot válasza Zsolt2 hozzászólására (») Okt 19, 2015 /
 
Sajnos még így sem jó...
Csatolom a komplett kódot.
d betű helyett 0xd2-t küld. Én már nem értem....
  1. #pragma config FWDTEN = OFF // Watchdog Timer Enable bit (Watchdog timer enabled/disabled by user software)
  2. #pragma config FNOSC = PRIPLL           // Oscillator Source Selection (Primary Oscillator with PLL module (XT + PLL, HS + PLL, EC + PLL))
  3. #pragma config IESO = ON                // Two-speed Oscillator Start-up Enable bit (Start up device with FRC, then switch to user-selected oscillator source)
  4. #pragma config POSCMD = HS
  5. #pragma config OSCIOFNC = OFF            // OSC2 Pin Function bit (OSC2 is general purpose digital I/O pin)
  6. #pragma config PLLKEN = ON
  7. #pragma config FCKSM = CSECMD
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <xc.h>
  12. #include <p33ep512gp502.h>
  13. #include <stdint.h>
  14. volatile uint8_t cnt = 0;
  15. void __attribute__((interrupt, auto_psv)) _T1Interrupt( void )
  16. {
  17.     cnt++;
  18.     if(cnt == 4)
  19.     {
  20.         cnt = 0;
  21.         LATBbits.LATB5 = ~PORTBbits.RB5;
  22.     }
  23.     U1TXREG = 'd';
  24.        
  25.     IFS0bits.T1IF = 0;  // reset timer interrupt flag
  26. }
  27. #define DELAY_105uS asm volatile ("REPEAT, #4201"); Nop(); // 105uS delay
  28. #define FP 62500000
  29. #define BAUDRATE 9600
  30. #define BRGVAL ((FP/BAUDRATE)/16)-1
  31. int main() {
  32.     //PLL beállítása
  33.     CLKDIVbits.PLLPOST = 0;
  34.     CLKDIVbits.PLLPRE = 1;
  35.     PLLFBDbits.PLLDIV = 38;
  36.     /*FIN       25       MHz
  37.       PLLDIV    38
  38.       PLLPRE    2      
  39.       PLLPOST   0      
  40.       FPLLI     6,25 MHz
  41.       FVCO      250  MHz
  42.       FPLLO     125      MHz
  43.     */
  44.    
  45.     //átkapcsolás PLL-re
  46.     //__builtin_write_OSCCONH( 0x03 );
  47.     //__builtin_write_OSCCONL( OSCCON || 0x01 );
  48.    /* OSCCONbits.COSC1 = 1;
  49.     OSCCONbits.COSC0 = 1;
  50.     OSCCONbits.OSWEN = 1;
  51.    
  52.     //várunk amíg átkapcsol
  53.     //while( OSCCONbits.COSC != 0b011 );*/
  54.    
  55.     //Várunk amíg a PLL beáll
  56.     while( OSCCONbits.LOCK == 0 );
  57.    
  58.     //Timer 1 beállítása
  59.     T1CON = 0;
  60.     T1CONbits.TCS = 0;      
  61.     T1CONbits.TCKPS0 = 1;                          
  62.     T1CONbits.TCKPS1 = 1;                          
  63.     T1CONbits.TGATE = 0;                          
  64.     IFS0bits.T1IF = 0;  
  65.     IPC0bits.T1IP = 6;
  66.     IEC0bits.T1IE = 1;  
  67.     PR1 = 61035;    
  68.     T1CONbits.TON = 1;
  69.    
  70.     //UART1 beállítása
  71.     RPINR18bits.U1RXR = 41; //26-os láb, RP41 Rx
  72.     RPOR2bits.RP39R0 = 1;   //RP39 legyen Tx
  73.     U1MODEbits.STSEL = 0; // 1-Stop bit
  74.     U1MODEbits.PDSEL = 0; // No Parity, 8-Data bits
  75.     U1MODEbits.ABAUD = 0; // Auto-Baud disabled
  76.     U1MODEbits.BRGH = 0; // Standard-Speed mode
  77.     U1BRG = BRGVAL; // Baud Rate setting for 9600
  78.  
  79.     U1STAbits.UTXISEL0 = 0; // Interrupt after one TX character is transmitted
  80.     U1STAbits.UTXISEL1 = 0;
  81.     U1MODEbits.UARTEN = 1; // Enable UART
  82.     U1STAbits.UTXEN = 1; // Enable UART TX
  83.  
  84.     // I/O beállítások
  85.     TRISBbits.TRISB5 = 0;   //RB5 kimenet
  86.     TRISBbits.TRISB6 = 1;   //RB6 bemenet
  87.     CNPUBbits.CNPUB6 = 1;   //RB6 felhúzó ellenállás
  88.  
  89.     U1TXREG = 0x32;
  90.     while(1)
  91.     {
  92.         DELAY_105uS
  93.         DELAY_105uS
  94.         DELAY_105uS
  95.         DELAY_105uS
  96.         DELAY_105uS
  97.         DELAY_105uS
  98.         DELAY_105uS
  99.         DELAY_105uS
  100.                
  101.         if(PORTBbits.RB6 == 0)
  102.         {
  103.             DELAY_105uS
  104.             U1TXREG = 'd';
  105.             DELAY_105uS
  106.             U1TXREG = 'x';
  107.         }
  108.     }
  109.     return (EXIT_SUCCESS);
  110. }
A hozzászólás módosítva: Okt 19, 2015
(#) Zsora válasza SKY hozzászólására (») Okt 19, 2015 /
 
A 12-bites nagy sebességű és a 16-bites szigma-delta A/D átalakító két külön periféria, tehát egymástól függetlenül (párhuzamosan, egy időben) képesek működni. (Viszont az általuk kezelt csatornákat mindegyik felváltva ill. sorban mintavételezi, így az egy egységen belüli mintavételezések nem egy időben történnek.)
(#) sonajkniz hozzászólása Okt 20, 2015 /
 
Sziasztok!
Egy programozható, LCD kijelzővel rendelkező rendelkező időzítőt szeretnék készíteni.
Pontosabban már készítettem, csak az a gondom vele, hogy a PIC-et a fölös időkben nem tudom aludni küldeni, mert akkor nem megy az óra. Ez miatt egy hónap alatt lemerülnek az elemei. Ezért az lenne a kérdésem, hogy létezik-e olyan nagyon alacsony fogyasztású, kimondott óra IC, amit le hehet kérdezni?
(#) Hp41C válasza sonajkniz hozzászólására (») Okt 20, 2015 /
 
Létezik, RTC -ként keress adatlapot. pl. MCP794xx ill. MCP795xx
A timer1 működik külső órajelről a sleep állapotban is. PL 32.768kHz -es quartz -cal járatva lehet pl. másodpercenként megszakítást kérni, azzal felébreszteni a kontrollert, elvégezni az idő módosítását és a többi feladatot, majd lealtatni.
(#) sonajkniz válasza Hp41C hozzászólására (») Okt 20, 2015 /
 
Jelen pillanatban is külső quartz-cal megy, de csak levettem a frekijét. Tehát, ha aludni küldöm, attól még az óra menni fog, és felébreszti a PIC-et a megszakítási rutin? Illetve csak felébreszti, mint pl. egy külső jel, vagy ki is váltja a megszakítást?
(#) Hp41C válasza sonajkniz hozzászólására (») Okt 20, 2015 /
 
Idézet:
„Tehát, ha aludni küldöm, attól még az óra menni fog..”

A belső órajel leáll sleep módban, de a timer1 külső órajel generárora nem áll le.
Idézet:
„és felébreszti a PIC-et a megszakítási rutin”

Amennyiben a timer1 megszakítás engedélyezett és a PEIE is engedélyezett a timer1 átfordulása felébreszi a kontrollert. Hogy megszakítás is lesz -e, azt a GIE bit értéke határozza meg. GIE == 1 esetén a kontroller végrehajtja a sleep utáni utasítást és a megszakítás kiszolgáló rutinra ugrik. GIE == 0 esetés a sleep utáni utasításokkal folytatja a programot.
(#) sonajkniz válasza Hp41C hozzászólására (») Okt 20, 2015 /
 
Köszönöm szépen.
Így már valószínűleg tovább fogják bírni az elemek.
(#) don_peter hozzászólása Okt 20, 2015 /
 
Uraim,
18F46K22 16MHz-es Kristállyal 4PLL 64MHz-en járatva, C18-ban, ha 1us-t akarok elérni, akkor használhatom a delay.h könyvtár függvényeit?
Tehát a következő szerint számoltam:
  1. // 1/(64000000/4) == 0.00000000625 * 16 = 0.0000001 == 1us
  2. for(i=16; i==0; i--) Delay1TCY();

A fentebbi kód elvileg 1us-t fog eredményezni.

Egy DS18B20-al kínlódom már pár napja, és nem értem mi lehet a baja.
Már mindenre gondolok legfőbbként az időzítésekre, de nem jövök rá a hibára.
Csatolom a proteus projektet is, hátha valaki tudna segíteni.
(#) Bell válasza don_peter hozzászólására (») Okt 20, 2015 /
 
Ha kijavítod az i==0 -át i>0 -ra, akkor működnie kéne. Pontos nem lesz, nézd meg a szimulátorban.
(#) don_peter válasza Bell hozzászólására (») Okt 20, 2015 /
 
Nyilván ma a ciklus miatt is lehet elcsúszás, de megközelítőleg 1us-lesz az eredmény, elvileg.
A DS18B20-nak elég pontos időzítés kell, de sajnos ezzel a megoldással sem működik a szenzor.
Kicsit frusztrál a dolog
(#) Bell válasza don_peter hozzászólására (») Okt 20, 2015 /
 
Nézzél rá, hogy a ciklus sosem fut le i==0-val!
Én előbb egy egyszerű késszel próbálkoznék, ott kiderül egy és más.
A hozzászólás módosítva: Okt 20, 2015
(#) sonajkniz válasza Hp41C hozzászólására (») Okt 20, 2015 /
 
Működik!
Szuper! 1,3mA-ról 0,035mA-re esett vissza nyugalmi állapotban az áramfelvétel.
Így már mindját más.
Mégegyszer köszönöm.
(#) don_peter válasza Bell hozzászólására (») Okt 20, 2015 /
 
A gyáriét használtam eddig, de semmi eredmény.
Igen ezt az i==0-t benéztem, javítottam, de eredményt persze nem hozott.
Sok mindent kipróbáltam már, de valamiért nem tudom működésre bírni a DS18B20-at.
(#) Bell válasza don_peter hozzászólására (») Okt 20, 2015 /
 
Nemrég keresgéltem ilyesmi, ami egyszerű, jól áttekinthető, ezt találtam, de nem volt még időm kipróbálni.
A hozzászólás módosítva: Okt 20, 2015
(#) don_peter válasza Bell hozzászólására (») Okt 20, 2015 /
 
Igen ezt is próbáltam már, nekem nem működik valamiért ez sem, meg semelyik amit eddig találtam. Volt pár napom amit beleöltem a dologba, ezért kérek segítséget mert nem megy valamiért, és kifogytam az ötletekből.
Csak most már tanácstalan vagyok, hogy a PIC miatt, esetleg az időzítések miatt vagy valamit nem veszek észre?
Passz.
(#) Hp41C válasza don_peter hozzászólására (») Okt 20, 2015 /
 
Saleae logic 8 nincs véletlenül a közelben. Képes a 1-wire protokol értelmezésére...
A hozzászólás módosítva: Okt 20, 2015
(#) kissi válasza Hp41C hozzászólására (») Okt 20, 2015 /
 
Még csak szimulál, ha jól értettem !

Írtam neki, hogy mérje meg az időket szimulátorral, de nem reagált még rá.
A hozzászólás módosítva: Okt 20, 2015
(#) don_peter válasza Hp41C hozzászólására (») Okt 20, 2015 /
 
Sajnos nincs, egyébként élőben, élesben is tesztelem, hogy biztosra tudjak menni.

kissi: hehe élesben is tesztelem, nem csak szimulálom
A hozzászólás módosítva: Okt 20, 2015
(#) kissi válasza don_peter hozzászólására (») Okt 20, 2015 /
 
Ha nem megy, akkor vagy rossz az a DS ( nem jellemző!) vagy rosszak az időzítéseid ! Ezt viszont méréssel lehet kideríteni ( vagy szimulációval, HEHE ! ) !
(#) Lamprologus válasza sonajkniz hozzászólására (») Okt 20, 2015 /
 
DS1307
Távol keletről akár 1 Euróért is postázzák (Tiny RTC I2C modules) elemmel - elemtartóval, plusz EEprommal ...
(#) Bell válasza Lamprologus hozzászólására (») Okt 20, 2015 /
 
Szerintem praktikusabb IC-be integrált kvarccal 1$ -ért. Bővebben: Link
(#) AZoli hozzászólása Okt 20, 2015 /
 
Sziasztok!
PIC24EP512GU814 -et debuggolok, és folymatosan AddressError trap-ban látom. A main függvény első utasításán breakpoint, de nem jut el addig.
Hogyan tudhatom meg hogy honnan jutott az addressTrap-ba?
A Call Stack és Call Graph nem mond semmit, csak hogy épp melyik sorban áll a program.

Ha a void _ISR _AddressError(void) -ban megállítom, még az LNK #0x0 végrehajtása előtt, akkor WREG14 = 0x2FF0 és WREG15 = 0x1908.
A 0x1908 címen 0x2FF0 van, a 0x2FF0 címen pedig 0xFE18, de nem igazán értem hogy ezekből hogy jön ki a visszatérési cím. (mert gondolom a trap-ot kiváltó utasítást követő utasításra fog mutatni a visszatérési cím.)

Ugye nem lehetséges, hogy az XC16 olyan inicializáló részt fordít a programom elé, ami trap-al elszáll???
Következő: »»   713 / 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