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   63 / 1210
(#) Hp41C válasza Pez666 hozzászólására (») Ápr 12, 2010 /
 
Szia!

Timer0 megszakításra a PORTB 7..4 bitjein számol...

16F690IT.ASM
    
(#) szitko válasza icserny hozzászólására (») Ápr 12, 2010 /
 
Neharagudj, hogy ilyen lassú vagyok, de kórházban fekszem és nem mindig jutok internethez. Szóval azt a "CALL GOMB"-ot nem nagyon értem. Miért kell egy subrutin a gombok figyeléséhez? Próbáltam egy másik progit irni az előzö feladathoz, megnéznéd, hogy jobban sikerült -e

gomb.asm
    
(#) icserny válasza szitko hozzászólására (») Ápr 12, 2010 /
 
Idézet:
„Miért kell egy subrutin a gombok figyeléséhez?”
Nem kell, csak azért gondoltam így, hogy a fő ciklus átláthatóbb legyen, s azért is, mert a fő ciklust már korábban ismertettem, ezt a részt meg utólag részleteztem.

De egy szubrutin bármikor beemelhető a főprogramba,ha elhagyod a call/return utasításokat.
Idézet:
„Próbáltam egy másik progit irni”
Nem tudom, hogy ennek mit kellett volna csinálni, de:
1. Az biztosan nem jó, hogy a GOMB címkére ugratsz vissza, s így kimarad a késleltetés.
2. Az sem jó, hogy beiktattál egy blokkoló várakozást, ami megakasztja a fő ciklus folyamatát.

Ha ez a feladat, akkor valahogy így képzelem a programot (a kedvedért most GOMB szubrutin nélkül...). A programot nem próbáltam ki, elírás, hiba lehet benne!

Hogy egyszerűbb legyen az élet a G_STATE változónak csak a 0. bitjét használom ellenőrzéskor. Az 1-be állítást pedig a COMF utasítással (komplementálás) oldottam meg.

gomb.asm
    
(#) snorbii hozzászólása Ápr 12, 2010 /
 
Sziasztok!

Teljesen kezdőként a PIC programozást szeretném kipróbálni. A "DV164131 - PICkit 3 Debug Express"-t néztem ki, de egyvalamit nem értek: a leírás és képek alapján úgy tűnik, hogy a készlethez adott demó panelen a PIC18F45K20 fixen be van építve, azaz nem IC foglalatban van. Tudom, hogy kezdőként teljesen jó ezzel szórakozni, mégis megkérdezném:
1. Mire lenne szükségem, ha más típusú PIC-cel is szeretnék kísérletezni? (pl. PIC12F508)
2. Van olyan "programozó" panel is, amin IC foglalat van, azaz a felprogramozás után a PIC kivehető, és más áramkörbe áttehető? Ilyenekről van lista valahol?

Elnézést, ha esetleg félreértettem valamit, még csak most ismerkedek a témával

Köszönöm!
(#) Bell válasza snorbii hozzászólására (») Ápr 13, 2010 /
 
Ha van pákád, veszel pár alkatrészt, akár magad is összerakhatsz egyet pár perc alatt.
A 12F508 -hoz kell egy 8 lábú foglalat, csatlakozó (tüskesor) a PICkit-hez, pár szál drót, esetleg egy-két LED, ellenállás, nyomógomb, stb.
Aztán ha rákapsz az ízére, már kevés lesz így összemadzagolva, kell valami masszívabb megoldás, panel. Teszel rá LCD-t, vagy bármi egyebet.
Nézd meg például ezt:
Bővebben: Link
Az IC gyakori cseréjéhez jó ha van karos foglalatodBővebben: Link:
(#) icserny válasza snorbii hozzászólására (») Ápr 13, 2010 /
 
Például a DM164127 LowPinCount USB Kit 20 lábú foglalattal van szerelve. Gyárilag PIC18F14K50 van benne (ami USB illesztőt is tartalmaz). Ez, akárcsak a DM164120-1 Low Pin Count Demo Board lábkompatibilis a 8/14/20 lábú mikrovezérlőkkel (pl. 8 lábúIC12F675, 20 lábúIC16F690).
Idézet:
„felprogramozás után a PIC kivehető, és más áramkörbe áttehető?”
Ha a céláramkörben ki vannak vezetve a programozáshoz szükséges lábak egy 6 lábú tüskesorra, akkor fölösleges az átrakás! (ICSP a kulcsszó)

Ha mégis kell a külön programozás, akkor ahhoz ilyet érdemes beszerezni.
(#) snorbii válasza icserny hozzászólására (») Ápr 13, 2010 /
 
Köszönöm a válaszokat mindkettőtöknek!
Mivel még csak most ismerkedek a témával ezért valszeg egy ilyet fogok beszerezni: PICkit 3 Debug Express
(#) cNobody válasza snorbii hozzászólására (») Ápr 13, 2010 /
 
Olvasd el ezt is, lehet más lesz a véleményed.
Bővebben: Link
(#) Pez666 hozzászólása Ápr 13, 2010 /
 
Hali!
Van egy szabályozható pwm programom, de nemtudom ugy beállítani, hogy a microszervómhoz megfelelően 1-és 2ms között lehessen állítani. Ehhez szeretnék segítséget kérni, ha valaki jártas már ebben.
A programom:
#include
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)

cblock 0x20
Delay1 ; Assign an address to label Delay1
Delay2
Display ; define a variable to hold the diplay
Display1
endc

org 0
Start:
bsf STATUS,RP0 ; select Register Page 1
movlw 0xFF
movwf TRISA ; Make PortA all input
clrf TRISC ; Make PortC all output
movlw 0x10 ; A2D Clock Fosc/8
movwf ADCON1
bcf STATUS,RP0 ; back to Register Page 0

bcf STATUS,RP0 ; address Register Page 2
bsf STATUS,RP1
movlw 0xFF ; we want all Port A pins Analoga
movwf ANSEL
bcf STATUS,RP0 ; address Register Page 0
bcf STATUS,RP1

movlw 0x01
movwf ADCON0 ; configure A2D for Channel 0 (RA0), Left justified, and turn on the A2D module
MainLoop:
nop ; wait 5uS for A2D amp to settle and capacitor to charge.
nop ; wait 1uS
nop ; wait 1uS
nop ; wait 1uS
nop ; wait 1uS
bsf ADCON0,GO ; start conversion
btfss ADCON0,GO ; this bit will change to zero when the conversion is complete
goto $-1

movf ADRESH,w ; Copy the display to the LEDs
movwf Delay1
bsf PORTC,0
Kesl:
incfsz Delay1,f
goto $-1
bcf PORTC,0
Kesl2:
decfsz Delay2,f
goto $-1
goto MainLoop
end[code=c]
(#) snorbii válasza cNobody hozzászólására (») Ápr 13, 2010 /
 
Kösz az infót, akkor még átgondolom...
(#) Auf hozzászólása Ápr 13, 2010 /
 
Sziasztok!

Lehet valakinek ez alapvető, de sajnos én nem találtam semmit róla, és nem vagyok még profi.

A kérdésem az lenne, hogy kellene választanom a végződését.
Nekem egy 16F876A kéne SOIC tokosban, ami 20 MHz-ig jó. 14.475 MHz-n akarom működtetni.
Viszont nem jutok dűlőre, hogy mit jelentenek a pic neve végén a -E -I /SO /SS...

PIC16F876A-E/SO SOIC
PIC16F876A-I/SO SOIC
PIC16F876AT-I/SO SOIC
PIC16F876AT-I/SS SSOP
PIC16F876T-20/SO SOIC
PIC16F876T-20I/SO SOIC

És amihez nincs irva, hogy -20, az is bírja?

Köszi.
(#) potyo válasza Auf hozzászólására (») Ápr 13, 2010 /
 
Aminél nincs -20, annál van egy A betű, az egy másik chip, másik adatlappal, más jellemzőkkel. Adatlapot tessék egyébként megnézni, abban benne van minden jelölés jelentése. Nekem most nincs kéznél adatlap, nem birom megnézni, de itt a fórumban is volt már erről néhányszor szó, keresgess.
(#) cNobody válasza Auf hozzászólására (») Ápr 13, 2010 /
 
Az -I és az -E az a hőmérsékleti tartományt jelöli
I: -40C-től +85C -ig
E: -40C-től +125C-ig

/SS = SSOP, /SO = SOIC ezek tokozások
SSOP kisebb mint a SOIC (méghozzá ha jól tudom akkor a lábtávolság fele akkora)

T betű azt jelenti hogy a csomagolás Tape and Reel, ha nincs T akkor TUBE a csomagolás.

-20 az 20MHz-ig bírja
-04 az meg 4MHz-ig bírja

az A jelzésű az továbbfejlesztett/javított verzió


(Ha tévedek javítsatok ki)
(#) Auf válasza cNobody hozzászólására (») Ápr 14, 2010 /
 
Kösz az infót.
(#) Hp41C válasza Pez666 hozzászólására (») Ápr 14, 2010 /
 
Szia!

Az A/D az ADRESH regiszterbe teszi a mért érték felső 8 bitjét. A kiolvasott értéket használja fel a program a következő részletben a pulzus hosszának beállítására:
  1. movf ADRESH,w ; Copy the display to the LEDs
  2. movwf Delay1
  3. bsf PORTC,0
  4. Kesl:
  5. incfsz Delay1,f
  6. goto $-1
  7. bcf PORTC,0

Mivel a kontroller 4MHz órajelről jár (1 utasás idejére a kommnet 1 us -ot ad meg), a Kesl ciklusa 3 us alatt fut le. A mért érték 0..255 között lehet, a ciklus 256..1 -szer fut le (a skála kifordul), ami 513 ... 4 us hosszú pulzust eredményez.
(#) szitko válasza icserny hozzászólására (») Ápr 14, 2010 /
 
Átnéztem amit írtál. Kezdem érteni ezt a gomb dolgot. Az a G_STATE konstans nem teljesen tiszta. Az elméletileg elhagyható lenne nem? Vagyis anélkül is működne a gombok figyelése? Mindenesetre a gombok vezérlésével kapcsolatban rengeteget tanultam, ezt köszönöm. Igaz az eredeti progi optokaput fog vezérelni, ha egyszer elkészül. Még annyi kérdésem lenne, hogy az eredetihttp://www.hobbielektronika.hu/forum/topic_hsz_683537.html?highlight=1#683537 progiban a port b bitjeit egyesével váltom. A gomb példaprogikba a bitek mozgatva vannak a portb-n, de én csak egyesével szeretném vezérelni a nem villogó ledeket. Ebben az esetben jó ha a BSF BCF utasításokat használom?
(#) icserny válasza szitko hozzászólására (») Ápr 14, 2010 /
 
Idézet:
„Az a G_STATE konstans nem teljesen tiszta. Az elméletileg elhagyható lenne nem? Vagyis anélkül is működne a gombok figyelése?”
Nem! Jól néznénk ki, ha mondjuk 1 másodpercig nyomod a gombot, amire 25 ms-onként ránézünk, s látva, hogy le vany nyomva, átváltjuk a LED állapotát...

A G_STATE állapotjelző használata biztosítja számunkra, hogy csak akkor vegyük figyelembe a gomb lenyomott állapotát, ha az előző alkalommal (tehát 25 ms-mal korábban) felengedett állapotban volt.
Idézet:
„egyesével szeretném vezérelni a nem villogó ledeket. Ebben az esetben jó ha a BSF BCF utasításokat használom?”
Nem szerencsés dolog a Read-Modify-Write probléma miattItt a probléma ismertetése (a PORTx regiszterek c. részt nézd meg) PIC18 esetében egy hardveres regiszterrel (LATA) oldották meg, PIC16 esetében szoftveresen kell alakítani valamit (pl. egy memóriarekeszben, vagy WREG-ben kell összeállítani a kimenet új tartalmát, és egyetlen jólirányzott MOVF utasítással kiírni). Én nem vagyok szakértő a témában, mert nem használok PIC16-ot...
(#) szitko válasza icserny hozzászólására (») Ápr 14, 2010 /
 
Köszönöm a válasz meg a rengeteg segítséget nagyon sokat tanultam belőle!
(#) Pez666 válasza Hp41C hozzászólására (») Ápr 14, 2010 /
 
Szia!
Nem igazán értem amit a ciklusidőkről írtál nekem.
Nem tudtam beállítani, hogy 1ms és 2ms között lehessen szabályozni a pwm-et.
Már vagy egy hónapja próbálom beüzemelni azt a mikroszervót
(#) Hp41C válasza Pez666 hozzászólására (») Ápr 16, 2010 /
 
Szia!

Nagyon közel jártál a megoldáshoz:

  1. movf            ADRESH,w ;Az A/D eredmény kiolvasása
  2.         movwf   Delay1; tárolása
  3.         movlw   0x06
  4.         movwf   Delay2
  5.         bsf     PORTC,0 ; RC0 bekapcsolása
  6. Kesl:                           ; Fix 1ms ideig RC0 bekapcsolása
  7.         nop
  8.         incfsz  Delay2,f
  9.         goto    Kesl
  10. Kesl1:                  ; Változó (0..1ms) ideig RC0 bekapcsolva tartása
  11.         nop
  12.         incfsz  Delay1,f
  13.         goto    Kesl1
  14.         bcf     PORTC,0 ; RC0 kikapcsolása
  15. Kesl2:                  ; Kivárás fix ~1ms ideig, RC0 kikapcsolva
  16.         decfsz  Delay2,f
  17.         goto    Kesl2


A pulzusok közötti időt szerintem még jelentősen növelni kell: Kesl2 ciklusba kell még utasításokat tenni...
(#) Atielektro hozzászólása Ápr 18, 2010 /
 
Sziasztok!

A segítségeteket szeretném kérni. Épp egy 628A-val szeretnék A/D átalakítást végezni, de valamiért nem akar működni a program. A fordító nem jelez hibát, de a valóságban meg sem nyikkan az egész. RA0-as lábra kötöttem, egy 4,1 kOhm-os pot.métert, mivel az adatlap azt írja, hogy a terhelés ne legyen nagyobb 10k-nál.
Ebben a pic-ben nincs A/D átalakító, csak 2 db komparátor és ehhez rendeltem hozzá a belső referencia feszültség generátort.A programról annyit, hogy, ha a valamelyik komparátor billen, akkor megszakítást okoz és a ref. fesz értékét kiíratom a B portra. Mivel egy megszakítás flag vonatkozik a 2 komparátorhoz, ezért a megszakításban vizsgálom, hogy melyik komparátor kimenete billent. A programot igyekeztem sűrűn kommentezni, hogy könnyebben érthető legyen. Lehet, hogy vannak benne nagy baromságok, amik nekem nem tűntek fel, mivel adatlapból csináltam az egészet. A banklapozást meg lehetett volna összeszedettebben is oldani, de így legalább az elvégezendő műveletek átláthatóbbak szerintem.
Légyszi akinek van hangulata hozzá, az nézzen bele és mondja meg, hogy mit rontottam el.
Előre is köszi a segítséget!
(#) Hp41C válasza Atielektro hozzászólására (») Ápr 18, 2010 /
 
Szia!

- Első ránézésre a megszakítási rutinból hiányzik a W és a STATUS regiszter mentése, visszaállítása...
- Amint írod, a VIZSGALAT futásakor a BANK1 aktív, de az ANDREG a BANK0-ban van definiálva:
  1. VIZSGALAT:      ;elvileg most BANK1-ben vagyunk
  2.         MOVF VRCON,0
  3.         ANDWF ANDREG,0          ;a VRCON also 4 bitje lesz a W-ben
  4.         SUBWF MAX,0                     ;Kivonjuk belole a 0000|1111-t

- Az "ANDWF ANDREG,0" helyettesíthető az "ANDLW 0x0F" utasítással (Bank probléma mentes...)
(#) Atielektro válasza Hp41C hozzászólására (») Ápr 18, 2010 /
 
Először is köszi, hogy segítettél!
Megcsináltam azokat a dolgokat amiket írtál. Sajnos így sem működik, ugyanúgy semmi sem jelenik meg a PORTB-n, de csatoltam a progit, hátha én csináltam valamit rosszul. A MAX és ANDREG-t kitöröltem és helyettük konstansokat használok. Az R1,R2 valtozót a BANK1-be definiáltam, mivel amikor meghívom a szubrutint abban a bank-ban vagyok. Beraktam a STATUS és a W mentését, bár szerintem a W mentése felesleges ebben az esetben,de lehet, hogy tévedek. A STATUS-t viszont tényleg szükséges.
Ha lenne még kedved hozzá, akkor légyszi nézz rá még egyszer.
(#) vilmosd válasza Atielektro hozzászólására (») Ápr 18, 2010 /
 
Hali
Nem volt idom vegignezni a proramot. Egy otlet : a valtozokat rakd a 0x70 cimtol, mert ez mind a negy bankban egyforman latszik.
  1. CBLOCK 0xB4             ;BANK1-ben definialtak...
  2.         W_SAVE
  3.         STATUS_SAVE
  4.         R1
  5.         R2
  6. ENDC

Helyett :
  1. CBLOCK 0x70             ;minden  bankban definialtak...
  2.         W_SAVE
  3.         STATUS_SAVE
  4.         R1
  5.         R2
  6. ENDC

Talan segit.
Udv Vili
Ps; Azert ez a modszer AD atalakitora egy kicsit nehezkes. Egy 'F819, v 'F690 hasonlo aru es van bennuk sok AD csatorna.
(#) brato válasza Atielektro hozzászólására (») Ápr 18, 2010 /
 
Megnéztem az oshon szimulátorában,
a RA0 és a RA4 portokat kapcsolgatja ha analóg értéket adok rá.
(#) icserny válasza Atielektro hozzászólására (») Ápr 18, 2010 /
 
  1. ORG 0x04
  2.         MOVWF W_SAVE
  3.         MOVF STATUS,0          
  4.         MOVFW STATUS_SAVE

Ez így biztosan nem jó, mert a MOVFW makró nem a file regiszterbe ír, hanem W-be!!!

Az adatlap ajánlása szerint egyébként így kell csinálni a mentést:
  1. MOVWF W_SAVE
  2.         SWAPF STATUS,W
  3.         BCF STATUS,RP0    ;vagy BSF, ha BANK1 kell...
  4.         MOWF STATUS_SAVE

Természetesen W_SAVE a mindenhonnan elérhető címen legyen (pl. 0x70)

Bővebben: lásd az adatlap Example 14-1 kódját!
(#) Atielektro válasza icserny hozzászólására (») Ápr 18, 2010 /
 
A movfw-t elírtam, movwf akart lenni, de a többit, amit írtál nemsokára megnézem.
Köszönöm a segítséget neked is, meg vilmosd-nak is.
(#) icserny válasza Atielektro hozzászólására (») Ápr 18, 2010 /
 
Tulajdonképpen a regiszterek visszaállítása az izgalmasabb, mert a STATUS regiszter helyreállítása után már nem szabad használni a MOVF utasítást (a MOVFW makrót sem)!

Interrupt végén:
  1. SWAPF STATUS_SAVE,W
  2.     MOVWF STATUS
  3.     SWAPF W_SAVE,F
  4.     SWAPF W_SAVE,W
  5.     RETFIE


Az utolsó két SWAPF helyettesíti az elvi hibás
  1. MOVF W_SAVE,0

utasításodat (az ugyanis elállítaná a Z jelzőbitet).
(#) Atielektro válasza icserny hozzászólására (») Ápr 18, 2010 /
 
Köszönöm szépen a segítséget, így már működi! Szépen kijelzi a ledeken a bináris értéket.
Azt pedig, hogy a statust-t és a w-t el kell menteni egy életre megjegyeztem, meg azt is, hogy hogyan...
(#) icserny válasza Atielektro hozzászólására (») Ápr 19, 2010 /
 
Örülök, hogy megoldódott a probléma! A SWAPF utasításánál pedig arra kell ügyelni, hogy PÁROSÁVAL szerepeljen, mert minden swapf felcseréli a félbájtok (nibbles) sorrendjét, így minden másodikra kerülnek vissza a helyükre.
Következő: »»   63 / 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