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   988 / 1207
(#) pajti2 válasza don_peter hozzászólására (») Nov 2, 2017 /
 
Az adatlap szerint rtc kér legalább 2.3v-ot, a ram cellák 1.75v-ig nem törlődnek. Nem igazán érthető a problémád.
(#) usane válasza don_peter hozzászólására (») Nov 2, 2017 /
 
Én sem igazán értem, hogy mi a gond. Táp nélkül semmi nem működik. Hogy ez egy külön lábon, vagy a tápra kell az már más tészta. Ha az a hond, hogy nincs BATT kivezetése hát ez van. Úgy emlékszem van olyan Pic aminek van battery lába, ennek nincs. Nem egy ördöngösség egy elemleválasztó tápáramkör.
(#) don_peter válasza usane hozzászólására (») Nov 2, 2017 /
 
Nincs gond.. Tudsz ilyen áramkört mutatni?
Egyelőre kikísérletezem az RTC-vel, de nem akar rendesen működni..
Gyári beállításokat és példát használom..
(#) picipic válasza pajti2 hozzászólására (») Nov 2, 2017 /
 
Kimásoltam egy oktató progiból egy saját delay részt.
Eléggé lecsökkentve az idő értékeket, a LED kigyújtások sorba rendben mennek de:

Stopperrel mérve 13-14 másodperc a két LED közötti idő.
Debugger Stopwatch ablakában ugyanez az idő: 175 us
Bődületes különbség. 13 másodperc és 175 mikrosec.
Ennyit jelentene az optimalizálás hiánya? A Lite verzióval vacakolok.

Egyszerűbb lenne itt berakni egy assembler észt csak a késleltetésre.
(#) hapci válasza don_peter hozzászólására (») Nov 2, 2017 /
 
Ennél egyszerűbb aligha van: DS01146B (Microchip) Page 2-6 "TIP #7 Battery Backup for PIC MCUs"
(#) pajti2 válasza picipic hozzászólására (») Nov 2, 2017 /
 
Semmi baja a C Lite-nak, és nem, amit vizsgálsz, az nem az optimalizálás hiánya, hanem a helytelen kódolásé. Ha 175 usec időt számol ki egy C logika, akkor lehet, hogy mire asm lesz belőle, már jóval több lesz, de kizártnak tartom, hogy 800 usec fölé mehetne akár legdurvább esetben. Ott már az történhetett, hogy megszakításokat kapott, és arra ment el a cpu idő. És igen, ha jól akarod csinálni, a delay-t nem C-ben írod, hanem asm-ben. Csak asm-ben tudod megszámolni az órajeleket. De még csak nem is az a legjobb gyakorlat, ha interruptokat használsz a design-ban, mert olyankor timert kell felprogramoznod, és aszinkron azzal mérni az időt. Vagy külső időzítő áramkör + interrupt, ha sűrűn váltogatsz órajelet, és attól független pontos idő kell.
(#) nagym6 válasza pajti2 hozzászólására (») Nov 2, 2017 /
 
Néhány basic és egy c fordítóval játszogattam már -amatőr szint- de ez az időzítés dolog probléma nélkül ment mindegyiken. Tehát a program elején megadva az osc frekvencia, és a delay utasítások pontosan hajtódtak végre. Itt valami egyszerű okra tippelnék.
(#) Ashen16 hozzászólása Nov 2, 2017 1 /
 
Sziasztok!

Segítséget szeretnék kérni, egy adc példaprogramra lenne szükségem C8051F320-ra! Ha valaki tudna egyet mellékelni, azt nagyon megköszönném!
(#) nedudgi válasza Ashen16 hozzászólására (») Nov 2, 2017 1 / 4
 
(#) don_peter válasza hapci hozzászólására (») Nov 3, 2017 /
 
Köszi, azt hittem komolyabb kapcsolás kell hozzá.. Ez így túl egyszerűnek hat...
(#) cross51 válasza nedudgi hozzászólására (») Nov 3, 2017 /
 
nedugi, ez nagyon frappáns
(#) don_peter válasza nedudgi hozzászólására (») Nov 3, 2017 /
 
Ehhh, teee Nagyon jó...
(#) usane válasza don_peter hozzászólására (») Nov 3, 2017 /
 
Ezért mondtam, hogy mi ebben a bonyolult? 2 dióda az egész. Ha meg 3.3V a táp akkor semmi sem kell, és még tölti is az elemet. Maximum egy dióda a táp felől, hogy ha nincs táp ne merítse az elemet mert ugye nem lehet tudni mevel táplálod és lehet, hogy kicsi a kimeneti ellenállása.
(#) bugyi680 hozzászólása Nov 3, 2017 /
 
Hogyan lehet kiolvasni PIC-et MPLAB IPE-vel,sikerült csatlakozni rákattintottam a Read gombra kiírta hogy kiolvasta de utána ezt hol lehet megtekinteni?
(#) Zsolt2 válasza bugyi680 hozzászólására (») Nov 3, 2017 / 1
 
File->Export - ezzel ki tudod menteni, vagy View->Memory View opcioval meg tudod nezni
(#) kriszrap hozzászólása Nov 3, 2017 /
 
Sziasztok elkészítettem egy MSGEQ7 nyáktéervét és egy pic18f46k22 el szeretném beolvastattni az adatokat sajnos nem sikerült mert minden frekvencián ugrál a ki meneti feszülstség ha bemenetre jelet adok akkor se törnténik semmise.(kijelzéskor a ledek ugrálnak).

Ezt a kapcsolást készítettem el:kapcsolás
A bekötésem :
RB4(37láb) ADC akol beolvasom az értéket.
RB2(35 láb) strobet kötöttem.
RB1(34láb) reset lábat.

A kódom igy néz ki:
  1. kezdésnek :
  2.  
  3. TRISB.RB4=1;//EQ bemenet an11
  4. ANSELB.ANSB4=1;// analog engedélyezése
  5. LATB.B4=0;
  6.  
  7. TRISB.RB1=1;
  8. TRISB.RB2=1;
  9.  
  10. LATB.RB1=0;//eq resetláb alacsony
  11. LATB.RB2=1;//eq shift(strobe) magas
  12.  
  13. void MSGEQ7meres()
  14. {
  15.   char csatorna;
  16.   LATB.RB1=1;//reset
  17.   LATB.RB1=0;//reset
  18.  
  19.   for(csatorna=0; csatorna < 7; csatorna++)
  20.   {
  21.     LATB.RB2=0; // strobe pin alacsony-kovetkezo frekv.savra valtas
  22.     Delay_us(30);
  23.     spektrum[csatorna] = ADC_Read(11); // mert ertek eltarolasa a tombbe
  24.     LATB.RB2=1;
  25.   }
  26. }

Nyáktervemet is csatolom layout-os.
Nem tudom miért nem akarja beolvasni az adatokat ha valaki tud segítsen nagyon megköszönném.

MSGEQ7.lay6
    
(#) cross51 válasza kriszrap hozzászólására (») Nov 3, 2017 /
 
Én a a TRISB.RB1/RB2-őt ha kimenetnek használod 0-ra állítanám.
De mint persze minden, ez is le van írva a doksiban, hogy adott IO akkor kimenet ha a TRISx 0
(#) kriszrap válasza cross51 hozzászólására (») Nov 3, 2017 /
 
Meg változtattam de a probléma meg maradt...
Szerk.:ha hozzáérek ujjal az ichez el kezd jobban vibrálni a led...
Valahol log egy láb???
A hozzászólás módosítva: Nov 3, 2017
(#) cross51 válasza kriszrap hozzászólására (») Nov 3, 2017 /
 
Az ADC_Read mit csinál?
(#) kriszrap válasza cross51 hozzászólására (») Nov 3, 2017 /
 
Beolvassa feszultseget 1024 biten
(#) cross51 válasza kriszrap hozzászólására (») Nov 3, 2017 /
 
Pontatlanul fogalmaztam, a nevéből gondoltam, arra gondoltam, hogy valóban azt csinálja amit te akarsz channel switch, cap charge time delay és konverzió, eleve ADC rendesen beállítva? pl mekkora órajelen jár a PIC mert ha 64MHz-en akkor aszerint kell a beállítani az ADC-t.
Ennek a kódnak mennie kell, nálam 1-2 éve működött.
(#) kriszrap válasza cross51 hozzászólására (») Nov 3, 2017 /
 
Rendben akkor hardveres problémára gyanakszom akkor ...
Nyáktervem jó ??(szerintem ez már off)
A hozzászólás módosítva: Nov 3, 2017
(#) cross51 válasza kriszrap hozzászólására (») Nov 3, 2017 /
 
Én nem sprint-eztem soha nem is akarok, eagle vagy altium amiről tudok neked mit mondani.
A mikrofon jól van bekötve, vagy nem is mikrofonnal használod?
Nekem így nézett ki mikor használtam csak kapott egy ebay-es mátrixot MAX7219-el.

msgeq.png
    
(#) kriszrap válasza cross51 hozzászólására (») Nov 3, 2017 /
 
Nem mikrofonnal ... Csak szimpla audio jel erosites nelkul. 200k helyet 220k vant bent es te elhagytad a bemeneti kondit es ellenalast. Lehet en is elhagyom...
(#) picipic hozzászólása Nov 4, 2017 /
 
Mindenféle delay variációnál hasonló gondom van.
Ha az itt bemásolt proginál megoldódna a rejtély, a többinél is egyenesbe jönnék.

  1. #define _XTAL_FREQ 4000000
  2. #include <htc.h>
  3. __CONFIG( WDTE_OFF &  PWRTE_ON & MCLRE_ON & BOREN_OFF & LVP_OFF &  CPD_OFF & CP_OFF);
  4. void delay_ms_uj(unsigned int mennyit);
  5.  // Műx. de kb 8 mp után gyullad ki az első LED,
  6. // és 5 másodperc egy ciklus,
  7. // azaz két LED kigyulladás között eltelt idő..
  8. // Debuggerben egy ilyen ciklus 178 us-t mutat!!!!!!!!!!!!!!!!
  9. // A "PORTB=i;"sornál van a Brakepoint.
  10. // A delay sorokban, az értékeket folyamatosan csökkentettem, hogy rövidítsem a késleltetéseket.
  11. //----------------------------------------------------------------------------
  12. void main()
  13. {
  14.            unsigned char i;
  15.            TRISB=0b00000000;    // PORTB minden lába kimenet
  16.                    i=0;
  17.                    ugorjunk_ide_vissza:
  18.            PORTB=i;
  19.            delay_ms_uj(2);
  20.                    i=i+1;
  21.                    if (i==16) i=0;
  22.                    goto ugorjunk_ide_vissza;
  23. }
  24. //----------------------------------------------------------------------------
  25. void delay_ms_uj(unsigned int mennyit)
  26. {
  27.            unsigned int szamol;
  28.          
  29.            for (szamol=0; szamol<mennyit; szamol++)
  30.            {
  31.                __delay_us(2);
  32.              
  33.            }
  34.  }
(#) _BiG_ válasza picipic hozzászólására (») Nov 4, 2017 /
 
Feleslegesen használsz unsigned int-et, ott ahol egy unsigned char változó tárolókapacitását sem éri el a tárolt érték. 8 bites processzoron az 1 byte-nál hosszabb változók kezelése csak kerülő úton történhet, mert egyszerre csak 1 byte-ot tud mozgatni/feldolgozni. Te itt feleslegesen tölteted be meg tároltatod le és hasonlítod össze az int típusú változód felső byte-ját.
Csak olyan típusú és hosszúságú változót használj (ügyelve az előjel szükségességére, ha kell), amire tényleg szükséged van. Különben feleslegesen dolgoztatod a procit, meg a kódod lesz hosszú.

A goto-t meg felejtsd el. Egy while ciklus tökéletesen megfelel.
(#) kriszrap hozzászólása Nov 4, 2017 /
 
Azt deritettem ki hogy ha nincs semmi se adc végén és be kapcsolom a picen adc és mérek vele akkor mv os eltéréseket mérek. Tippem az lenne hogy a tápot nem szűröm eléggé (lm7805 utánna 100nf )
Ezért azt gondolom hogy a MSGEQ7 nem tud rendesen müködni .
Szerintetek hülyeség??
(#) don_peter hozzászólása Nov 4, 2017 /
 
Srácok pár napja már kínlódom 32MX795 RTCC beállítással, de sehogyan nem sikerül..
Szkóppal mérve a kristály 200KHz-es jelet produkál, nem értem miért mikor 32KHz-es óra kvarc.
Más hardverben teszteltem a kristályt, ott hozza a megfelelő értéket, vissza rakva ismét 200KHz-en jár... 10pF-os kondikat használok hozzá, ha leveszem ugyan olyan, tehát nem sok vizet zavar, de ez az ajánlott kapacitás.

Hardveres problémát, így kizárnám, ott mindennek klappolnia kell.
Szoftveres problémára gyanakszom.., csatolom a gyári példaprogramot, e szerint vacakolok, de másodperces számolás helyett, 6-12-esével ugrál a számolás 1 másodperces ciklusonként.
Lemértem...

A header beállításaim:
  1. /**********************
  2.  * Configuration Bits *
  3.  **********************/
  4. #pragma config UPLLEN   = ON            // USB PLL Enabled
  5. #pragma config FPLLMUL  = MUL_20        // PLL Multiplier
  6. #pragma config UPLLIDIV = DIV_2         // USB PLL Input Divider
  7. #pragma config FPLLIDIV = DIV_2         // PLL Input Divider
  8. #pragma config FPLLODIV = DIV_1         // PLL Output Divider
  9. #pragma config FPBDIV   = DIV_1         // Peripheral Clock divisor
  10. #pragma config FWDTEN   = OFF           // Watchdog Timer
  11. #pragma config WDTPS    = PS1           // Watchdog Timer Postscale
  12. #pragma config FCKSM    = CSDCMD        // Clock Switching & Fail Safe Clock Monitor
  13. #pragma config OSCIOFNC = OFF           // CLKO Enable
  14. #pragma config POSCMOD  = HS            // Primary Oscillator
  15. #pragma config IESO     = OFF           // Internal/External Switch-over
  16.  
  17. #pragma config FSOSCEN  = ON            // Secondary Oscillator Enable
  18.  
  19. #pragma config FNOSC    = PRIPLL        // Oscillator Selection
  20. #pragma config CP       = OFF           // Code Protect
  21. #pragma config BWP      = OFF           // Boot Flash Write Protect
  22. #pragma config PWP      = OFF           // Program Flash Write Protect
  23. #pragma config ICESEL   = ICS_PGx2      // ICE/ICD Comm Channel Select
  24. #pragma config DEBUG    = OFF           // Debugger Disabled for Starter Kit
  25.  
  26. #define SYS_FREQ                (80000000L)
Többi a példaprogramban amit csatoltam...

Mit nézek be?
Mi lehet a gond?
Előre is köszi..

time_date.c
    
(#) pajti2 válasza don_peter hozzászólására (») Nov 4, 2017 / 1
 
A mindennek klappolnia kell egy kicsit erős, amikor nyilvánvalóan nem klappol

Az egyik legnagyobb szivacs pic32-nél a cache line-ok esete. Amikor újraprogramozod, konkrétan ki is kell kapcsolni utána, resetelni nem elég.

A szkópot rakd félre, programozni kellene. Állítsd be a timerre a second jelet, oszd le 32k-val, és kapcsolgass vele ledet. Ha 1 sec ütemenként kapcsol be / alszik ki, akkor csak hisztéria áldozata lettél.

Ha kísérletezel, és csak programot linkelsz, akkor olyan hardveren kellene tesztelned, hogy a kapcsrajz amiatt legyen biztosan fix. Pld ha a 32mx795-öt nyüstölöd, egy ubw32-esednek lennie kellene otthon mx795-el (usb tápos, rajta van a kettő kvarc, és teszt ledek meg gombok is). Anélkül ne számíts túl sok segítségre. Mindig mindenki azt hiszi, márpedig biztos nem kötött félre semmit, biztosan nem szakadtak a vezetékei, nincsenek örvidzárak / átvezetések, nem selejtesek a szűrő kondijai, nem hulladék a tápegysége, biztos nem figyelmetlenkedtek el semmit se, de nagy arányban az derül ki, hogy nincsenek olyan figyelmesek a népek, mint amilyennek hiszik magukat.
(#) don_peter válasza pajti2 hozzászólására (») Nov 4, 2017 /
 
UBW32-őt használok, gyári kapcsolást, mindig ezen fejlesztem a proto programokat..
Kondikat levettem és kimértem, mindegyik 10pF, nem írtam volna, hogy külön teszteltem, ha nem történt volna meg. Kristályt is kivettem és teszteltem.. Vezetők átnézve és kontakt kizárva, PIC lábai érintkeznek minden kivezetésen.
PIC 8MHz-es és egy 32KHz-es kristállyal van szerelve, az elsődleges kristállyal nincs gond, szépen tudom használni és pontos. A másodlagos 32KHz-es, illetva az RTC-t nem tudom beállítani, nem működik a gyári függvényeivel. 6-12másodperceket ugrál az 1másodpercre beállított while ciklusomban. Szóval ezt nem értem és ezért dobtam be a header fájlomat és a példa progit, hátha valaki ki tudja próbálni, ha másnál megy, akkor nem szoftveres a hiba és valami nem oké amit nem veszek észre, de mivel mindent műszerrel és szkóppal is átmértem, úgy gondolom, hogy valami szoftveres beállításom nem jó..
Következő: »»   988 / 1207
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