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   641 / 1210
(#) killbill válasza sonajkniz hozzászólására (») Márc 6, 2015 /
 
Idézet:
„A számítástechnikában nincs véletlenszám.”
Eleg nagy bajban lenne a vilag, ha ez igy lenne. Mondjuk az osszes titkositasi algoritmus. WiFi meg https es tarsai. De egy 8 bites mikrokontrolleren dobokockanak valoban a legegyszerubb a szamlalos megoldas.
(#) sonajkniz válasza killbill hozzászólására (») Márc 6, 2015 /
 
Biztos igazad van, de akkor írd már le nekem, hogyan veszel rá egy processzort, hogy gondoljon egy számra!? Mert ha ez sikerül, akkor megalkodtat az "A.I."-t
(#) kissi válasza killbill hozzászólására (») Márc 6, 2015 /
 
Idézet:
„Eleg nagy bajban lenne a vilag, ha ez igy lenne. Mondjuk az osszes titkositasi algoritmus.”
Úgy tudom, hogy azok csak ál-véletlen számokkal dolgoznak ( azaz kellő számítástechnikai teljesítmény mellett visszafejthetőek lennének ! ).
(#) icserny válasza sonajkniz hozzászólására (») Márc 6, 2015 /
 
Lehetőleg arról is gondoskodni kell, hogy a számláló lehetséges állapotainak száma 6-tal osztható legyen, különben nem lesz egyforma az egyes számok előfordulási valószínűsége!
(#) sonajkniz válasza icserny hozzászólására (») Márc 6, 2015 /
 
Ez könnyen kivitelezhető. A programozható számlálót kell használni. Megadni neki egy 6-al osztható számot, mínusz 1. Tehát nem 240-et, hanem 239-et kell megadni. A kiolvasott értékhez pedig 1-et hozzáadni. Ja, és ha 240-ig számolunk, akkor 60-al kell osztani. Amúgy ha dobókocka a cél, akkor miért 6 az osztó?
A hozzászólás módosítva: Márc 6, 2015
(#) -Bandi- válasza sonajkniz hozzászólására (») Márc 6, 2015 /
 
Azért 6 mert a kockán is 1-től 6-ig vannak a számok, vagy nem jól gondolom?
C programozást már tanultam, ott könnyen megvan a program, csak pic-en az nem megy.
Ki tudnád fejteni kicsit bővebben, hogy is működik ez a számláló. Még csak tanulom a PIC-et és nem minden tiszta . Hogyan kell meghivni, meg hasonlók....
(#) sonajkniz válasza -Bandi- hozzászólására (») Márc 6, 2015 /
 
Ma már nem, de holnap készítek egy példaprogramot és feltöltöm.
(#) -Bandi- válasza sonajkniz hozzászólására (») Márc 6, 2015 /
 
Nem sürgős. Előre is köszönöm.
(#) Pali79 válasza don_peter hozzászólására (») Márc 6, 2015 /
 
Szia!
Jutottál valamire már ezzel a szintillesztés dologgal?
(#) riddler17 hozzászólása Márc 7, 2015 /
 
Sziasztok ismét!
Nagyon megtetszett a PIC programozás, kezdem felismerni a benne rejlő lehetőségeket. Van egy RGB LED vezérlő HEX fájlom, szeretném átszerkeszteni. Ehhez letöltöttem egy FileViewPro nevű programot, ezt dobta ki a google, viszont megnyitás után csak számokat és betűket látok, nem úgy, mint az előttem hozzászóló Pali79 mellékletében szereplő utasításlistát. Milyen programot javasoltok nekem?
(#) Pali79 válasza riddler17 hozzászólására (») Márc 7, 2015 /
 
Szia!
Több lehetőség is van: a legkézenfekvőbb az MpLab, de az általa visszafejtett forrás elég tömör, kezdőknek bonyolultnak tűnhet. an egy icprog nevezetű program, az már jobb egy fokkal, hátránya, hogy nem fejlesztik már egy ideje, így csak a régebbi pic-eket ismeri. Van még egy picdisasm nevű is ami szerintem a legjobb a kezdők számára, de erre is érvényes, hogy csak a régieket tudja kezelni. Tehát kell valamelyik program, kell tudni, hogy milyen pic-re íródott a hex, így assemblybe visszafejthető a kód, viszont meg is kell tudni érteni, mert a szerzői kommentek ugyebár nem lesznek benne.
(#) benjami válasza sonajkniz hozzászólására (») Márc 7, 2015 /
 
Ha már a programozható számlálót használod, sokkal egyszerűbb, ha eleve csak 0..5 között hagyod számlálni. A végeredmény ugyanaz lesz, csak nem kell semmit osztogatni és maradékot képezni.
(#) sonajkniz válasza benjami hozzászólására (») Márc 7, 2015 /
 
Ez nem teljesen igaz. Több verziót is kipróbáltam. Egy szám egymásutáni ismétlődésének gyakorisága annál nagyobb, minél kisseb frekvencián, minél kisseb alapszámmal dolgozol.
(#) benjami válasza sonajkniz hozzászólására (») Márc 7, 2015 /
 
Az tény, hogy alacsony frekvencián ismétlődés lehet, ha sűrűn mintavételezel, ezért a lehető legnagyobb frekvencián kell járatni. De tegyük fel, hogy a két mintavétel között 10000-et lép a számlálód. Ha 240-ig (0..239) engeded számolni, akkor 41-szer fordul körbe és még pluszban beszámol 160-at. Ha a 160-at osztod 6-al, 26-ot kapsz és marad 4.
Nézzük a másik verziót: 6-ig engedve a számolást (0..5) körbefordul 1666-szor és még pluszban 4-et lép. tehát ugyanaz lesz a végeredmény.
A legfontosabb, hogy legyen véletlenszerű a mintavételezés időpontjában (pl. gombnyomás), és a mintavételezés sűrűsége nagyságrendekkel alacsonyabb legyen mint a számláló sebessége.
(#) sonajkniz válasza benjami hozzászólására (») Márc 7, 2015 /
 
Oké, ez így van, csak én más módszert használtam a dobókockánál. Gyakorlatilag "gurítom".
Addig gurul, míg a kiemelt érték el nem fogy. Amúgy perceken belűl feltöltöm az erre írt progit.
Nézd majd át, és bíráld el. Szeretem a bírálatokat. Azokból lehet a legtöbbet tanulni.
(#) sonajkniz válasza -Bandi- hozzászólására (») Márc 7, 2015 /
 
Nos amint ígértem, készítettem egy kis progit, kellően kikommentelve.
Az álltalam favorizált microkontroller a PIC18F14K22. Tehát a program is erre van írva, valamint a mellékelt mórickarajz is erre vonatkozik. Ha mást használsz, az adatlap segítségével igazítsd hozzá!
Itt a program:
  1. ;**************************************************************************
  2. ;*                        Dobókocka PIC 18F14K22-re                       *
  3. ;**************************************************************************
  4.  
  5.         LIST    P=PIC18F14K22                           ; lista megadása
  6.         INCLUDE <P18F14K22.INC>                         ; includde fájlok megadása
  7.         RADIX   hex                                                     ; alapértelmezet számrendszer megadása
  8.  
  9.         CONFIG  FOSC = IRC                                      ; belsõ oszcillátor
  10.         CONFIG  WDTEN = OFF                                     ; watchdog kikapcsolása
  11.         CONFIG  LVP = OFF                                       ; alacsony feszültségû programozás kikapcsolva
  12.  
  13.         org             0x0000                                          ; program memória kezdõ címe
  14.         nop                                                                     ; ICD miatt
  15.  
  16.  
  17.         org             0x0028                                          ; kezdõ cím, ami átugorja a
  18.                                                                         ; megszakítási címet
  19.  
  20.         CALL    INICIALIZALAS
  21. ;------------------------Dobókocka ledjeinek megadása---------------------------
  22.     MOVLW   B'01000000'
  23.     MOVWF   0x1
  24.     MOVLW   B'00100001'
  25.     MOVWF   0x2
  26.     MOVLW   B'01100001'
  27.     MOVWF   0x3
  28.     MOVLW   B'00101101'
  29.     MOVWF   0x4
  30.     MOVLW   B'01101101'
  31.     MOVWF   0x5
  32.     MOVLW   B'00111111'
  33.     MOVWF   0x6
  34. ;-------------------------Kijelzés, gombnyomásra várás--------------------------
  35. MAIN
  36.     MOVFF   TMR2,0x7          ; Timer 2 kiolvasása, érték áttöltése 0X7-be
  37.     INCF    0x7               ; Érték eggyel megnövelve, mert 0 nem lehet
  38. GURITAS
  39.     DECFSZ  0x7               ; Visszaszámolás 0-ig
  40.     GOTO    GURUL             ; Ha nem 0, GURUL
  41.     BTFSS   PORTA,1           ;-------------------------------------------------
  42.     GOTO    $-2               ;
  43.     BTFSC   PORTA,1           ; Gombnyomás figyelése pergésmentesítéssel.
  44.     CLRF    0x8               ; A gomb lenyomása, felengedése, pergés megszűnése
  45.     INCFSZ  0x8               ;után újraindul a program.
  46.     GOTO    $-6               ;
  47.     GOTO    MAIN              ;-------------------------------------------------
  48. GURUL                         ;
  49.     DECFSZ  0x10              ; Gurulás közben 1-6-ig változik 0X10 értéke
  50.     GOTO    KIIR              ;
  51.     MOVLW   D'6'              ;
  52.     MOVWF   0x10              ;
  53. KIIR                          ;-------------------------------------------------
  54.     INCFSZ  0x9               ; Egy kis késleltetés a látványért
  55.     GOTO    $-2               ;
  56.     MOVF    0x10, W           ;Beolvassa a 10-es memeóriarekesz tartalmát
  57.         MOVFF   PLUSW0, LATC      ;Meghívja W-vel jeölt memeóriarekeszT, és a
  58.     GOTO    GURITAS           ;tartalmát LATC-be tölti, visszatér GURITAS-ra
  59.  
  60.  
  61. ;-------------------------------------------------------------------------------
  62. INICIALIZALAS
  63.         CLRF    LATA                                            ; kimeneti portok törlése
  64.         CLRF    LATB                                            ;
  65.         CLRF    LATC                                            ;
  66.         MOVLW   B'00000001'                                     ; analóg / digitális bemenetek
  67.         MOVWF   ANSEL                                           ;
  68.         MOVLW   B'00011111'                                     ; A port
  69.         MOVWF   TRISA
  70.         MOVLW   B'00000000'                                     ; B port kimenet
  71.         MOVWF   TRISB
  72.         MOVLW   B'00000000'                                     ; C port kimenet
  73.         MOVWF   TRISC
  74.         MOVLW   B'00100010'                                     ; oszcillátor frekvenciája <4:6>
  75.         MOVWF   OSCCON                                          ; 111 = 16 MHz, 001 = 250 kHz, 000 = 31 kHz (kb óra kvarc)
  76.         BSF     T2CON,TMR2ON                ;Timer2 bekapcsolása. Nincs elő, és utóosztás.
  77.     MOVLW   D'249'                      ;Timer 2 ciklusidejének beállítása
  78.     MOVWF   PR2
  79.     MOVLW   D'6'                        ;Kocka kezdőértéke
  80.     MOVWF   0x10
  81.         RETURN
  82. ;--------------------------------------------------------------------------
  83.         END
(#) benjami válasza sonajkniz hozzászólására (») Márc 7, 2015 /
 
Nagyon nem elemeztem végig, de az fontos, hogy a nyomógomb megnyomásának lekérdezési sűrűsége és TIMER2 6 lépésének ideje ne legyen egymás egész számú többszöröse. Szélsőséges esetben akár mindig ugyanazt a számot kaphatod, ha ez a két idő megegyezik.
(#) sonajkniz válasza benjami hozzászólására (») Márc 7, 2015 /
 
A TIMER2 folyamatosan megy. Ezért a gombnyomás véletlenszerűsége egyfelől a gomb lenyomójától, másfelől a lenyomott gomb pergésétől egyaránt függ, mivel a lekérdezés nem akkor következik be amikor lenyomod a gombot, hanem amikor elengeded, és a pergés nagy biztonsággal megszünt. Így az álltalad felvázoltaknak kicsi a valószínűsége.
(#) nedudgi válasza sonajkniz hozzászólására (») Márc 7, 2015 /
 
Próbáld meg azt, hogy a kontrollert a lehető legnagyobb órajellel járatod. A TIMER2 PR2 regiszterét állítsd be a legnagyobb érték-1 értékre, tehát legyen 5. A TIMER2 mindenféle előosztás nélkül fusson - tehát a lehető legnagyobb sebességen. Ilyenkor a TMR2 regiszter értéke 0-5 között változik, eggyel növelve megkapod az 1-6 számokat.
A gombnyomás első jelére kiolvasva a TMR2-t elég jó közelítéssel kapsz véletlenszámot.
(#) sonajkniz válasza nedudgi hozzászólására (») Márc 7, 2015 /
 
Amint látom, te sem nézted át a progit. Direkt van benne egy látványefekt, hogy egy darabig vibrálnak a ledek, mielőtt beáll a végeredményre. A vibrálás ideje is véletlenszerű. 1 villanástól 240-ig. Ráadásul 0x10 értéke az előzőröl indul, tovább növelve a véletlen lehetőségét.
(#) benjami válasza nedudgi hozzászólására (») Márc 7, 2015 /
 
Pont ezt írtam, hogy nem biztos, hogy ez a megoldás a jó. Ha a TIMER2 max órajelen jár, és a gomblekérdező hurok is pont 6 utasításciklusig tart, mindig ugyanazt a számot fogod kapni.
(#) sonajkniz válasza benjami hozzászólására (») Márc 7, 2015 /
 
Igen.
"nedudgi" elvét követve, és a gomblenyomás pillanatában olvasva ki a timert, valóban ez történne.
Ezért nem így működik a program.
(#) benjami válasza sonajkniz hozzászólására (») Márc 7, 2015 /
 
Az, hogy csak később olvasod ki a timert nem jelent semmit ha ez fix idővel később történik meg (olyan mint ha egy fix értéket még hozzáadnál). Én lassítanám a TIMER2-t, egy 8-as osztással. A felső gombérzékelési ciklus során 3-al nő meg TIMER2 értéke minden ciklusban. Ez olyan mint ha a dobókockád csak 2 érték között ugrálna. Az alsónál 5-el nő, ez jobb. Ha 8-as osztást raksz bele, akkor bármelyik érték hozzáadódhat.
A hozzászólás módosítva: Márc 7, 2015
(#) sonajkniz válasza benjami hozzászólására (») Márc 7, 2015 /
 
Oké, csak az a baj TIMER2-vel, hogy csak 4-es és 16-os előosztóval rendelkezik. Melyiket válasszam?
(#) benjami válasza sonajkniz hozzászólására (») Márc 7, 2015 /
 
Akkor ki kell próbálni a 16-ost. Akkor is bármelyik számlálóállásnál esélyed van kiugrani a gombfigyelő ciklusból.
(#) sonajkniz válasza benjami hozzászólására (») Márc 7, 2015 /
 
Rendben! Kipróbálom.
(#) sonajkniz válasza benjami hozzászólására (») Márc 7, 2015 /
 
Megcsináltam, de csak azt értem el vele, hogy több lett a rövidlefutású "gurulás". Más változást nem észleltem.
(#) killbill válasza sonajkniz hozzászólására (») Márc 7, 2015 /
 
Idézet:
„Biztos igazad van, de akkor írd már le nekem, hogyan veszel rá egy processzort, hogy gondoljon egy számra!? Mert ha ez sikerül, akkor megalkodtat az "A.I."-t”

En rengeteg dolgot elmondhatnek neked, de 6 napi ittlet utan (meg amugy is) ez a hangnem nem biztos, hogy jo kezdes. Termeszetesen alveletlen generatorok vannak, es lenyegesen bonyolultabb dolgok annal, hogy ebben a topikban lehessen roluk beszelni. De egyebkent en a random_r() fuggvenyt hasznalom, de persze elotte egy srandom_r() hivassal seed-elem a generatort. Es minden bekapcsolasnal mas ertekkel seed-elem. A bekapcsolaskori mas erteket applikaciotol fuggoen oldom meg. Az egyik munkamban egy timer-t hasznalok. A bekapcsolo gomb megnyomasakor elinditom a timer-t, es a gomb elengedesekori timer ertekket adom at az srandom_r()-nek. A timer 100MHz-cel porog.
(#) benjami válasza killbill hozzászólására (») Márc 7, 2015 /
 
Azért annak a timer-nak összhangban kell lennie a proci utasításciklusidejével. Kicsit sarkítva: ha a 100MHz-es timer értékeit egy 1MHz-es processzorral olvasol ki, csak a 100 egész számú többszörösét tudod majd kiolvasni. A/D átalakítóval lehet még talán ténylegesen véletlengenenerátort csinálni, ha nem szempont a sebesség.
(#) sonajkniz válasza killbill hozzászólására (») Márc 7, 2015 /
 
Nem ált szándékomban senkit megbántani. Viszont indítottam egy remek kis vitát, ami még most is tart, és amiből mindannyian tanulhatunk. Amúgy most is azt írtad, hogy egy timer értékének kiolvasásával töltöd fel a randomgenerátort. Az abban lévő függvény ezzel az értékkel dolgozik.
Csak attól válik véletlenszerűvé, hogy mikor kapcsolod be.
Én például PLC-nél úgy generálok véletlenszámot, hogy bekapcsoláskor beolvassa az RTC-t, ami telepes táplálású, tehát mindig fut. Az aktuális napot beszorzom, a pillanatnyi másodperccel, majd az így kapott számmal matekolok egy sort. Az eredmény egy véletlen szám, denem a számítógép teremtette!
Következő: »»   641 / 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