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   607 / 1210
(#) spgabor válasza benjami hozzászólására (») Dec 18, 2014 /
 
Köszönöm neked is a segítséget, de már közben elindultam a másik irány felé.

don_peter: Hozzászólásodra reagálva áttértem HI-Tech-re hogy ha segítséget kérek/kapok, ne legyenek a fordító eltérés miatt szintaxis hibák. Viszont pár darabba így bele is ütköztem, amit most javítgatok.
(#) don_peter válasza spgabor hozzászólására (») Dec 18, 2014 /
 
Helyes
Amúgy benjami ajánlása egyelőre még bonyolult lenne, ennyi felé nem szabad elmozdulni tapasztalatból mondom ezt...
(#) don_peter hozzászólása Dec 18, 2014 /
 
Uraim, csatoltam egy képet a PICKIT2 programozómról.
Max 3.6v-os PIC-eket tudok majd vele programozni?
Elvileg gyári, bár Kínából rendeltem..
Van itthon pár 18F24K20-as PIC-em gondoltam ideje lenne megnézni mit is tud és használni.
Egy nRF8001-es Bluetooth chippel akarnám összehozni és tesztelni mivel az is 3.6v-os, így elkerülném a szintillesztést. (ez útobinál tudom, hogy az 5v-os PIC is megy 3.6v-on, de kihagynám, tanulni meg jó )
(#) usane válasza lastewer hozzászólására (») Dec 18, 2014 /
 
Idézet:
„erre kötnék rá pár fogyasztót , pl rádiót”

Na ezért kérdeztem. Egy BC tranyó nem bírja el ha kihajtod a rádiót. De még a FET-et is hűteni kellene. Inkább relével kellene kapcsolni, bár nem értem a lényegét, ha leveszed a gyujtást akkor le szokott mindent kapcsolni az autó (általában). És miért kellene erre PIC? Gyujtáskapcsolóról lehet kapcsolni 12V-os relét, ha már a gyujtáskapcsoló kevés.
(#) kissi válasza usane hozzászólására (») Dec 18, 2014 /
 
Szerintem azért erőlködik, hogy ne "szívja le" az aksit (ha a PLAZA parkolójában vagy az udvaron bekapcsolva hagyja), ha elér egy általa "tapasztalatból" megszabott szintet, akkor ne engedje tovább meríteni ! Ennek érdekében valamilyen komparátor kell, sima gyújtás nem elég!
(#) usane válasza kissi hozzászólására (») Dec 18, 2014 /
 
Lehet, de a 10V elég példajellegű. 11.9 V-nál már mélykisütött az akksi.
Elvileg 12.2V-nál már illene lekapcsolnia. 1-2 tized voltokon múlik az egész. Be kellene néznie valami akksis topikba, hogy szokták ezt mérni mielőtt bármit is PIC-el kapcsolgatna.
(#) kissi válasza usane hozzászólására (») Dec 18, 2014 /
 
Egyetértek, azért írtam, hogy "tapasztalatból megszabott szintet"
A hozzászólás módosítva: Dec 18, 2014
(#) lastewer válasza usane hozzászólására (») Dec 18, 2014 /
 
Teljesen lényegtelen ez az értékhatár , mint írtam könnyen állítható megoldás kellene rá. De ahogy kissi írta , pont azért kellene.
(#) don_peter hozzászólása Dec 18, 2014 /
 
Az én kérdésemre valaki?
Bővebben: Link
Vagy senkinek nincs pont ilyen programozója?
(#) icserny válasza don_peter hozzászólására (») Dec 18, 2014 / 1
 
Próbáld ki a PICkit2 saját programjával, hogy a VCC kimenetet le tudja- szabályozni 3,3 V-ra! Elvileg a PICkit2-vel egyenértékű klónnak kellene lennie...
"Elvileg gyári..."
Hajógyári? (gyk: ötödik dzsunkasoron balról a harmadik)
(#) don_peter válasza icserny hozzászólására (») Dec 18, 2014 /
 
Igen, gond nélkül szabályoz.. Akkor megnyugodtam.. Köszi.
Annyit még kérdeznék ezel kapcsolatban, hogy a VDD és MCLR közé ugyan úgy mehet a 10K ellenállás?
Vagy a 3.6v-os PIC-eknél másként van?
Mire kell figyelnem ami esetleg másként van mint az 5v-os PIC-nél?
A hozzászólás módosítva: Dec 18, 2014
(#) Kapagerenda hozzászólása Dec 18, 2014 /
 
Sziasztok,
A következő program azt csinálja, hogy automatikusan bizonyos időzítéssel (TMR0) a PORTD- re kirakja a retlw utasitásban lévő bináris kódokat. Pontosabban inkrementálja a PORTA bitjeit és amikor a 7 es helyértéken lévő bit aktív állapotba kerül kirakja a retlw utasítsában levő első bináris kódot (00000001) a PORTD-re. Utána rámegy a következő retlw utasításra és kirakja a b'00000010' és így tovább. Ha végig ment kezdi elölről.
Persze a valóságban nem működik, csak a hármas helyértéken lévő bit világít folyamatosan.
Esetleg valami ötlet mi lehet a hiba?
  1. cblock      0x20            
  2.            w_temp                      ; Variable at address 20h
  3.            pclath_temp                 ; Variable at address 21h
  4.            status_temp                 ; Variable at address 22h
  5.            szam                  
  6.          
  7.            endc                      
  8.            
  9. ;************************ MAIN PROGRAM **************************************
  10.      
  11.            org           0x0000        
  12.            goto          main
  13. ;************************ INTERRUPT ROUTINE *********************************
  14.        org            0x0004          ; Interrupt vector
  15.        movwf       w_temp          ; Saves value in register W
  16.        movf         STATUS          ; Saves value in register STATUS
  17.        movwf       status_temp
  18.        movf         PCLATH          ; Saves value in register PCLATH
  19.        movwf       pclath_temp
  20.        banksel     PORTB
  21.  
  22.      
  23.        banksel     PORTA
  24.        incf           PORTA
  25.                      
  26.  vissza        
  27.        banksel     INTCON          ; Selects bank containing INTCON
  28.        bcf            INTCON,TMR0IF   ; Clears interrupt flag TMR0IF
  29.        
  30.        movf         pclath_temp,w   ; PCLATH is given its original content
  31.        movwf       PCLATH
  32.        movf         status_temp,w   ; STATUS is given its original content
  33.        movwf       STATUS
  34.        swapf        w_temp,f        ; W is given its original content
  35.        swapf        w_temp,w
  36.        
  37.        bsf             INTCON,GIE      ; Global interrupt enabled
  38.        retfie                      ; Return  interrupt routine
  39.  
  40. main
  41.            
  42.            banksel       ANSEL          
  43.            clrf             ANSEL          
  44.            clrf             ANSELH        
  45.            banksel       TRISD          
  46.            clrf              TRISD                      
  47.            banksel       TRISA
  48.            clrf              TRISA
  49.            
  50.            banksel       PORTD
  51.            clrf              PORTD
  52.            banksel       szam
  53.            clrf             szam
  54.            
  55.            banksel     OPTION_REG      ; Bank containing register OPTION_REG
  56.            bcf            OPTION_REG,T0CS ; TMR0 counts pulses  oscillator      
  57.            bcf            OPTION_REG,PSA  ; Prescaler is assign to timer TMR0
  58.        
  59.            bsf            OPTION_REG,PS0  ; Prescaler rate is 1:256
  60.            bsf            OPTION_REG,PS1
  61.            bsf            OPTION_REG,PS2
  62.        
  63.            banksel     INTCON          ; Bank containing register INTCON
  64.            bsf            INTCON,TMR0IE   ; TMR0 interrupt overflow enabled
  65.            bsf            INTCON,GIE      ; Global interrupt enabled
  66.            banksel     PORTD
  67.  ide          
  68.            btfss          PORTA,7
  69.            goto          ide        
  70.            call            tabla    
  71.            movwf       PORTD
  72.            incf            szam,f
  73.            movfw       b'00000101'
  74.            btfss          STATUS,Z
  75.            goto           ide
  76.            clrf             szam
  77.            goto            ide
  78.  
  79. ;***********subrutine************************
  80. tabla              
  81.           movfw        szam
  82.           addwf        PCL,f
  83.           retlw        b'00000001'
  84.           retlw        b'00000010'
  85.           retlw        b'00100100'
  86.           retlw        b'00001000'
  87.  
  88. end


Használd a kód gombot!
-moderátor-
A hozzászólás módosítva: Dec 18, 2014
(#) ktamas66 válasza Kapagerenda hozzászólására (») Dec 18, 2014 /
 
Minek ez a sok banksel, amikor szinte minden egy bankban van ( ráadásul én még soha nem próbáltam, hogy mit kapok a banksel INTCON-ra, mivel ez minden bankban ott van ). Az viszont biztos, hogy a GIE bitet nem illik az ISR-ben piszkálni ( a retfie visszaállítja).
(#) icserny válasza don_peter hozzászólására (») Dec 18, 2014 / 1
 
Idézet:
„VDD és MCLR közé ugyan úgy mehet a 10K ellenállás?”
Igen
Idézet:
„Mire kell figyelnem ami esetleg másként van mint az 5v-os PIC-nél?”
A PICkit2 saját programját használva az automatikus típusfelismerését ne használd, mert ha azzal kezdi, hogy odalöki az 5V-ot, akkor abból nagy baj lehet. A PIC csatlakoztatása előtt célszerű a típuscsaládot kiválasztani - abból már tudni fogja a helyes tápfeszültséget.

Az MPLAB-nál arra kell ügyelni, hogy csatlakoztatás előtt a megfelelő mikrovezérlő típus legyen beállítva.
(#) don_peter válasza icserny hozzászólására (») Dec 18, 2014 /
 
Köszi az infókat..
(#) spgabor válasza don_peter hozzászólására (») Dec 19, 2014 /
 
Átírtam a kódomat közben. Csináltam gombkezelést és időzítést is. Viszont valami még mindig nem jó benne, mert a gomboknál az if-be minden esetbe belefut a programom, pedig a lenyomott gombra kellene várakoznia.
Proteusban meg összedobtam a kapcs rajzot. Viszont amikor futtatom, nem tudom hogy kell kiíratni a változók értékeit, ha lehet egyáltalán, meg nem is csinálja a kívánt funkciókat. Át tudod futni a kódom, hogy mit rontok el? Valamint csatoltam a Proteus projectet, hátha segít.
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<pic16f628a.h>
  4. #include<htc.h>
  5.  
  6. __CONFIG(WDTE_OFF & FOSC_XT & CP_OFF & LVP_OFF & BOREN_OFF & MCLRE_ON & PWRTE_ON);
  7.  
  8. int szamlalo = 0;
  9. int perc = 1;
  10. int masodperc = 3;
  11. #define GOMB_PERC_ALLIT RA1
  12. #define GOMB_MASODPERC_ALLIT RA2
  13. #define GOMB_NULLAZAS RA3
  14. #define GOMB_START RA4
  15. #define GOMB_STOP RA5
  16. #define GOMB_LEHAJTOTT_AJTO RB5
  17.  
  18. static void interrupt isr(void){
  19.     RB6 = 1;
  20.     szamlalo++;
  21.     if(szamlalo == 1000){
  22.         if(masodperc > 0){
  23.             masodperc--;
  24.         }else if(masodperc == 0 && perc > 0){
  25.             masodperc = 60;
  26.             perc--;
  27.         }else if((perc + masodperc) == 0){
  28.             TMR2IE = 0;
  29.             RB6 = 0;
  30.         }
  31.         szamlalo = 0;
  32.     }
  33. }
  34.  
  35. void stop(){
  36.     if((perc + masodperc) > 0){ //ha meg nem tellett le az ido, akkor varakozunk
  37.         while(GOMB_START){
  38.             while(!GOMB_NULLAZAS){ //ha kozben nullázunk, akkor a megszakítjuk az idozito
  39.                 perc = 0;
  40.                 masodperc = 0;
  41.             }
  42.             if(!GOMB_START){ //levilagitas folytatasa
  43.                 TMR2IE = 1; // Timer2 indítás
  44.             }
  45.             if((perc + masodperc) == 0){ //ha megallitas utan nullazzuk az idot
  46.                 break;
  47.             }
  48.         }
  49.     }else{
  50.         TMR2IE = 0; // Timer2 leállítása
  51.         RB6 = 0;
  52.     }
  53. }
  54.  
  55. int main() {
  56.     TRISA = 0xFFFF;  //A lábai bemenet lettek állítva
  57.     TRISB = 0x0000;  //B lábai kimenetekre lettek állítva
  58.     TRISB5 = 0x0000;
  59.     PR2 = 249; // Timer2 PR2 8bites periódus regiszter
  60.     T2CON = 5; // T2CON regiszter
  61.     TMR2IE = 0; // TMR2IE megszakítást engedélyez? bit (leállítva a Timer2)
  62.     PEIE = 1; // Peripheral interrupt engedélyezése
  63.     GIE = 1; // Globális interrupt engedélyezése
  64.     int tmp = 0;
  65.     tmp++;
  66.     tmp = GOMB_PERC_ALLIT;
  67.     while(1){
  68.         if(!GOMB_PERC_ALLIT){
  69.             while(GOMB_PERC_ALLIT);
  70.             perc++;
  71.         }
  72.         if(!GOMB_MASODPERC_ALLIT){
  73.             while(GOMB_MASODPERC_ALLIT);
  74.             masodperc++;
  75.         }
  76.         if(!GOMB_NULLAZAS){
  77.             while(GOMB_NULLAZAS);
  78.             perc = 0;
  79.             masodperc = 0;
  80.         }
  81.         if(!GOMB_START){
  82.             while(GOMB_START);
  83.             szamlalo = 0;
  84.             TMR2IE = 1; // Timer2 indítás
  85.         }
  86.         if(!GOMB_STOP){
  87.             while(GOMB_STOP);
  88.             stop();
  89.         }
  90.     }
  91. }

Proteus.zip
    
(#) aroxol hozzászólása Dec 19, 2014 /
 
Sziasztok!

Pic18f26k22 -ben szeretném ha a program csak akkor indulna el ha a Cp be van kapcsolva. Assemblyben programozok. Ha lehetséges akkor hogyan lehet megoldani? Vagy hogy lehetséges hogy a saját program memóriát olvassa?
A hozzászólás módosítva: Dec 19, 2014
(#) don_peter válasza spgabor hozzászólására (») Dec 19, 2014 /
 
Az első amit észreveszek, hogy a feltétel után a while() várakozó ciklusban nincs ott a felkiáltó jel.
Ez azt eredményezheti, hogy gomb felengedésénél beragadhat a feltételbe...
A többit átnézem, mindjárt..
(#) edison14 hozzászólása Dec 19, 2014 /
 
Sziasztok!

Egy LED fényerejét szeretném csökenteni és növelni PWM segítségével. A programot meg is írtam, de nem akar működni. Az adatlap alapján állítottam be mindent de a LED meg sem nyikkan. Még sosem használtam ezt a PWM-et ezért nem is tudom hogy hol akadhat el a dolog. Több mintaprogramot is kipróbáltam a netről és egyik sem akart menni.

A segítséget előre is köszönöm.

pwm_led.asm
    
(#) don_peter válasza spgabor hozzászólására (») Dec 19, 2014 / 1
 
Nagyon sok hiba van benne, nem javítottam az összeset, de jó párat helyre tettem.
A tranzisztorok működését nem árt tanulmányoznod mert fordítva kötötted be.
Te most nem PNP hanem NPN tranzisztort használsz.
Ez lehet sokat segítene neked, legalább is a kapcsolás.. (Cikkekben...ssebb)
A regiszterek 8 bitesek, így azokba maximum 0xFF mehet
A kontroller főbb regiszter beállítását sem végezted el anélkül nehéz lesz normálisan használni.
Ha egy pin-t gombként akarsz használni és a kapcsolásod jó is, akkor se felejtsd el azt a lábat bemenetre állítani...
A relé a tekercsén átfolyó áramra reagál, így erre figyelj óda mert élesben már lett volna füst.
A buzzer-t kivettem, mert nem volt jól bekötve, de hasonló képen be tudod kötni mint a relét. (vagy mint egy LED-et kapcsolgatnál, szimulátorban nem biztos, hogy meg fog szólalni ez nem azt jelenti, hogy rossz lenne a bekötés, LED-el helyettesítsd, hogy lást a működést)
A szimulátorban állíts be a kristályod Kerekijét, és a MCU sebességét is. (az alkatrészre kattints 2szer)
Az interrupt tartalmát gondold végig még egyszer mert nem jó, kezd el előröl megírni.
A megszakításrésze jó, de a perc és másodperc kezelése rossz..
A stop függvényt kivettem mert rossz és felesleges is.
A relé behúzását ne bízd az interrupt-ra mert minden lefutásnál azt is lefuttatja..
Most hirtelen ennyi...Kezd el apránként rendbe tenni.

A szimulátorban a változók értékét úgy tudod megnézni, hogy pillanat-állítod a program futását és "PIC CPU Variables" ablakra rákattintasz..
A hozzászólás módosítva: Dec 19, 2014
(#) mate_x hozzászólása Dec 19, 2014 /
 
Sziasztok!
Csatoltam egy képet a pic16F887 adatlapjából, a timer1 blokk diagramját. Miért van az, hogy az oszcillátor részben az invertert, csak akkor lehet aktiválni a T1OSCEN bittel, ha belső oszcillátort használunk órajel kivezetés nélkül? A legtöbb PIC-ben eddig olyat láttam, hogy az invertert csak simán a T1OSCEN-nel lehet aktiválni és kész, nem értem miért van ez a feltétel.
(#) cross51 válasza don_peter hozzászólására (») Dec 19, 2014 /
 
Én még ha gombról van szó nem csak a bemenetre figyelnék (ha a TRIS nincs piszkálva alapból bemenet), hanem ha olyan port a bemenet amely analog port is egyben akkor az ANSEL-el digitálisra állítani az adott lábat.
(#) mrb válasza aroxol hozzászólására (») Dec 19, 2014 /
 
Memóriából olvasni TBLRD assembly utasítással tudsz. A cp bitek a CONFIG5L regiszterben vannak, aminek a címe 300008h, DS41412F 368.oldal. vigyázz, az 1-es bit jelenti, hogy nincs cp, a 0 azt, hogy van.
A hozzászólás módosítva: Dec 19, 2014
(#) spgabor válasza don_peter hozzászólására (») Dec 19, 2014 /
 
Köszönöm a segítséget. Pár dolgot, amit írtál, azokat közben már megtaláltam és javítottam én is, de sok hasznos tanácsod írtál. Viszont már kezdem átlátni a működését..
A szimulátorban azt hittem, hogy demózás közben is tudom folyamatosan nézni az értékeket a kapcsolási rajznál. Kijavítom az összes hibát és jelentkezem, ha netalántán elakadok.
Még egyszer köszönöm!
(#) aroxol válasza mrb hozzászólására (») Dec 19, 2014 /
 
Köszönöm, ezt már néztem de valahogy nem értem. Túl kezdő vagyok hozzá. Ha szépen megkérlek letudnád nekem írni hogy néz ez ki? sajnos nem tudok angolul és így egy kicsit nehéz.
(#) don_peter válasza cross51 hozzászólására (») Dec 19, 2014 /
 
Teljesen egyet értek veled...., ezért is írtam ezt:
Idézet:
„A kontroller főbb regiszter beállítását sem végezted el anélkül nehéz lesz normálisan használni.”
(#) cross51 válasza don_peter hozzászólására (») Dec 19, 2014 /
 
Bocsánat ezen így valahogy átfutottam, csak azt vettem észre, hogy nincs írva, hogy az analog részt is beállítani.
Elnézést még egyszer a figyelmetlenségért!
(#) don_peter válasza cross51 hozzászólására (») Dec 19, 2014 /
 
Több szem többet lát, én csak örülök, ha esetleg amit elírok vagy rosszul tudok azt kijavítják, ezzel is építik a tudásom..
Itt most ez nem áll fent, de ezt nem tudhattad
(#) vilmosd válasza edison14 hozzászólására (») Dec 20, 2014 /
 
Ez a program egy 16F628 PIC-re lett irva. Akkor talan azzal kellene kiprobalni, vagy pedig az adatlap olvasasaval egyidejuen ertelemszeruen atirni a regiszterek, valtozok nevet.
(#) edison14 válasza vilmosd hozzászólására (») Dec 20, 2014 /
 
Szia!

Kijavítottam a programot, de így sem akar menni.

pwm_led.asm
    
Következő: »»   607 / 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