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   872 / 1209
(#) kissi válasza Bell hozzászólására (») Nov 7, 2016 /
 
Szia!

Még a WatchDog megy, de lehet, hogy ez ébresztgetné a SLEEP-ből ( az idézet program alapján felesleges!), ill. altatásnál figyelj a perifériák állapotára !
A hozzászólás módosítva: Nov 7, 2016
(#) Pali79 válasza Bell hozzászólására (») Nov 7, 2016 /
 
Sleep állapotban a 20 uA picit soknak tűnik, max. 3 uA körül kellene lennie, leglábbis nekem 16F886-nál 3V-os elemről, nálam sleepnél csak a Timer1 megy külső kavicsról.
(#) nedudgi válasza Bell hozzászólására (») Nov 7, 2016 /
 
Az alvás alatt vedd le az órajelet a minimumra. Utána persze várni kell, amíg beáll.
A hozzászólás módosítva: Nov 7, 2016
(#) f2f2 válasza attika hozzászólására (») Nov 7, 2016 /
 
Egy szóval se mondtam, hogy a PIC el pont ugyanolyan izzítást szeretnénk elérni,
mint amit a vezérlő több paraméter alapján létrehoz.
Olyan egyszerű megoldás is megfelel a tulajnak, hogy be tudja indítani az autóját
a télen, ha már kicseréltette az összes izz.gyertyát.
Erre kérném mi lenne a legegyszerűbb PIC program ?
Táp megvan PIC start egy kiszemelt portkivezetésen 5V jel
és 30sec után e portkivezetés nullázza a jelet és alvás.
Kössz
Esetleg felteszek egy kapcsolót, amivel az izzítás opcionális.
(#) Pali79 válasza f2f2 hozzászólására (») Nov 7, 2016 /
 
Idézet:
„Táp megvan PIC start egy kiszemelt portkivezetésen 5V jel és 30sec után e portkivezetés nullázza a jelet és alvás.”
Ezt pont így tudod megoldani. Mi a kérdés?
(#) f2f2 válasza Pali79 hozzászólására (») Nov 7, 2016 /
 
Hát hogy programilag, hogy nézne ki ez egy 16F84A vagy 16C711
esetleg 18F26K22 (,de ezt végszükségben áldoznám erre).
komplett hex , assembler oké , C+ momentán nincs telepítve.
Kössz.
(#) attika válasza f2f2 hozzászólására (») Nov 8, 2016 /
 
Egy 30mp-s időzítéshez teljesen fölösleges 16f,18f, erre akár egy filléres 12f is megfelelne.
Még halál pontos időzítés se kelhet neked, bőven elég a belső oszcillátora is.
Vagy ezt szerintem még egy sima 555-el is meg lehetne valósítani.
A hozzászólás módosítva: Nov 8, 2016
(#) gyoran válasza attika hozzászólására (») Nov 8, 2016 /
 
Hát igen, az 555 kb tizedébe kerül mint a legolcsóbb pic.
Kell ugyan még pár alkatrész köré, de akkor is olcsóbb. Viszont eszembe jutott pár dolog. Gyenge akkumulátorral ugrál a tápfesz, ehhez kellhet mindkettőhöz egy tápegység IC, a PIC-nek mindenképp, az 555 talán elmenne egy dióda + elkó leválasztással. Ha kellene hőmérsékletfüggés, azt is meg lehet mindkettővel csinálni, talán az 555-tel egyszerűbben. Mindkettőnek a kimenetére kell valami meghajtó ha relét kapcsol.
A PIC-nek nincs sok előnye, talán csak akkor, ha az ismételt izzítást mondjuk 1 percig le akarod tiltani. Ja és a PIC nagyobb kihívás .
(#) attika válasza gyoran hozzászólására (») Nov 8, 2016 /
 
Sajnos attól, hogy kiírjuk azt, hogy PIC attól még ez a téma igencsak off ehhez a topichoz és seggbe fognak ezért billenteni minket
Én már az elején se igazán értettem a kérdezőt, hogy neki elég csak egy sima időzítő ami 30mp után lekapcsolja a kimenetet. Igen sok kérdés felmerül itt mint például amit te is írtál.
Idézet:
„A PIC-nek nincs sok előnye, talán csak akkor, ha az ismételt izzítást mondjuk 1 percig le akarod tiltani. Ja és a PIC nagyobb kihívás”

Az ősrégi izzító relék se izzítottak 2x ugyan annyi ideig mint pl hideg motornál.
Ha már egyszer izzított pl 20mp-ig akkor egy gyors gyújtás levétel és ismételt gyújtás ráadás esetén már nem izzított annyi ideig és mivel ezt a motort már ECU vezérli itt már sok minden befolyásolja az izzítását is. Én azért is írtam azt amit mert semmi értelmét nem látom egy ilyen motornál, hogy minden egyes indítás előtt legyen az hideg vagy meleg motor, hogy 30mp-ig kínozza szerencsétlen gyertyákat főleg, hogy üzem meleg motornál semmi értelmét nem látom egy 30mp-ig tartó izzításnak.
Idézet:
„Olyan egyszerű megoldás is megfelel a tulajnak, hogy be tudja indítani az autóját
a télen, ha már kicseréltette az összes izz.gyertyát.”

Ehhez csak annyi a véleményem, hogy ha már kicserélte az összes izzító gyertyát akkor nem kéne megölni őket egy sokszor feleslegesnek tartott 30mp-s izzítással.
Kössél be egy nyomógombot amit ha megnyom akkor megy az izzítás, ennek még mindig több értelmét látom mint az időzítésnek.
(#) kissi válasza gyoran hozzászólására (») Nov 8, 2016 /
 
Hát... PIC10F200 kb. 170 Ft, NE555 kb. 50 Ft, a PIC-nek elég egy zener és egy ellenállás tápként, utána már jöhet a kimenet, az 555-nek pár darab ellenállás és kondi + kimenet! Szükség esetén a PIC-nek csak programmódosítás, 555-nél hardver módosítás...Igaz, hogy a PIC-re programot kell írni, de ha ez nem gond, akkor szerintem nem kérdés ( ha gond, akkor 555 vagy CMOS időzítő ) !
(#) Pali79 válasza f2f2 hozzászólására (») Nov 8, 2016 /
 
Ehhez valóban elég lenne egy kisebb PIC is, de ha ragaszkodsz ezekhez a 16F84A-ra megírom neked.
A hozzászólás módosítva: Nov 8, 2016
(#) f2f2 válasza Pali79 hozzászólására (») Nov 8, 2016 /
 
A vélemények olvasása alapján megtudnád úgy írni a programot,
hogy figyeljen egy porton, hogy érkezik e egy pillanatnyi letestelés (nyomogomb adná)
és ha igen majd elengedtem a gombot akkor 30sec es izzítást célozva egy porton 5Vra fel majd, ha letellik le.
Ne a táp megérkezését figyelje, hanem a nyomogomb hatását csak.
Nagyon megköszönném. Nem pesten vagyok itthoni cuccokból, ami nem kell
megoldanám költséghatékonyabban.
(#) Pali79 válasza f2f2 hozzászólására (») Nov 8, 2016 /
 
Persze. Akkor legyen a PIC16F84A. Ebben nincs belső oszcillátor, mekkora kvarcot teszel mellé?
(#) Bell válasza kissi hozzászólására (») Nov 8, 2016 /
 
kissi, Pali79, nedudgi,
köszönöm a tippeket!
A kimenetek szabadon, a bemenetek L szinten, a perifériák kikapcsolva, a táp 5V.
Továbbra is 20 mikroamper SLEEP-ben, amit a WDT fog ébresztgetni, de WDT nélkül is annyi.
31KHz-től 32 MHz-ig mindent próbáltam, de hatására csak éber állapotban változik az áramfelvétel.
(#) cmdnetwizard hozzászólása Nov 8, 2016 /
 
Sziasztok!

Egy picit elakadtam, és a segítségeteket szeretném kérni.
Van egy PIC18F26K22-esem, meg egy xc8 fordítóm, meg egy ilyen kódom:
  1. #define _XTAL_FREQ (20000000ULL)
  2. [...]
  3. void main(void) {
  4.     __delay_sec(5);
  5.     //const char *str = "Hello World!";
  6.     TRISBbits.TRISB6 = 0; //TX pin set as output
  7.     TRISBbits.TRISB7 = 1; //RX pin set as input
  8.     unsigned char config =  USART_TX_INT_OFF |
  9.                             USART_RX_INT_OFF |
  10.                             USART_ASYNCH_MODE |
  11.                             USART_EIGHT_BIT |                
  12.                             USART_CONT_RX |
  13.                             USART_BRGH_LOW;
  14.     //unsigned int baud = _XTAL_FREQ / (9600 * 16) - 1;
  15.     Open2USART(config, 129);
  16.     baud2USART(BAUD_8_BIT_RATE | BAUD_AUTO_OFF);
  17.     [...]
  18. }

Minden próbálkozásom, és google barátom ellenére nem sikerült életet lehelnem az UART-ba, viszont arra már rájöttem, hogy a gondot az okozhatja, hogy valamit rosszul állítok be, mert a Busy2USART függvényben az első elküldött bájt után kiakad (pontosabban a while(Busy2USART()); ciklus végtelennek tűnik), valamint amikor rámértem a PICkit 2 Logic tool-jával, akkor a TX2 lábán egy kb 37 kHz-es órajelet kapok (Ld.: melléklet). És ez számomra érthetetlen.
Valaki esetleg fel tudná hívni a figyelmemet arra, hogy ezt miért produkálja a chip?

Előre is köszönöm!
A hozzászólás módosítva: Nov 8, 2016

uart.PNG
    
(#) Pali79 válasza Bell hozzászólására (») Nov 8, 2016 /
 
Idézet:
„A kimenetek szabadon”
Ez mit is jelent pontosan? A kimenetnek törölni kell sleep előtt. Ha csak ennyi a program tedd fel a hex-et, megnézem valamikor. Lehet valami disznóságot fordít bele.
(#) Hp41C válasza cmdnetwizard hozzászólására (») Nov 8, 2016 /
 
Nézd meg (töltsd fel) a disassembly ablakban, mit fordít a könyvtári függvényekből.
(#) cmdnetwizard válasza Hp41C hozzászólására (») Nov 8, 2016 /
 
Ezt pontosan hol is tudom megnézni?
(#) Hp41C válasza cmdnetwizard hozzászólására (») Nov 8, 2016 /
 
MpLab8: View / Disassembly Listing
MpLabX: pass
(#) cmdnetwizard válasza Hp41C hozzászólására (») Nov 8, 2016 /
 
No igen... MpLabX-em van
(#) Zsolt2 válasza Hp41C hozzászólására (») Nov 8, 2016 /
 
MPLABX: Window->Debugging->Output->Disassembly Listing File
(#) kissi válasza Bell hozzászólására (») Nov 8, 2016 /
 
Szia!
Most néztem meg az adatlapját !

WDT-vel 20 uA, de ha PIC12F1822 helyett PIC12LF1822-t tennél bele, akkor 1 uA alatt lennél WDT mellett !

szerk.: 390.oldal Bővebben: Link
A hozzászólás módosítva: Nov 8, 2016
(#) cmdnetwizard válasza Zsolt2 hozzászólására (») Nov 8, 2016 /
 
Ezekből nem igazán derült ki számomra semmi.

Valakinek egyébként van ötlete arra, hogy hogyan lehet életet lehelni az uartba ennél a procinál?
(#) Bell válasza Pali79 hozzászólására (») Nov 8, 2016 /
 
Úgy értem a szabadon-t, hogy nincs rákötve semmi. Mellékeltem az lst fájlt is.
Nem tűnik problémásnak.
  1. 1:                     #include <xc.h>
  2. 2:                     #pragma config CPD = OFF, BOREN = OFF, IESO = OFF, FOSC = INTOSC, FCMEN = OFF, MCLRE = OFF, WDTE = ON, CP = OFF, PWRTE = OFF, CLKOUTEN = OFF, PLLEN = OFF, LVP = OFF
  3. 3:                     void main(void)
  4.    7F2    3058     MOVLW 0x58
  5. 4:                     {
  6. 5:                             OSCCON = 0b01011000; // 1MHZ
  7. 6:                             TRISA = 0b00011000;
  8.    7F5    3018     MOVLW 0x18
  9.    7F6    008C     MOVWF 0xc
  10. 7:                             LATA = 0x00;
  11.    7F7    0022     MOVLB 0x2
  12.    7F8    018C     CLRF 0xc
  13. 8:                             OPTION_REG = 0b10000111;
  14.    7F9    3087     MOVLW 0x87
  15.    7FA    0021     MOVLB 0x1
  16.    7FB    0095     MOVWF 0x15
  17. 9:                             while(1)
  18.    7FC    0063     SLEEP
  19.    7FD    2FFC     GOTO 0x7fc
(#) f2f2 válasza Pali79 hozzászólására (») Nov 8, 2016 /
 
Pali Itthon 4Mhz van csak. Azzal megtudod ? Kössz
(#) Hp41C válasza cmdnetwizard hozzászólására (») Nov 8, 2016 /
 
A válaszaidból nem tudunk semilyen információt sem kihámozni.....
Máskép teszem fel a kérdést: Milyen érték kerül a RCSTA2 regiszterbe?
Az aszinkron mód TX láb (RB6) szinkron módban pontosan a CK2 azaz a szinkron órajel...

Az adatlap Table 16-3 táblázata szerint szinkron módban az órajel Fosc / (4*(n+1)) frekvenciájú: 20 000 000 / (4 * (129 + 1)) = 5 000 000 / 130 = 38461,538461538461538461538461538 [Hz]
A hozzászólás módosítva: Nov 8, 2016
(#) Pali79 válasza f2f2 hozzászólására (») Nov 8, 2016 /
 
Persze, igazából mindegy csak tudjam, mert abból kell számolni.
(#) cmdnetwizard válasza Hp41C hozzászólására (») Nov 8, 2016 /
 
Nem sikerült sok mindent kihalásznom belőle, konkrétan semmit, mert ennyire nem értek hozzá, de csatolom mellékletbe, hátha ti jobban értitek...

Apropó... Azt hiszem, hogy azt még nem említettem, hogy aszinkron módban szeretném használni az UART-ot.
A hozzászólás módosítva: Nov 8, 2016
(#) cmdnetwizard válasza cmdnetwizard hozzászólására (») Nov 8, 2016 /
 
Végül sikerült megoldani úgy, hogy kiiktattam az usart library-t és megírtam a beállítást regiszterek állítgatásával...

Ha esetleg valakinek egyszer szüksége lenne a kódra:
  1. // ----------- Close UART
  2.     RCSTA2 &= 0b01001111;  // Disable the receiver
  3.     TXSTA2bits.TXEN = 0;   // and transmitter
  4.     PIE3 &= 0b11001111;   // Disable both interrupts
  5.     // ----------- OPEN UART
  6.     TXSTA2 = 0;
  7.     RCSTA2 = 0;
  8.    
  9.     TXSTA2bits.SYNC = 0;
  10.    
  11.     TXSTA2bits.TX9 = 0;
  12.     RCSTA2bits.RX9 = 0;
  13.     TXSTA2bits.BRGH = 1;
  14.    
  15.     PIE3bits.RC2IE = 0;
  16.     PIE3bits.TX2IE = 0;
  17.     SPBRG2 = spbrg;       // Write baudrate to SPBRG2
  18.     SPBRGH2 = spbrg>> 8; // For 16-bit baud rate generation
  19.     BAUDCON2 = 0;
  20.  
  21.     TXSTA2bits.TXEN = 1;  // Enable transmitter
  22.     RCSTA2bits.SPEN = 1;  // Enable receiver
(#) Hp41C válasza cmdnetwizard hozzászólására (») Nov 8, 2016 /
 
Dicséretes lépés!
Ugyanis ha nem ismerjük milyen kódot fordít az előre megírt függvénykönyvtár, nem tudjuk rendesen használni....
Az a bizonyos kutya itt van elhantolva:
  1. 37:                unsigned char config =  USART_TX_INT_OFF |
  2. 38:                                        USART_RX_INT_OFF |
  3. 39:                                        USART_ASYNCH_MODE |
  4. 40:                                        USART_EIGHT_BIT |                
  5. 41:                                        USART_CONT_RX |
  6. 42:                                        USART_BRGH_LOW;
  7. 101A  6805     SETF config, ACCESS


A logikai vagy műveletek eredménye 0xFF lett, amit a fordító egy SETF config, ACCESS utasítással el is intéz.
Azaz mégis szinkron üzemben ment az EUSART.

Az a gyanúm, hogy és maszkok vannak definiálva:
  1. unsigned char config =  USART_TX_INT_OFF &
  2.                                       USART_RX_INT_OFF &
  3.                                       USART_ASYNCH_MODE &
  4.                                       USART_EIGHT_BIT &                
  5.                                       USART_CONT_RX &
  6.                                       USART_BRGH_LOW;

lenne a helyes megoldás
A hozzászólás módosítva: Nov 8, 2016
Következő: »»   872 / 1209
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