Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1210 / 1319
(#) Bakman válasza messer hozzászólására (») Feb 19, 2016 /
 
A PIC szemszögéből nézve a TX vonalra kell két ellenállás, az RX vonalra pedig nem kell semmi. Az 5 V-ot leosztod 3,3 V-ra a TX oldlaon, az RX oldalon a 3,3 V -ot pedig magas szintként fogja érzékelni a PIC 5 V-os tápfesz. esetén.
A hozzászólás módosítva: Feb 19, 2016
(#) zenetom válasza Bakman hozzászólására (») Feb 19, 2016 /
 
Az RC7 (UART RX) elvileg Schmitt trigger bemenet, ami viszont 0.2VDD alatt logikai alacsony, 0.8VDD felett pedig logikai magas.
Szóval elvileg 0-1V között "0", 4-5V között "1" van, 5V tápfesz esetén.
(#) messer hozzászólása Feb 19, 2016 /
 
A tx láb az rendben lehet ellenállással de az rx-hez kellene vmiféle illesztés..
(#) Bakman válasza zenetom hozzászólására (») Feb 20, 2016 /
 
Ez az óra már több példányban üzemel. A kontroller 5 V-ról üzemel, a GPS vevő 3,3 V-ot ad H szint esetén, mindenféle illesztés nélkül működik. Egy próbát megér próbapanelen, hátha nem kell az illesztés. Az órában PIC16F887 dolgozik.
(#) messer válasza Bakman hozzászólására (») Feb 20, 2016 /
 
Az a gond, hogy nem véletlen írtam én sem igen is jelentkezik a probléma. L72-es quectel gsm modemmel kisérletezek még ha 4V tápot adok neki akkor is csak 2,8V--3V körül van az aktív magas a kimenetén így 16F877 már többször nem érzékelte magasnak csomó tévesztés van a kommunikációban. Azért is akarok jó megoldást mert fontos hogy minimális legyen a fogyasztás így lényeges hogy mivel végzem a szint illesztést...
(#) Bakman válasza messer hozzászólására (») Feb 20, 2016 /
 
Annó csináltam pár próbát, a 3 V valóban határeset. A mellékletben egy lehetséges megoldás. Esetleg a HEStore-ból valamilyen szintillesztő: Bővebben: Link.

4056-ST-5.jpg
    
(#) Hp41C válasza messer hozzászólására (») Feb 20, 2016 / 1
 
Egy 74HTC08, 74HCT126, 74HCT1G08, vagy két invertáló kapu sorban, ami a kontroller 5V -járól megy, elvégzi a szintillesztést. Megoldható egy elég gyors komparátorral is, ami 5V -ról képes működni. Használható még két egymásután kapcsolt tranzisztoros inverter (földelt emitteres kapcsolás) is, a második kollektorköre a kontroller 5V -jára kapcsolódjon. Egy másik ötlet, amihez csak egy P-MOS FET kell, az I2C szintillesztő megoldásából vehető át. Bővebben: Link. Ha a modul az UART TX kimenetén megengedi a magasabb feszültséget (pl. mert nyitott kollektoros), egy egyszerű felhúzó ellenállás (a kontroller 5V tápjára) is megldás lehet.
(#) potyo válasza messer hozzászólására (») Feb 20, 2016 / 1
 
Ha a hely nem probléma, akkor tehetsz valami 74HCT logikai ic-t. 5V-ról táplálod, 2V-ot már magasnak érzékel a bemenetén. Létezik ezekből egyetlen kaput tartalmazó tok is, 74HCT1Gxx jelzéssel. Persze hogy mennyire van a sarki boltban, az jó kérdés...
(#) messer hozzászólása Feb 20, 2016 /
 
Köszönöm szépen így már van miből szemezni. Azt találtam ki, hogy amíg debuggolom a kapcsolást vagy a fetes vagy a két nand kaput alkalmazom attól függ mit találok itthon. Aztán majd a végleges kapcsolás kap egy LF pic-et
(#) Droot hozzászólása Feb 22, 2016 /
 
Sziasztok!

Egy PIC32MZ2048EFH100-on szeretném letesztelni a PLL beállításaimat. Mégpedig úgy, hogy a Timer 2-n szeretnék egy 1ms-os interruptot, amivel majd (később 500ms-al) egy LED-et villogtatok.

A Timer 2 ha jól olvastam a PB3CLK órajelforrásról jár. A beállításaim a következők 200Mhz-es órajel esetén:
  1. void __ISR(_TIMER_2_VECTOR, IPL6AUTO) t23ISR()
  2. {
  3.     PORTGbits.RG15 = 1;
  4.    
  5.     IFS0bits.T2IF = 0;
  6. }
  7.  
  8. int main(int argc, char** argv) {
  9.    
  10.     PB3DIVbits.ON = 1;
  11.     PB3DIVbits.PBDIV = 63;
  12.     TRISGbits.TRISG15 = 0;
  13.    
  14.     //Timer 2 initialize
  15.     T2CON = 0;
  16.     T2CONbits.T32 = 1;
  17.     T2CONbits.TCS = 0;  
  18.     T2CONbits.TON = 1;      
  19.     T2CONbits.TCKPS0 = 0;  
  20.     T2CONbits.TCKPS1 = 1;
  21.     IFS0bits.T2IF = 0;  
  22.     IPC2bits.T2IP = 6;
  23.     IPC2bits.T2IS = 2;
  24.     TMR2 = 0;
  25.     PR2 = 255;
  26.     T2CONbits.ON = 1;
  27.    
  28.     __asm__("EI");
  29.    
  30.     //PORTGbits.RG15 = 1;
  31.    
  32.     while(1);
  33.     return 0;
  34. }


Ez nem 1ms-os megszakítás lesz, de nem is ezzel van a gond. Hanem ha elindul a Timer, a LED-et be kellene kapcsolnia, azonban sajnos nem történik semmit.
(#) Droot válasza Droot hozzászólására (») Feb 22, 2016 /
 
Az IEC0bits.T2IE = 1; hiányzott.

Ez a megszakításom:
  1. int cnt = 0;
  2. //1ms Interrupt for delays
  3. void __ISR(_TIMER_2_VECTOR, IPL6AUTO) t23ISR()
  4. {
  5.     cnt++;
  6.     if(cnt < 1000)
  7.     {
  8.         PORTGbits.RG15 = 1;
  9.     }
  10.     if(cnt > 1000)
  11.     {
  12.         PORTGbits.RG15 = 0;
  13.     }
  14.     if(cnt == 2000) cnt = 0;
  15.    
  16.     IFS0bits.T2IF = 0;
  17. }


Ez a timer init:
  1. //Timer 2 initialize for interrupt every 1ms
  2.     T2CON = 0;
  3.     T2CONbits.T32 = 0;
  4.     T2CONbits.TCS = 0;      //Fp as clock source
  5.     T2CONbits.TON = 1;      
  6.     T2CONbits.TCKPS0 = 0;   //64 prescaler
  7.     T2CONbits.TCKPS1 = 1;
  8.     IFS0bits.T2IF = 0;      //Clear interrupt flag
  9.     IPC2bits.T2IP = 6;      //Interrupt priority 6
  10.     IPC2bits.T2IS = 2;      //Interrupt sub priority 2
  11.     TMR2 = 0;
  12.     PR2 = 50;
  13.     T2CONbits.ON = 1;
  14.     IEC0bits.T2IE = 1;      //Timer 2 interrupt enable
  15.    
  16.     __asm__("EI");


Ez alapján úgy számoltam, hogy ez 1,024ms-os megszakításokat generál. A fenti esetben a LED-nek másodpercenként kellene állapotot váltania. Azonban kb. 100ms-onként vált állapotot.
Mit rontottam el?

Ez a PIC configuration bit settings:
  1. // DEVCFG3
  2. // USERID = No Setting
  3. #pragma config FMIIEN = ON              // Ethernet RMII/MII Enable (MII Enabled)
  4. #pragma config FETHIO = ON              // Ethernet I/O Pin Select (Default Ethernet I/O)
  5. #pragma config PGL1WAY = ON             // Permission Group Lock One Way Configuration (Allow only one reconfiguration)
  6. #pragma config PMDL1WAY = ON            // Peripheral Module Disable Configuration (Allow only one reconfiguration)
  7. #pragma config IOL1WAY = ON             // Peripheral Pin Select Configuration (Allow only one reconfiguration)
  8. #pragma config FUSBIDIO = ON            // USB USBID Selection (Controlled by the USB Module)
  9.  
  10. // DEVCFG2
  11. #pragma config FPLLIDIV = DIV_3         // System PLL Input Divider (3x Divider)
  12. #pragma config FPLLRNG = RANGE_5_10_MHZ // System PLL Input Range (5-10 MHz Input)
  13. #pragma config FPLLICLK = PLL_POSC      // System PLL Input Clock Selection (POSC is input to the System PLL)
  14. #pragma config FPLLMULT = MUL_50        // System PLL Multiplier (PLL Multiply by 50)
  15. #pragma config FPLLODIV = DIV_2         // System PLL Output Clock Divider (2x Divider)
  16. #pragma config UPLLFSEL = FREQ_24MHZ    // USB PLL Input Frequency Selection (USB PLL input is 24 MHz)
  17.  
  18. // DEVCFG1
  19. #pragma config FNOSC = SPLL             // Oscillator Selection Bits (System PLL)
  20. #pragma config DMTINTV = WIN_127_128    // DMT Count Window Interval (Window/Interval value is 127/128 counter value)
  21. #pragma config FSOSCEN = OFF            // Secondary Oscillator Enable (Disable SOSC)
  22. #pragma config IESO = ON                // Internal/External Switch Over (Enabled)
  23. #pragma config POSCMOD = HS             // Primary Oscillator Configuration (HS osc mode)
  24. #pragma config OSCIOFNC = OFF           // CLKO Output Signal Active on the OSCO Pin (Disabled)
  25. #pragma config FCKSM = CSECME           // Clock Switching and Monitor Selection (Clock Switch Enabled, FSCM Enabled)
  26. #pragma config WDTPS = PS1048576        // Watchdog Timer Postscaler (1:1048576)
  27. #pragma config WDTSPGM = STOP           // Watchdog Timer Stop During Flash Programming (WDT stops during Flash programming)
  28. #pragma config WINDIS = NORMAL          // Watchdog Timer Window Mode (Watchdog Timer is in non-Window mode)
  29. #pragma config FWDTEN = OFF              // Watchdog Timer Enable (WDT Disabled)
  30. #pragma config FWDTWINSZ = WINSZ_25     // Watchdog Timer Window Size (Window size is 25%)
  31. #pragma config DMTCNT = DMT31           // Deadman Timer Count Selection (2^31 (2147483648))
  32. #pragma config FDMTEN = ON              // Deadman Timer Enable (Deadman Timer is enabled)
  33.  
  34. // DEVCFG0
  35. #pragma config DEBUG = OFF              // Background Debugger Enable (Debugger is disabled)
  36. #pragma config JTAGEN = OFF             // JTAG Enable (JTAG Disabled)
  37. #pragma config ICESEL = ICS_PGx1        // ICE/ICD Comm Channel Select (Communicate on PGEC1/PGED1)
  38. #pragma config TRCEN = ON               // Trace Enable (Trace features in the CPU are enabled)
  39. #pragma config BOOTISA = MIPS32         // Boot ISA Selection (Boot code and Exception code is MIPS32)
  40. #pragma config FECCCON = OFF_UNLOCKED   // Dynamic Flash ECC Configuration (ECC and Dynamic ECC are disabled (ECCCON bits are writable))
  41. #pragma config FSLEEP = OFF             // Flash Sleep Mode (Flash is powered down when the device is in Sleep mode)
  42. #pragma config DBGPER = ALLOW_PG2       // Debug Mode CPU Access Permission (Allow CPU access to Permission Group 2 permission regions)
  43. #pragma config SMCLR = MCLR_NORM        // Soft Master Clear Enable bit (MCLR pin generates a normal system Reset)
  44. #pragma config SOSCGAIN = GAIN_2X       // Secondary Oscillator Gain Control bits (2x gain setting)
  45. #pragma config SOSCBOOST = ON           // Secondary Oscillator Boost Kick Start Enable bit (Boost the kick start of the oscillator)
  46. #pragma config POSCGAIN = GAIN_2X       // Primary Oscillator Gain Control bits (2x gain setting)
  47. #pragma config POSCBOOST = ON           // Primary Oscillator Boost Kick Start Enable bit (Boost the kick start of the oscillator)
  48. #pragma config EJTAGBEN = NORMAL        // EJTAG Boot (Normal EJTAG functionality)
  49.  
  50. // DEVCP0
  51. #pragma config CP = OFF                 // Code Protect (Protection Disabled)
  52.  
  53. // SEQ3

Egy külső 24MHz-es órajelgenerátorról jár az OSCI lábra kötve. Elvileg 200MHz-en.
A hozzászólás módosítva: Feb 22, 2016
(#) erik60 hozzászólása Feb 22, 2016 /
 
Sziasztok, kis segítséget szeretnék kérni! Nem régiben elkezdtem PIC mikrovezérlőkkel foglalkozni...
grafikus LCD-t szeretnék kezelni... de sehogyan nem jutok vele semmire
KS0108-as chippel ellátott kijelzőket kezdtem el nézegetni... a driverig eljutottam....
CCS C-t fordítót használok!
A hozzászólás módosítva: Feb 22, 2016
(#) Wezuv válasza Droot hozzászólására (») Feb 23, 2016 /
 
Szia! Első körben az:
  1. int cnt = 0;

helyett:
  1. volatile int cnt = 0;

írj.
Ez fontos, ha megszakításból is akarsz kezelni egy változót. Ennek oka az, hogy ha nem volatile a változó, akkor azt a proci a gyorsító tárból is beolvashatja, amiben már nem biztos, hogy az van megszakításkor is, ami előtte volt. A volatile megerősítés után a program mindig a memóriából olvassa a változót, az eredeti helyéről.
A másik tippem a watchdog, ha futna...
(#) Droot válasza Wezuv hozzászólására (») Feb 23, 2016 /
 
Tenyleg, siettem es elhagytam.

A watcdog-ot leellenőrzöm!

Szerinted is jól jár a PLL 200MHz-en és a timer is 1,024ms-onként generál megszakítást?
(#) Wezuv válasza Droot hozzászólására (») Feb 23, 2016 /
 
A TCKPS<2:0> 3 bit terjedelmű, kettőt állítasz be, ha jól látom. Ha minden igaz akkor ez a 010 értéket jelenti, ami 1:4 osztás. A megjegyzésben 64-et írtál...
(#) Wezuv válasza Wezuv hozzászólására (») Feb 23, 2016 /
 
Egyébként, ha pontos 1ms-et akarsz, akkor jobb lenne a PBDIV 1:32, TMR2 pre 1:2, és a PRx 3125.
(#) pajti2 válasza Wezuv hozzászólására (») Feb 23, 2016 /
 
Biztos kell oda az a volatile? A gcc application category processzoroknál ugyan megcsinál olyat, hogy egy memóriaváltozót write-back cache-el regiszterekben - azt tiltja a volatile - de itt csak pic-ről van szó, és a hozzá alakított c fordító gyártja a programot. Pláne az a cnt csak a megszakítási rutinban van használva.
(#) Wezuv válasza pajti2 hozzászólására (») Feb 23, 2016 /
 
Teljesen pontosan nem tudom, mit csinál a fordító, de nekem már volt olyan, hogy csak ültem és nem értettem miért változik meg egy változóm értéke és ez volt a megoldás. A változó a megszakításban is és a fő ciklusban is változhatott.
Itt jelen esetben lehet, hogy nem ez a baj(mivel csak a megszakításban változik), sőt már kiderült, hogy más okozza az eltérést, de jobb megelőzni a bajt szerintem.
(#) Droot válasza Wezuv hozzászólására (») Feb 23, 2016 /
 
Köszi!
Így jobb az 1ms.
(#) icserny válasza pajti2 hozzászólására (») Feb 23, 2016 /
 
A volatile módosító azért kell, hogy a fordító ne akarja kioptimalizálni a változó beolvasását, és ne feltételezze, hogy annak a tartalma nem változott meg a legutóbbi kiolvasás óta. A volatile kiírása olyan változókhoz kell, amelyek megszakítási szinten vagy hardveresen módosulhatnak.
(#) Attila86 hozzászólása Feb 23, 2016 /
 
Használ valaki ICD3-at? A gyakorlatban miben különbözik a PICkit3-tól? Egyszer használtam, akkor is távvezérelt gépen keresztül (TeamViewer), és annyi tűnt csak fel hogy jóval gyorsabb. Próbáltam utánaolvasgatni de nagyjából annyit találtam csak hogy jobb debuggolásban. De mi az hogy jobb? Több töréspontot enged mint a három? Vagy stabilabb a működése? Nem olyan bugos? (A PICkit3+MPLABX ugye néha csinál hülyeségeket...)
Gondolom csak jónak kell lennie hiszen sokkal-sokkal drágább mint a PICkit3. Bár olyat is olvastam már hogy nem is jobb.
(#) Zsolt2 válasza Attila86 hozzászólására (») Feb 24, 2016 /
 
En eddig csak annyit tapasztaltam, hogy menet kozben is lehet torespontokat betenni az ICD3-nal, mig a pickit3-nal csak forditas elott lehet megadni torespontokat.
(#) Wezuv válasza Attila86 hozzászólására (») Feb 24, 2016 /
 
Sokkal gyorsabb, sokkal stabilabb(bár a PK3-al se volt sok gondom) és a hibakeresés nagyságrendekkel gyorabban megy, nem csak azért, mert az egy lépés is gyorsabban lefut, hanem azért, mert a max 6 megszakítási pontot bárhová teheted menet közben is (bár van, mikor időkritikus részek lefagynak a megszakítási pont kirakásakor, de ezen egy reset segít, nem kell újra programozni miatta.). Ha gyorsan kell valamivel elkészülni, akkor meghozza az árát, de ha csak egyszerűen telik rá, akkor nagyszerű érzés vele programozni a PK3 után.
(#) pajti2 hozzászólása Feb 24, 2016 /
 
@Wezuv, Droot:

Valamikor egy hónappal ezelőtt nézelődtetek pic sqi / sd kártya területen. Megkérdezhetem, milyen sikerek születtek vele? Működött, nem működött, félbehagyódott?

Ha voltak vele működő kísérletek, és véletlenül a fogyasztását is mértétek, érdekelnének arról kísérleti értékek, hogy milyen sebességgel volt folyamatosan kezelve (írás / olvasás), és azzal a sebességgel milyen fogyasztása volt? Amiket doksiban erről találtam, ott 10 mA-től 100 mA-ig minden létező érték előfordul ugyan arra a sebességre (class 10 kártyák, 10 megabyte / sec folyamatos átvitel), ami kicsit gyanús nekem.
A hozzászólás módosítva: Feb 24, 2016
(#) Wezuv válasza pajti2 hozzászólására (») Feb 24, 2016 /
 
Folyamatban van egy panel beültetése, amin SQI-t kötöttem az SD-re, ha lesz valami fejlemény jelzem.
A szűk keresztmetszet az lehet, hogy hová tölthetem hasonló sebességgel az adatokat, amit kiolvasok. (elvi max 25MBájt/sec, ha 50MHz et veszem és a 4 bites szélességet) Ha Ethernetre nyomom, az is max 8MB/sec. Az a 512k RAM nagyon hamar megtelik, meg aztán kicsit hiábavaló is memóriába olvasással tesztelni egy átvitelt. Egyetlen gyorsabb periféria a TFT 16bites PMP busza, igazából azért is próbálom ki az SQI-t, hogy az SD-ről milyen gyorsan lehet áttolni egy képet. Ebből már lehetne egy max sebességet kalkulálni. Ha 10MHz-el hajtom a PMP-t, akkor az kb. 20MB/sec. Ennek fele is álomszép lenne...
(#) Droot válasza pajti2 hozzászólására (») Feb 24, 2016 /
 
Szia!

Én még csak a PMP-vel foglalkoztam, ezt hajnalban összeröffentettem. Egyenlőre még csak 8 bites módban. Most afelől nézelődök, hogy van-e értelme 16 bites módban működtetni.
(#) Wezuv válasza Droot hozzászólására (») Feb 24, 2016 /
 
Azt hogy érted, hogy érdemes-e? Minden pixel 16bitből áll. Minden képpont x,y pozíció adat is legalább két bájtos, úgy is kell megadni, ha jól emlékszem. Naná, hogy érdemes!
(#) pajti2 hozzászólása Feb 24, 2016 /
 
Január 3 óta vadászom a pic32mz/da család információit. Egészen mostanáig húzódott, de már totál zsákutca. Írtam egy ticketet mc supportra, ott azt válaszolták, kérdezzem meg a sales-t (merthogy a developerek nem tudják..). A sales (microchipdirect) azt válaszolta, kérdezzem meg a területileg illetékes sales-t. Amikor rámutattam nekik, hogy ők azok, azt válaszolták az angol levelezésben, hogy hívjam fel őket telefonon - Ausztriában. Lévén németül nem tudok annyira, részemről letettem róla. Ha hall bárki bármit bárhol véletlenül, jelezze. A nyomozás faillal végződött.
(#) Droot válasza Wezuv hozzászólására (») Feb 24, 2016 /
 
Igen, ezt már átgondoltam. Most azt próbálom majd ki, hogy hogy lesz jó.
A sysreg-ben az MCUIF-ben 16 bitesre kell átállítanom az interfacet.
Most a 8 biten már működő beállításokkal átállítottam 16 bitesre a kommunikációt és pl a háttérvilágítás halványabb lett.

Egyébként ez az RA8875 nagyon tetszik, nem pixelenként kell grafikai elemeket kirajzolni hanem minden benne van. Pl még a szögletes sarkokat is le tudja kerekíteni. Csak megadom neki a két átló koordinátáját és a rádiuszt. Persze lehet hogy más kontrollerek is tudják és csak nekem új.
(#) Droot válasza pajti2 hozzászólására (») Feb 24, 2016 /
 
De miért ennyire fontos hogy mennyi áramot fogyaszt?
Ez a 100mA maximum amit mondtál tény, változtatni úgysem tudsz csak valami más rovására.
Vagy az SQI konfigurálással van gond?
Következő: »»   1210 / 1319
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