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   643 / 1210
(#) Hp41C válasza don_peter hozzászólására (») Márc 9, 2015 /
 
Inkább így:
  1. unsigned int random_szam(unsigned int mettol, unsigned int meddig){
  2.     return rand() % (meddig-mettol) + mettol;
  3. }
(#) don_peter válasza Hp41C hozzászólására (») Márc 9, 2015 /
 
A 6-os szám még érvényes érték, így marad a -1.
Amúgy igazad van, megtévesztő lehet a változók elnevezései..
A hozzászólás módosítva: Márc 9, 2015
(#) Hp41C válasza don_peter hozzászólására (») Márc 9, 2015 / 1
 
random_szam(4,8) hogyan is fut le?
  1. unsigned int random_szam(unsigned int mettol, unsigned int meddig){
  2.         return rand() % (meddig-1) + mettol;
  3.     }

A rand () 0 és 32767 közötti értéket szolgáltat. A %(meddig - 1) ugyan azt adja, mint a mod 7, azaz 0 és 6 közötti értéket. Ehhez még hozzáadjuk a 4 -et (+ meddig), a visszaadott szám 4 és 11 közötti lesz.
  1. unsigned int random_szam(unsigned int mettol, unsigned int meddig){
  2.         return rand() % (meddig-mettol) + mettol;
  3.     }

A rand () 0 és 32767 közötti értéket szolgáltat. A %(meddig - mettol) ugyan azt adja, mint a mod 4, azaz 0 és 3 közötti értéket. Ehhez még hozzáadjuk a 4 -et (+ meddig), a visszaadott szám 4 és 7 közötti lesz.
Ha a meddig még érvényes:
  1. unsigned int random_szam(unsigned int mettol, unsigned int meddig){
  2.         return rand() % (meddig-mettol+1) + mettol;
  3.     }

A rand () 0 és 32767 közötti értéket szolgáltat. A %(meddig - mettol+1) ugyan azt adja, mint a mod 5, azaz 0 és 4 közötti értéket. Ehhez még hozzáadjuk a 4 -et (+ meddig), a visszaadott szám 4 és 8 közötti lesz.
(#) bbalazs_ válasza killbill hozzászólására (») Márc 9, 2015 /
 
Az arnyekolast fuggetlenre gondoltam, tehat az arnyekolason belul van a ket (harom) vezetek.
(#) bbalazs_ válasza jdani hozzászólására (») Márc 9, 2015 /
 
Az ellenallas max. 1 Ohm, a puffer olyan 220µF korul. Es mindenkeppen a dioda utan legyen a pic labaihoz minel kozelebb 10µF tantal a tapvonalakra, mindegyik tapvonalat es foldet kosd be.
Itt bent a cegnel gyorsan lejott, de ez csak HEX file, nem a forrasprogram, szoval ezzel sokmindent nem lehet tenni.
A tekercsnel az a fontos, hogy mekkora frekit akarsz elnyelni, igy igazabol kiserletezni kell, 2-3 menet mindenkeppen ajanlott. Meg vezesd at ketszer egy ferritgyurun.
De eloszor nezzuk, mit tesz az uj helyen egy kulso akksirol.
(#) don_peter válasza Hp41C hozzászólására (») Márc 9, 2015 /
 
Igazad van, ennyire részletesen még nem elemeztem ki, főleg, hogy a 2 és 6 közti értékek kellenek.
De most teszteltem..
Ennél maradtam:
  1. unsigned int random_szam(unsigned int mettol, unsigned int meddig){
  2.     return rand() % (meddig-mettol+1) + mettol;
  3. }
(#) killbill válasza bbalazs_ hozzászólására (») Márc 9, 2015 /
 
Idézet:
„Az arnyekolast fuggetlenre gondoltam, tehat az arnyekolason belul van a ket (harom) vezetek.”
Pontosan. De akkor sem szabad mindket veget bekotni. Ha ket testpontra rakotod (ami tavol van egymastol), es a ket testpont kozott potencialkulonbseg van, akkor aram fog folyni az arnyekolason, ami csak zavart szor a belso erekre, azaz ront a helyzeten es nem javit. Termeszetesen nem egyenaramrol beszelek, hanem valtorol. Egy motorban elofordulhat.
A hozzászólás módosítva: Márc 9, 2015
(#) bbalazs_ válasza killbill hozzászólására (») Márc 9, 2015 /
 
Ez egy homero lenne (Ds18akarmicsoda) , legalabbis az eredeti kerdezo szerint.
A legnagyobb aram par mA, ami fut benne.
(#) jdani válasza bbalazs_ hozzászólására (») Márc 9, 2015 /
 
Tantálom nincs, lehet elektrolit is nem?
Tápvonal alatt mit értel? A feritgyűrű kicsit nagyobb méretű, átmegy rajta vagy 5 menet is. Vagy legyen csak 2?
(#) killbill válasza bbalazs_ hozzászólására (») Márc 9, 2015 /
 
Nem a homerotol folyik benne aram, hanem attol, hogy osszekotsz az arnyekolassal ket testpontot a motoron, amik esetleg nincsenek azonos potencialon.
(#) cross51 válasza Pali79 hozzászólására (») Márc 9, 2015 /
 
Működőképes egyszer foglalkoztam sw SPI-vel én is a carry bitet figyeltem, de kérdés annyi PIC-ben van már hw-es SPI megéri a sw-s SPI-vel szenvedni.
Valamint a kimenete is sokkal szebb a hw-es SPI-nek.
(#) -Bandi- válasza sonajkniz hozzászólására (») Márc 9, 2015 /
 
Igazad van. Engem is érdekelnek a miértek. Az assemblyhez nem értek, így nem tudom, hogy hogyan lehet beépíteni a C programba. Azért még próbálkozom, megkérdezem majd a tanáromat is és ha jutok valamire (és persze érdekel valakit) megosztom szívesen bárkivel.
(#) bbalazs_ válasza jdani hozzászólására (») Márc 9, 2015 /
 
Inkabb keramia legyen akkor mar. De a boltban szaz ft korul van a tantal vagy kitermelhetsz valamibol egy kis sarga cseppet...
A tapvonal az, ami adja az aramot a PIC-nek es a kijelzonek. Ki kell probalni, hany menet kell. Lehet, hogy nem is javul. Romlani nem fog

Killbill: OK
(#) sonajkniz hozzászólása Márc 10, 2015 /
 
Sziasztok!
Beszereztem néhány PIC12F1840-est, mert tetszett, hogy csak 8 lábú, van analóg kimenete, tud PWM-et és olcsó. Na, mióta ezzel szenvedek, rájöttem, miért programoznak oly sokan C-ben. A PIC18 után assembly-ben ez a kütyü rémálom. Hogyan lehet működésre bírni az AD konverterét? Potival szabályzott PWM-et szeretnék. De amint bekapcsolpm az AD-t, a timer leáll. Segítssetek!
(#) Pali79 válasza sonajkniz hozzászólására (») Márc 10, 2015 /
 
Ha felteszed a kódot, talán meglátjuk benne a hibát. Nem lehet olyan bonyolult. Én 16F877-esen csináltam pont ilyen feladatot, csak az adatlapot kellett rendesen átrágni.
(#) sonajkniz válasza Pali79 hozzászólására (») Márc 10, 2015 /
 
Már teszem is.
Egyenlőre egy egszerű futófény sebességét akartam szabályozni.
Ha kiveszem az AD ciklust, szépen megy. Ha csak BANKSEL ADRESH-t, Baromi gyors lessz.
Így viszont nem működik.
  1. ;**************************************************************************
  2. ;*                       Kisérletezés PIC12F1840-el                       *
  3. ;**************************************************************************
  4.  
  5.         LIST    P=PIC12F1840                            ; lista megadása
  6.         INCLUDE <P12F1840.INC>                          ; includde fájlok megadása
  7.         RADIX   hex                                                     ; alapértelmezet számrendszer megadása
  8.  
  9.  
  10. #include "p12F1840.inc"
  11.  
  12. ; CONFIG1
  13. ; __config 0x3FFF
  14.  __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF
  15. ; CONFIG2
  16. ; __config 0x3FFF
  17.  __CONFIG _CONFIG2, _LVP_OFF
  18.  
  19.         org             0x0000                                          ; program memória kezdõ címe
  20.  
  21.         CALL    INICIALIZALAS
  22. MAIN
  23.     BCF     LATA,1
  24.     BSF     LATA,2
  25.     CALL    DELAY
  26.     BCF     LATA,2
  27.     BSF     LATA,0
  28.     CALL    DELAY
  29.     BCF     LATA,0
  30.     BSF     LATA,5
  31.     CALL    DELAY
  32.     BCF     LATA,5
  33.     BSF     LATA,1
  34.     CLRF    TMR1L
  35.     CALL    DELAY
  36.         GOTO    MAIN
  37.  
  38. DELAY
  39.     BCF     PIR1,1
  40.     BTFSS   PIR1,1
  41.     GOTO    $-1
  42. POTI
  43.     BSF     ADCON0,1 ;Start conversion
  44.     BTFSC   ADCON0,1 ;Is conversion done?
  45.     GOTO    $-1         ;No, test again
  46.     BANKSEL ADRESH ;
  47.     MOVF    ADRESH,W
  48.     MOVWF   PR2
  49.     RETURN
  50.  
  51.  
  52. INICIALIZALAS
  53.     BANKSEL PORTA ;
  54.     CLRF    PORTA ;Init PORTA
  55.     BANKSEL LATA ;Data Latch
  56.     CLRF    LATA ;
  57.     BANKSEL ANSELA ;
  58.     BSF     ANSELA,0 ;digital I/O
  59.     BANKSEL TRISA ;
  60.     MOVLW   B'00011000' ;Set RA<5:3> as inputs
  61.     MOVWF   TRISA ;and set RA<
  62.     BANKSEL ADCON0 ;
  63.     MOVLW   B'00001101'
  64.     MOVLW     ADCON0
  65.     BANKSEL ADCON1
  66.     CLRF    ADCON1
  67.     BANKSEL OSCCON
  68.     MOVLW   B'01010010'
  69.     MOVWF   OSCCON
  70.     BANKSEL T2CON
  71.     MOVLW   B'00000111'
  72.     MOVWF   T2CON
  73.     MOVLW   D'150'
  74.     MOVWF   PR2
  75.  
  76.     RETURN
  77.  
  78. ;-------------------------------------------------------------------------------
  79.     END
(#) nedudgi válasza sonajkniz hozzászólására (») Márc 10, 2015 /
 
Ez lefordult hibaüzenet és figyelmeztetés nélkül?
Az include direktíva kétszer szerepel.
A banksel makró nem a fordítás hátralevő szakaszára vonatkozik, hanem a kontroller BSR regiszterét állítja. Mivel az utasítások hossza erősen korlátozott 12 bitre, a memória lapokra (bank) van felosztva, az utasítás csak a cím alsó bitjeit tartalmazza, a többit a BSR regiszterből adja hozzá a kontroller. A "302" figyelmeztetést mindenképpen megkapod, ideiglenesen le lehet tiltani, amíg biztos vagy a dolgodban:
  1. errorlevel -302
. Ha kétséges, akkor az
  1. errorlevel +302
direktívát használd.
A 64. sorban MOVLW helyett valószínűleg MOVwF utasítást akartál írni.
(#) sonajkniz válasza nedudgi hozzászólására (») Márc 10, 2015 /
 
Idézet:
„A 64. sorban MOVLW helyett valószínűleg MOVwF utasítást akartál írni.”

Ez azért megmagyarázza, hogy miért nem működik az AD.
Fordítási hibát amúgy nem jelzett. Ha jól értelek, akkor ez a BANKSEL kismillió helyre kell a programon belűl.?
(#) nedudgi válasza sonajkniz hozzászólására (») Márc 10, 2015 /
 
Igen, illetve, ha megfelelően szervezed a programot, akkor kevesebb is elég. Lényeg, hogy legyen egy alapfeltételezés, amire mindig visszaállítod a BSR regisztert, ha már nincs szükség rá. A BSR regiszter tartalmát a program során nekünk kell nyilvántartani, a fordító erre nem lehet felkészülve.
Az ADC működését fusd még át. A konverzió nem azonnal, hanem csak egy bizonyos idő alatt megy végbe, ezt figyelni kell. Ugyancsak ajánlott az errata tanulmányozása, egy csomó hibát el lehet kerülni, meg lehet találni.
A hozzászólás módosítva: Márc 10, 2015
(#) sonajkniz válasza nedudgi hozzászólására (») Márc 10, 2015 /
 
Így már működik.
  1. ;**************************************************************************
  2. ;*                       Kisérletezés PIC12F1840-el                       *
  3. ;**************************************************************************
  4.  
  5.         LIST    P=PIC12F1840                            ; lista megadása
  6.         RADIX   hex                                                     ; alapértelmezet számrendszer megadása
  7.  
  8. #include "p12F1840.inc"
  9.  
  10. ; CONFIG1
  11. ; __config 0x3FFF
  12.  __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF
  13. ; CONFIG2
  14. ; __config 0x3FFF
  15.  __CONFIG _CONFIG2, _LVP_OFF
  16.  
  17.         org             0x0000                                          ; program memória kezdõ címe
  18.  
  19.         CALL    INICIALIZALAS
  20. MAIN
  21.     BCF     LATA,1
  22.     BSF     LATA,2
  23.     CALL    DELAY
  24.     BCF     LATA,2
  25.     BSF     LATA,0
  26.     CALL    DELAY
  27.     BCF     LATA,0
  28.     BSF     LATA,5
  29.     CALL    DELAY
  30.     BCF     LATA,5
  31.     BSF     LATA,1
  32.     CALL    DELAY
  33.         GOTO    MAIN
  34.  
  35. DELAY
  36.     BANKSEL T2CON
  37.     BCF     PIR1,1
  38.     BTFSS   PIR1,1
  39.     GOTO    $-1
  40. POTI
  41.     BANKSEL ADCON0
  42.     BSF     ADCON0,1 ;Start conversion
  43.     BTFSC   ADCON0,1 ;Is conversion done?
  44.     GOTO    $-1         ;No, test again
  45.     BANKSEL ADRESH
  46.     MOVF    ADRESH,W
  47.     BANKSEL T2CON
  48.     MOVWF   PR2
  49.     RETURN
  50.  
  51.  
  52. INICIALIZALAS
  53.     BANKSEL PORTA ;
  54.     CLRF    PORTA ;Init PORTA
  55.     BANKSEL LATA ;Data Latch
  56.     CLRF    LATA ;
  57.     BANKSEL ANSELA ;
  58.     BSF     ANSELA,0 ;digital I/O
  59.     BANKSEL TRISA ;
  60.     MOVLW   B'00011000' ;Set RA<5:3> as inputs
  61.     MOVWF   TRISA ;and set RA<
  62.     BANKSEL ADCON0 ;
  63.     MOVLW   B'00001101'
  64.     MOVWF   ADCON0
  65.     BANKSEL ADCON1
  66.     CLRF    ADCON1
  67.     BANKSEL OSCCON
  68.     MOVLW   B'01010010'
  69.     MOVWF   OSCCON
  70.     BANKSEL T2CON
  71.     MOVLW   B'00000111'
  72.     MOVWF   T2CON
  73.     MOVLW   D'255'
  74.     MOVWF   PR2
  75.  
  76.     RETURN
  77.  
  78. ;-------------------------------------------------------------------------------
  79.     END

De ez a sok BANKSEL egy rémálom. Egy egészséges ciklust nem lehet így írni.
Szerencsére a PIC18-nak már nincsenek ilyen gyerekbetegségei.
Köszönöm a segítsséget.
(#) nedudgi válasza sonajkniz hozzászólására (») Márc 10, 2015 /
 
Hidd el, együtt lehet élni vele, minden csak megszokás kérdése.
Egyszerűbb programoknál valóban tömény, de ha jól osztod be a memóriát, akkor csak a perifériák kezelésekor lehet szükség rá.
A program megfelelő szegmentálásával minimalizálható a használata, csak a program írásának elején kell odafigyelni rá.
(#) Pali79 válasza sonajkniz hozzászólására (») Márc 10, 2015 /
 
A banksel-eken tudnál spórolni. Pl. az ADCON0 és az ADRESh ugyanabban a bankban van, tehát elég csak egyszer váltani. Ha jobban átnéznéd még lehet találnál ilyet többet is.
(#) sonajkniz válasza Pali79 hozzászólására (») Márc 10, 2015 /
 
Mégegyszer köszi a segítsséget, Így most már szükség esetén ezzel is elboldogulok.(legalábbis remélem)
De azt hiszem megmaradok a 18F14K22-nél. Gyanítom, hogy még jó ideig nem fogom tudni kimeríteni a tudását.
(#) don_peter hozzászólása Márc 10, 2015 /
 
Srácok mennyi feszültség esik egy 10K-os ellenálláson?
5v-ot teszek rá.
A mérésemet akarom ellenőrizni.
Még mindig a szintillesztővel vacakolok, hogy 3v-os PIC-ről egy 5v-os kijelzőt tudjak működtetni.
Köszi.
(#) Pali79 válasza sonajkniz hozzászólására (») Márc 10, 2015 /
 
Én még nem találkoztam ezzel a 12F-es pic-el, de erre is is illik, hogy "kicsi a bors..."
(#) bbalazs_ válasza don_peter hozzászólására (») Márc 10, 2015 /
 
A kerdesnek igy nincs ertelme.
Ha csak az ellenallas van az aramkorben, akkor az egesz 5V azon esik.
Ha nem csak az, akkor meg kellene adni a masik ellenallast is.
Vagy merd le az atfolyo aramot, abbol ki tudod szamolni az osszellenallast es akkor kijon a feszultsegeses.
(#) sonajkniz válasza Pali79 hozzászólására (») Márc 10, 2015 /
 
Korábban már írtam, hogy láttam egyszer a neten egy ravasz kapcsolást. Egy 8 lábú microkontroller volt ráragasztva egy hűtőbordára, aminek a hőfokát a saját belső hőmérőjével mérte, és PWM-el szabályzott egy ventilátort. Összesen 3 vezeték volt rákötve, és egy fetet hajtott.
Ehhez kerestem PIC-et, és így találtam rá erre.
(#) don_peter válasza bbalazs_ hozzászólására (») Márc 10, 2015 /
 
Igen, ennek semmi értelme még is probléma van vele.
Ezt építettem meg:Bővebben: Link
1db 10k-os ellenállás van az 5v-os részen, de az az érdekes, hogy a BSS138 FET Drain lábára még rá van engedve az 5v 10K-n keresztül, még is csak 3.7v-ot mérek.
Nem értem...
(#) Pali79 válasza sonajkniz hozzászólására (») Márc 10, 2015 /
 
Most néztem az adatlapját. Jó sok mindent beleraktak ebbe a tokba. Nagyon okos kis cucc.
(#) sonajkniz válasza Pali79 hozzászólására (») Márc 10, 2015 /
 
Úgy látom másokat is megihletett.
Bővebben: Link
Következő: »»   643 / 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