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   124 / 1210
(#) NyariG válasza vilmosd hozzászólására (») Aug 10, 2011 /
 
Köszönöm a hozászolásokat. Azt a példát megnézném mert jelenleg nem nagyon értetem amiket irtatok
(#) NyariG válasza watt hozzászólására (») Aug 10, 2011 /
 
Ezt kitudnád fejteni egy kicsit bövebben?

Idézet:
„Az A/D értékétől függően(0..1023) meghatározni a létetési frekit és kiadni sorban a hozzá tartozó kimenetre.”

Ezt hogy kell csinálni?
(#) El_Pinyo válasza joci1987 hozzászólására (») Aug 10, 2011 /
 
Ebben elég sok hiba van, ahogyan elnézem. Egyrészt, ha binárisan adod meg a literális értéket, akkor célszerű lenne kiírni mind a 8 bitet. Ha a W tartalmát akarod a portokra tenni, akkor a GPIO-ra tedd, ne az 1 bites GP4-re (szerencsésebb lenne a bcf, bsf utasítás). Aztán, mivel ez egy 8 bites kontroller, ezért 600-at nem tudsz betölteni egy 8 bites regiszterbe (max 255), ráadásul szubrutint hívsz, ami nem tér vissza returnnel. Annyi Led villogtató program van a neten, miét nem keresel egyet, ami alapján megérted a működését?
(#) joci1987 hozzászólása Aug 10, 2011 /
 
üdv,

kösz a gyors választ. kiírtam mind a nyolc bitet. Nem értem, hogy mit értesz GPIO alatt
ok a 600-at azt értem hogy miért nem jó.
Az az igazság, hogy ezt a programot egy netesből alakítottam át nem sok sikerrel
(#) NyariG válasza joci1987 hozzászólására (») Aug 10, 2011 /
 
Ezt olvasd el: Bővebben: Link

Nekem így sikerült villogtatni.
(#) joci1987 hozzászólása Aug 10, 2011 /
 
ezt olvasom csak sajnos nem ilyen picem (12F683-m van) van ezért nem ilyenek a kimenetek.
Amúgy ezt a programot próbálom átszerkeszteni de valahogy nem megy
(#) joci1987 hozzászólása Aug 10, 2011 /
 
már sokmindent kipróbáltam de cask nem jött össze az egy led villogtatása. Szerintem a beállításoknál van még mindig a gond. Ha valaki ki tudná javítani a programomat annak hállás lennék.
A hobbielektronikán van fennt egy oktató villogóval azt próbáltam átírni de az sem sikerült.
(#) El_Pinyo válasza joci1987 hozzászólására (») Aug 10, 2011 /
 
Idézet:
„Nem értem, hogy mit értesz GPIO alatt”

Azt meg én nem értem, hogy mit nem értesz, hiszen a forrásfájlodban már használtad. Egyébként General Purpose I/O, így hívják a portot. Célszerű lenne először az adatlappal és magával a vezérlővel megismerkedni. Nem látom a konfigurációs beállításokat sem a forrásodban. Megírtam egy ledvillogtató programot, felteszem a mellékletbe projektestől mindenestől. Próbáld ki, a GP4-en kell a lednek meg az előtétnek lenni. Az MCLR funkciót nem tiltottam le, tehát amennyiben az MCLR lábat alacsony szintre húzod, a kontroller resetben marad (10 k felhúzó ellenállás szükségeltetik). A 100 nF kerámia kondiról se feledkezz meg, melynek a táplábak között kell lennie.

Villogo.zip
    
(#) joci1987 válasza El_Pinyo hozzászólására (») Aug 10, 2011 /
 
Én eddig csak pozitív és egy negatív kábeleket kötöttem a PICre (Vdd+5; Vss 0), meg a ledet ellenállással. Mást is kell? Kondenzátort miért kell és hova??? :eek2:
(#) El_Pinyo válasza joci1987 hozzászólására (») Aug 10, 2011 /
 
A 10 kOhm felhúzó az MCLR bemenetre -függetlenül attól, hogy engedélyezve van-e a konfigurációs szóban a reset- mindig kell, egyébként a külső zavaroktól bizonytalan lesz a működés, akár programozói módba is kerülhet a kontroller. A 100 nF kerámia kondenzátor másik kötelező elem a CMOS áramkörök táplábainál, azokhoz fizikailag minél közelebb. Ha érdekel a mikéntje, javaslom nézd át a PIC-es topikokat, gyakorlatilag 3 oldalanként le van írva, miért és hogyan.
(#) icserny válasza joci1987 hozzászólására (») Aug 10, 2011 /
 
Idézet:
„Kondenzátort miért kell és hova???”
Nézegesd a másoknak írt válaszokat is, hadd ne kelljen már minden héten leírni (Bővebben: Link) Ez egyébként nem PIC specifikus dolog, hanem a digitális elektronika elemi ismeretei közé tartozik!
(#) watt válasza NyariG hozzászólására (») Aug 10, 2011 / 1
 
Egyik lehetőség, hogy egy Timer megszakításban léptetsz egy számlálót, amit összehasonlítasz az AD mért értékével. Ha egyezik, akkor kiadod a követező lépésimpulzust, majd törlöd a számlálót. Így sorban minden kimenetre.
(#) joci1987 válasza El_Pinyo hozzászólására (») Aug 11, 2011 /
 
köszi a programot. Már 4 ledet tudok villogtatni.
amúgy a GPIO azért nem értettem, mert a beállítás részt nem én írtam, hanem kimásoltam a pic könyvéből.
viszont nem értem a programodban az időzítőt teljesen.
Hogy lehet az időtartamot változtatni?
(#) tib12 hozzászólása Aug 11, 2011 /
 
Üdv.
A PIC16F268A -t ugy kell programozni hogy benne van az áramkörben, vagy ki lehet venni és külön foglalattal rá a programozóra? A segítséget nagyon megköszönném.
(#) trudnai válasza joci1987 hozzászólására (») Aug 11, 2011 /
 
Ha megnezed az egy ures ciklus ami teker onmagaban ameddig a T1 ill T2 valtozok le nem nullazodnak -- igy vesztegeti el az idot... Ha Call Delay elott a T2 valtozot feltoltod egy ertekkel, akkor csokkenni fog a varakozas ideje (jelenleg a maximalis idotartamot varja amit 2 valtozoval ilyen modon elerhetsz -- feltetelezve a ciklus torzsen es az oszcillator frekijen nem valtoztatsz persze).

Probald ki, hogy:

  1. Main:
  2.         bsf             GPIO, GP4
  3.         call    Delay                   ;Várunk
  4.         bcf             GPIO, GP4
  5.         call    Delay                   ;Várunk
  6.         goto    Main                    ;Vissza a MAIN-ra


helyett:


  1. Main:
  2.         bsf             GPIO, GP4
  3.         movlw   .128
  4.         movwf   T2
  5.         call    Delay                   ;Várunk
  6.         bcf             GPIO, GP4
  7.         movlw   .128
  8.         movwf   T2
  9.         call    Delay                   ;Várunk
  10.         goto    Main                    ;Vissza a MAIN-ra


...erre kb 2x gyorsabban kell villognia...
(#) tib12 válasza tib12 hozzászólására (») Aug 11, 2011 /
 
Megcsinálom ugy hogy egy külön foglalaton van a programozó. De mivel nem kaptam választ csak reménykedek hogy jó...
(#) potyo válasza tib12 hozzászólására (») Aug 11, 2011 /
 
Talán azért nem kaptál választ, mert csak akkor jössz ide, ha kérdésed van, az fel sem merül benned, hogy mások kérdéseiből is lehet tanulni. Ezt a hozzáállást pedig nem szeretjük, mint ahogy azt sem, ha valaki reklamál azért, mert nem kapott azonnal választ. http://wattmep.tvn.hu/PIC_kezdoknek/ICSP_roviden.html
(#) tib12 válasza potyo hozzászólására (») Aug 11, 2011 /
 
Bocsánat, igazad van. Csak most ez elég hirtelen kellett. Köszi a segítséget.
(#) El_Pinyo válasza joci1987 hozzászólására (») Aug 11, 2011 /
 
Trudnai már leírta a működést, így én csak kiegészíteném a hozzászólását egy javaslattal.
Nagyon hasznos az MPLAB IDE fejlesztői környezetbe integrált MPLAB SIM szimulátor (Debugger menü). Itt a StopWatch eszköz, illetve breakpointok segítségével pontosan meg lehet határozni, hogy egy-egy programrészlet mennyi idő alatt fut le. Érdemes kipróbálni és kísérletezgetni egy kicsit. Ha rászánod magad, akkor még egy dolgot érdemes tudni, mégpedig, hogy az órajelet a szimulációhoz be kell állítani a Debugger/Settings alatt, esetedben 4 MHz-re. Így valóban az utasítások végrehajtásának idejét fogja mutatni a StopWatch.
(#) NyariG hozzászólása Aug 12, 2011 /
 
Sajnos nem boldogulok ezzel az analóg konverzióval.
A picem (16f877)2 es lábára kötöttem egy potit így azon a lábon 0-4,56Voltig tudom állítani a feszültséget.

A program egy jobbra-balra futó fény és ezzel a potival állítanám a sebességet ezért a lemért feszültséget ráakartam tenni a T2 változóra.
Ránézne valaki hogy mi a baja a proginak?
(#) trudnai válasza NyariG hozzászólására (») Aug 12, 2011 /
 
Szia!

A MOVF ADRESH -hoz kellene a ',W' is... Tehat:

  1. MOVF ADRESH, W


kulonben nem teszi be neked a W-be!
(#) NyariG válasza trudnai hozzászólására (») Aug 12, 2011 /
 
átírtam

  1. LIST P=16F877
  2.  #INCLUDE "P16F877.INC"
  3.  __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF&_LVP_OFF
  4.         CBLOCK  0x20                    ;A 0x20 egy szabad memória rész kezdő címe
  5.         T1
  6.         T2
  7.         T3
  8.         WORK_SAVE
  9.         ENDC
  10.  
  11.         ORG     0
  12.  
  13. START
  14.         BSF     STATUS,RP0                      ;BANK1-be átlépünk
  15.         ;PORTA Digitális I/O-vá tétel
  16.         MOVLW   B'00000000'                    
  17.         MOVWF   ADCON1                  ;Mindegyik PORTA analog,REFERENCIA A VDD ÉS A VSS
  18.         MOVLW   B'00111111'             ;Betöltjük az akksiba a TRISA-ba irandót MINEN INPUT
  19.         MOVWF   TRISA                   ;Beállítjuk a PORTA-t bemenetre (beírjuk a TRISA-ba)
  20.         MOVLW   B'00000000'             ;Betöltjük az akksiba a TRISD-be valót
  21.         MOVWF   TRISD                   ;Beletöltjük (mind kimenet a nulla miatt)
  22.         BCF             STATUS,RP0              ;BANK0-ba visszalépünk
  23.         MOVLW   B'10000001'                    
  24.         MOVWF   ADCON0                  ;FOSC/32 KIVÁLASZTVA,RA0 VIZSGÁLATA,KONVERTER BEKAPCSOLVA
  25.  
  26.         CLRC                                    ;TÖRÖLJÜK A TÚLCSORDULÓ PUTTONYT
  27.         MOVLW   B'10000000'             ;Betöltjük a W-be (akkumulátorba) a kirandó adatot
  28.         MOVWF   PORTD                   ;Akkumulátorból kiírjuk a PORTD-re
  29.  
  30. FUTOFENY                                       
  31.         CALL    DELAY                   ;Várunk
  32.         RRF             PORTD                   ;ROTÁLJUK JOBBRA A PORTB-T
  33.         MOVWF   WORK_SAVE               ;ELMENTJÜK A WORKOT
  34.         BSF             ADCON0,GO               ;ELINDITJUK AZ A/D KONVERZIOT
  35.         BTFSS   ADCON0,GO               ;VIZSGÁLJUK HOGY ELKÉSZÜLT-E
  36.         GOTO    $-1                             ;VÁRUNK AZ ELKÉSZÜLÉSIG
  37.         MOVF    ADRESH,W                ;EREDMÉNYT KIIRJUK A WORKBE
  38.         ADDLW   D'1'                    ;HOZZÁADUNK 1-T
  39.         MOVWF   T2                              ;EREDMÉNYT BETESSZÜK A T2 BE
  40.         MOVF    WORK_SAVE               ;VISSZATÖLTJÜK A LEMENTETT WORKOT
  41.         BTFSS   PORTD,0                 ;HA A FUTOFÉNY ELÉRT A SZÉLÉRE AKKOR KIHAGYJA A KÖVETKEZÖ SORT
  42.         GOTO    FUTOFENY                ;Visszaugrunk a FUTOFÉNY LABELRE
  43.  
  44. FUTOFENYB
  45.         CALL    DELAY                   ;Várunk
  46.         RLF             PORTD
  47.         MOVWF   WORK_SAVE
  48.         BSF             ADCON0,GO
  49.         BTFSS   ADCON0,GO
  50.         GOTO    $-1
  51.         MOVF    ADRESH,W
  52.         ADDLW   D'1'
  53.         MOVWF   T2
  54.         MOVF    WORK_SAVE
  55.         BTFSS   PORTD,7
  56.         GOTO    FUTOFENYB               ;Visszaugrunk a legelejére
  57.         GOTO    FUTOFENY
  58.  
  59.  
  60. DELAY                                           ;Delay labelje
  61.         MOVLW   d'10'                  
  62.         MOVWF   T1                              ;T1-be bekerül a 200
  63. DEL
  64.         ;T2
  65. DEL1
  66.         MOVLW   d'20'
  67.         MOVWF   T3                              ;T3-ba bekerült a 10
  68. DEL2
  69.         NOP
  70.         NOP
  71.         NOP
  72.         NOP
  73.         NOP
  74.         NOP
  75.         NOP
  76.         NOP
  77.         NOP
  78.         NOP
  79.         DECFSZ  T3,f                    ;Csökkenti a T3-at, addíg, amig nem nulla
  80.         GOTO    DEL2                    ; mindig visszaugruk a DEL2-re, vagyis a sok NOP-ra
  81.         DECFSZ  T2,f                    ;Ha már nulla, akkor ugyanez eljátszódik a T2-vel
  82.         GOTO    DEL1
  83.         DECFSZ  T1,f                    ;Majd a T1-el is
  84.         GOTO    DEL
  85.         RETURN                                  ;Visszatér a DELAY szubrutinból
  86.         END                                             ;Teljes program végét jelentő END



de most sem foglalkozik a poti tekergetésével.
(#) bbalazs_ válasza NyariG hozzászólására (») Aug 12, 2011 / 1
 
Maradt ott meg egy movf W nelkul...
Szerintem bontsd ket reszre a feladatot. az AD-t kozvetlenul tedd ki a portB-re, akkor latod, hogy tekergeteskor beolvassa-e. Aztan adatlap alapjan mehetsz tovabb, hogy mit kellett volna meg beallitani.
En azert az interrupt vektor helyet kihagynam a progi elejerol.
(#) trudnai válasza NyariG hozzászólására (») Aug 13, 2011 / 1
 
Ha megnezed a DELAY az 3 egymasba agyazott ciklussal valositja meg a szukseges varakozasi idot. A legkulso ciklusvaltozo a T1, nem a T2 -- tehat a T1-be kellene inkabb tolteni a beolvasott erteket. Annal is inkabb, mivel a T2 erteke igy csak a legelso kulso ciklus-kor lesz egyenlo a beolvasott ertekkel... Utana mindig 256-okat fog tekerni neked. Ja es ertelem szeruen a DELAY-en belul a T1 inicializalasat ki kell venni, hiszen azt az ADRESH-bol kivulrol fogod megtenni...
(#) NyariG válasza trudnai hozzászólására (») Aug 13, 2011 /
 
Működik, köszönöm a segítséget.
(#) NyariG hozzászólása Aug 13, 2011 /
 
Most arra keresném a választ hogy egy 4mhz kvarccal működő picben 1/256 os prescalernél kb hány ms alatt jelez a timer0 ill mennyi alatt 1/2 nél.

Vagy egy képlet kellene vagy valami.Köszi.
(#) kissi válasza NyariG hozzászólására (») Aug 13, 2011 / 1
 
4 MHz --> 1 gépi ciklus 1 us ( 4/4 MHz ) --> 256-os előosztó --> 256 us-ként lép egyet a TIMER számlálója, túlcsorduláshoz 256 impulzus kell --> 256*256 us !

A 2-es osztót ez alapján ki tudod számolni, ill. szimulációval le tudod mérni !

Steve
(#) icserny válasza NyariG hozzászólására (») Aug 13, 2011 / 1
 
Nem mondtad, hogy milyen PIC. Feltételezem, hogy PIC16, vagy hasonló...

Azt mondod, hogy az Fosc frekvencia 4 MHz (Tosc = 250 ns). Akkor az utasításciklusok frekvenciája Fcy = Fosc/4 = 1 MHz, a preriódusidő pedig 1 us. Az előosztóra Fcy jut.

Ha 1:256 az előosztási arány és 8-bites Timer0, akkor a túlcsordulás T = Tcy * 256 * 256 = kb. 65,5 ms időközönként történik.

Ha pedig az előosztási arány 1:2, akkor pedig
T = Tcy * 2 * 256 = 512 us (kb. 0.5 ms)
(#) kissi válasza icserny hozzászólására (») Aug 13, 2011 / 1
 
Úgy látom PIC16F877-el dolgozik ( #1044488 ), remélem azért kérdezte...?!

Steve
(#) NyariG válasza kissi hozzászólására (») Aug 13, 2011 /
 
Igen azzal, nem gondoltam hogy számít milyen pic, mivel azt hittem csak a kvarc határozza meg a sebességet....
Következő: »»   124 / 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