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   334 / 1210
(#) pjg válasza djadji hozzászólására (») Nov 26, 2012 /
 
Ehhez nem kell PIC. Egy 555-tel kivitelezett hiányzó impulzus detektort kell építs.
Bővebben: Link
(#) djadji válasza pjg hozzászólására (») Nov 27, 2012 /
 
Én PICkel szeretném megoldani, de köszönöm a linket, nagyon hasznos.
(#) hackerfish válasza vicsys hozzászólására (») Nov 27, 2012 /
 
Néztem, amit linkeltél, meg ezt is hozzá:
Bővebben: Link
Nem találom azt a részt, amivel "beolvassa" a tekercset. Tudnál ebben segíteni?
CLKIN-re és CLKOUT-ra kötöttem demoboardon.

Gyakorlás képpen ráraktam a régi led villogtató progit belső oszcillátorral. Jó rég programoztam PIC-et, most újra meg kell barátkoznom az ASM kódokkal...
Most hirtelen nem is tudom, hogy hogyan csináltam feltételes elágazást meg összehasonlítást, áttúrom a korábbi kódjaimat.
(#) hackerfish válasza hackerfish hozzászólására (») Nov 27, 2012 /
 
Ha jól látom, kivonás után a Z és C státuszregiszterekből tudom megállapítani, hogy kisebb/nagyobb/egyenlő -e két szám.
A tekercshez az jó, ha felveszek egy határértéket, amin belül mozoghat a vizsgálat? Vagyis ha csak egy picit változik az induktivitás, az lehet hogy csak attól van, hogy hozzáért valami. Gondolom a PIC-es vizsgálat jóval érzékenyebb, mint egy analóg áramkör.
(#) kaqkk válasza djadji hozzászólására (») Nov 27, 2012 /
 
A mozgás figyelése sem egy mágia : egy mágnes az egyik küllőn egy reed cső a villán
a reed kapcsol elindít egy számlást (időzítést ) ha a következő impulzus beérkezik
újraindítja , tehát ha elég lassú a számlálás akkor lassúmenetnél sem kapcsolgat ki be a lámpa .
(#) bkati hozzászólása Nov 27, 2012 /
 
CAN-busszal próbálkozom, egy elm327-et próbálok rávenni, hogy az autóval beszélgessen (Citroen C4 Picasso). Ez az elm egy PIC18F2580 kódvédett programmal + egy MCP2551 a CAN illesztéséhez. Bármilyen parancsot adok ki, CAN ERROR jelenik meg. Összekötöttem egy másik PIC-kel + MCP2551-gyel, hogy megnézzem, mit küld. Tehát most így néz ki a dolog PIC18F2580-MCP2551------MCP2551-PIC18F2480. Megnéztem szkóppal, és úgy tűnik, amikor az elm-nek adok egy ODB2-parancsot (pl. 0101), akkor az meg is érkezik az én PIC-emhez, tehát elvileg harverhiba nincs. A programomban beállítom a CAN-modult, és várom, hogy az RXB0CONbits.RXFUL értéke 1 legyen. Ekkor elvileg érkezett egy érvényes CAN-üzenet. Ekkor viszont az összes CAN-regiszter értéke 0, kivéve az RXB0SIDH, ami 0x38. Mi a fene lehet ez?

Elvileg a protokoll 29 bites ID és 250 kbps sebesség. 10 megás kvarcot használok 4-szeres PLL-lel. Így állítom be a CAN-modult:

  1. TRISBbits.TRISB2 = 0;   // CANTX kimenet
  2. TRISBbits.TRISB3 = 1;   // CANRX bemenet
  3.      
  4. CANCON = 0b10000000;
  5. while((CANSTAT & 0b11100000) != 0b10000000);
  6.      
  7. //OSC = 40 MHz, CAN = 250 kbaud
  8. //Tq = 2 * (BRP + 1) / OSC = 250 ns
  9. //Tbit = 1 / 250 kbaud = 4 us = 16 Tq
  10. //1 bit = 1 Sync + 1 Prop +  8 Phase_Seg1 + 6 Phase_Seg2
  11. BRGCON1 = 0b00000100; // SJW = 1, BRP = 4
  12. BRGCON1 = 0b10111000; // sample = 1, Phase_Seg1 = 8 Tq, Prop = 1 Tq
  13. BRGCON1 = 0b00000101; // nincs wake-up, nincs wake-up filter, Phase_Seg2 = 6 Tq
  14. ECANCON = 0; // Legacy mode (Mode 0)
  15.                                    
  16. RXB0CONbits.RXFUL = 0;  //puffer üres
  17. RXB0CONbits.RXM1 = 1;   //összes üzenet fogadása
  18. RXB0CONbits.RXM0 = 1;
  19. RXB0CONbits.RXB0DBEN = 1;
  20.      
  21. RXB1CONbits.RXFUL = 0;  //puffer üres
  22. RXB1CONbits.RXM1 = 1;   //összes üzenet fogadása
  23. RXB1CONbits.RXM0 = 1;
  24.      
  25.      
  26. RXM0SIDH = 0;   // maszk
  27. RXM0SIDL = 0;
  28.      
  29. CANCON = 0b00000000;
  30. while((CANSTAT & 0b11100000) != 0b00000000); // normál mód



Szerintem a végére a maszk nem is kell, csak olyan biztos, ami biztos alapon tettem be.

Kell még ehhez valami?
(#) foxi63 válasza Szpisti hozzászólására (») Nov 27, 2012 /
 
Hali!
Kaptál már valamilyen segítséget?
(#) foxi63 válasza Szpisti hozzászólására (») Nov 27, 2012 /
 
Hali!
Olyat tudok elképzelni, hogy illesztenénk 12 gombot a PIC-hez 0-9 szám és egy stop és egy hangerő
A program 3 gombnyomást vár (0-199) dallam és a (hangerő+0-7) gombokat a hangerő állításához..
(#) promax hozzászólása Nov 27, 2012 /
 
Megszakítással kapcsoltos kérdésem lenne:
A
  1. retfie 1

használatakor az árnyékregiszterbe elmentett W, STATUS és a BSR visszaírodnak. Mivel a shadow regiszter csak 1 szintű, ezért a fenti utasítással csak a magas prioritású megszakításból lehet visszatérni, és az alacsonynál nem használható? (Mert azt is megszakíthatja egy magas?)
Elvileg az is bekövetkezhet, hogy egy magas prioritású megszakítás kiszolgálása közben kapunk egy másik magas prioritású megszakítást. Ekkor el fogjuk veszteni a fenti értékeket, illetve felülítódik.
Hogyan őrizzük meg az eredetit? Fel kell készülni programban a mentésére?
A hozzászólás módosítva: Nov 27, 2012
(#) kissi válasza promax hozzászólására (») Nov 27, 2012 /
 
Szia!

Megszakítást csak magasabb szintű megszakítás szakíthat meg --> magas szintű megszakítást nincs, ami megszakítson, tehát nem kell félned a felülírástól ( addig nem engedélyez megszakítás elfogadást, amíg a kiszolgálásban vagy, GIE bit automatikusan állítódik!).
Az alacsony szintűnél jól láttad, ott azért nem jó, mert azt egy magasabb megszakíthatja és akkor tényleg oda a mentett érték ( ott neked kell gondoskodni mentésről plusz memória igénybevételével !).

Steve!
(#) compaqamplifier hozzászólása Nov 27, 2012 /
 
Üdv, ez elméletileg egy midi vezérlő agya lenne:
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;9090 firmware
  3. ;
  4. ;
  5. ;Copyright Trevor Page 2001,2002
  6. ;
  7. ;http://introspectiv.org/
  8. ;
  9. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  10. ;
  11. ; D E V E L O P M E N T   H I S T O R Y
  12. ;
  13. ; This is VERSION 1.2
  14. ;
  15. ; November 2002: Problems with velocity
  16. ; problems have been solved.
  17. ;
  18. ; December: stupid crappy running status prob solved.
  19. ;
  20. ;
  21. ;
  22. ;
  23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  24.  
  25.  
  26. ;Code contains a lot of crappy comments I left for myself, which
  27. ;are probably better off just being ignored. The code has now
  28. ;been well-tested and this is the final version of it.
  29.  
  30.  
  31.  
  32. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  33. ;                       Port Usage:
  34. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  35. ; RB0/INT: MIDI input  
  36. ; RB1 to RB6 - data lines
  37. ; RB7: sync output - to Q87
  38. ; RA0: DAC clock       
  39. ; RA1: first 40174 (U43) latch 
  40. ; RA2: second 40174 (U41) latch
  41. ; RA3: enable line for BOTH 4051's
  42. ; RA4: MIDI LED (sink; 0V = LED on)
  43. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  44.  
  45.  
  46. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  47. ;    Mapping of PortB to latches and R-2R array
  48. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  49. ;       4174(0) 4174(1)         DAC-R2R/BIT
  50. ;RB1    ride    hh              10K     bit4
  51. ;RB2    hhsel   ?midtom         40K     bit2
  52. ;RB3    sync    ?lowtom         160K    bit0
  53. ;RB4    hitom   ?snaredrum      80K     bit1
  54. ;RB5    h'clap  ?bassdrum       20K     bit3
  55. ;RB6    crash   r'shot          5K      bit5
  56. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  57.  
  58.  
  59.  
  60. #define trig_rimshot    bsf triggers1,6 ;      
  61. #define trig_handclap   bsf triggers0,5 ;
  62.  
  63. #define trig_bassdrum   bsf triggers1,3 ;
  64. #define trig_snaredrum  bsf triggers1,4 ;
  65. #define trig_lowtom     bsf triggers1,5 ;
  66. #define trig_midtom     bsf triggers1,2 ;
  67.  
  68. #define trig_hightom    bsf triggers0,4 ;
  69. #define trig_hihat      bsf triggers1,1 ;
  70. #define trig_crash      bsf triggers0,6 ;
  71. #define trig_ride       bsf triggers0,1 ;
  72. #define sel_openhat     bcf flags,hhsel ;;;nop          ;  
  73. #define sel_closedhat   bsf flags,hhsel ;;;;bsf triggers0,2     ;
  74.  
  75. OPT_reg equ h'01'               ;Option register (BANK 1)
  76. RBPU    equ 7                   ;Port B weak pull-ups enable: 0 = enable.
  77. INTEDG  equ 6                   ;Interrupt edge selection bit: 0 = interrupt on falling edge on RB0/INT pin.
  78. T0CS    equ 5                   ;TMR0 clock source selection: 0 = internal instruction cycle clock , 1 = RA4
  79. T0SE    equ 4                   ;TMR0 source edge select bit
  80. PSA     equ 3                   ;Prescaler assignment : 1 = WDT, 0 = TMR0
  81. PS2     equ 2                   ;Prescaler rate selection bits
  82. PS1     equ 1                   ;       "       "
  83. PS0     equ 0                   ;       "       "
  84.                                 ;
  85. INTCON  equ h'0B'               ;Interrupt Control Register
  86. GIE     equ 7                   ;Global Interrupt Enable: Set to enable all un-masked interrupts
  87. EEIE    equ 6                   ;EE write complete timer interrupt enable :     1 = enable
  88. T0IE    equ 5                   ;Timer 0 overflow interrupt enable :            1 = enable
  89. INTE    equ 4                   ;External interrupt RB0/INT pin enable :        1 = enable
  90. RBIE    equ 3                   ;Port B pin change interrupts (RB7:RB4) enable :1 = enable
  91. T0IF    equ 2                   ;Timer 0 overflow interrupt flag        :must be cleared in software
  92. INTF    equ 1                   ;External interrupt RB0/INT flag        :must be cleared in software???
  93. RBIF    equ 0                   ;Port B pin change interrupt flag       :must be cleared in software
  94.  
  95.  
  96.  
  97. key_bassdrum:   equ h'48'
  98. key_snaredrum:  equ h'49'
  99. key_lowtom:     equ h'50'
  100. key_midtom:     equ h'51'
  101. key_hightom:    equ h'40'
  102. key_handclap:   equ h'3e'
  103. key_rimshot:    equ h'3c'
  104. key_crash:      equ h'41'
  105. key_ride:       equ h'43'
  106. key_openhat:    equ h'45'
  107. key_closedhat:  equ h'47'

Ez van benne, működő képes?
(#) promax válasza kissi hozzászólására (») Nov 27, 2012 /
 
Igen ez eddig rendben van, de az az eset érdekes lehet, mikor a magas megszakítás kiszolgálás ideje alatt létrejön egy másik magas megszakítás igény is. (pl. Timer) Ez persze nem szakít meg, de az első lefutása után ismét visszatérünk azonnal a megszakítás vektorra, és kezdődik annak a kiszolgálása.
Egy retfie 1 után visszatölt, majd az ismételt megszakítással ujra betölt. Cáfolva a fenti hozzászólásomat tehát nem vesztünk W, STATUS és a BSR adatokat így sem, tehát magas prioritásnál hiba nélkül használhatjuk a retfie 1 uatasítást (mindig?).
Jól gondolom?
(#) bbalazs_ válasza bkati hozzászólására (») Nov 27, 2012 /
 
Az elm327 ugye valamilyen protocollal tarsalog a PC-vel (talan soros).
Egy terminalprogival kellene eloszor ramenni, hogy az inicialast, bejelentkezest csinalja-e rendben.
Rajta vannak a lezarok a CAN vegen, ahogy a doksi emliti?
(#) kissi válasza promax hozzászólására (») Nov 27, 2012 /
 
Igen, jól gondolod, ezt írtam az előbb is...

Steve
(#) bkati válasza bbalazs_ hozzászólására (») Nov 27, 2012 /
 
Igen, soros. Ott tudok is beszélgetni az elm-mel, tudom olvasni a regisztereit, beállítani őket, utasításokat adni neki, és válaszolgat is szépen. De a soros portja csak a felhasználó felé történő kommunikációra van, ott nem látom, mi megy ki a CANRX-en és CANTX-en. Ezért akartam egy másik PIC-kel megnézni.
(#) nedudgi válasza compaqamplifier hozzászólására (») Nov 28, 2012 /
 
Ez nagyon kevés. Ez a deklaráció eleje, egy végrehajtható utasítást sem látok.
MPASM biztosan nem eszi meg.
A hozzászólás módosítva: Nov 28, 2012
(#) Szpisti válasza foxi63 hozzászólására (») Nov 28, 2012 /
 
Igen megkerestek priviben, és úgy tűnik a dolog már sínen van.
A megoldás úgy fog működni, hogy a 32 nyomógomb bármelyikének megnyomásakor egy hangeffekt meg fog szólalni.
Amire gondoltál azt valószínű magam is megoldottam volna bináris dekódolással, de itt a gomb-kombinációk nyomkodása nem megoldás sajnos.
Köszönöm hogy reagáltál!.
A hozzászólás módosítva: Nov 28, 2012
(#) Hp41C válasza promax hozzászólására (») Nov 28, 2012 /
 
Szia
Idézet:
„...tehát magas prioritásnál hiba nélkül használhatjuk a retfie 1 uatasítást (mindig?)”


Ameddig a GIEH kezelését a retfie utasításra bízzuk. Ha a megszakítási rutinban 1 -re állítjuk más utasítással a GIEH -t, akkor az engedélyezés azonnal érvényre jut, még mielőtt visszatért volva a program. A beérkezett kérés kiszolgálása elkezdődik, ami felülírja a regiszterek mentett értékét.
(#) kissi válasza Hp41C hozzászólására (») Nov 28, 2012 /
 
Szia!
Idézet:
„Ameddig a GIEH kezelését a retfie utasításra bízzuk. Ha a megszakítási rutinban 1 -re állítjuk más utasítással a GIEH -t, akkor az engedélyezés azonnal érvényre jut, még mielőtt visszatért volva a program.”

Ennek mi lenne az értelme ?!

Steve
(#) Hp41C válasza kissi hozzászólására (») Nov 28, 2012 /
 
Szia!
Elrettentés, attól, amit sok - sok programban lehet látni, hogy törlik és 1 -be állítják a GIE (12F, 16F) vagy GIEH, GIEL (18F) biteket a megszakítási rutonokban. Nem árt, ha pontosan tudjuk, milyen következménnyel jár.
(#) compaqamplifier válasza nedudgi hozzászólására (») Nov 28, 2012 /
 
Mérnem görgetsz lejjebb?
(#) nedudgi válasza compaqamplifier hozzászólására (») Nov 28, 2012 /
 
Hova görgessek, ha 108 sort mutat az a kód?
(#) icserny válasza compaqamplifier hozzászólására (») Nov 28, 2012 /
 
Lentebb is csak #define és EQU sorok láthatók.
(#) Szpisti válasza compaqamplifier hozzászólására (») Nov 28, 2012 /
 
Mi lesz ebből, csak nem valami dob vezérlés??? Az enyém már működik
(#) compaqamplifier válasza icserny hozzászólására (») Nov 28, 2012 /
 
Oké, ezek szeriint nem is az egészet rakta be:s amúgy működik, megkérdeztem valakit.
(#) icserny válasza compaqamplifier hozzászólására (») Nov 29, 2012 /
 
Idézet:
„s amúgy működik”
Most már csak azt nem tudjuk, hogy mi működik, s vajon mitől működik...
(#) szabolcsx hozzászólása Nov 29, 2012 /
 
Sziasztok, egy 16F877A-s PIC-el szeretnék soros porton adatokat küldeni a számítógépnek, de valamiért nem működik szimulátoron kívül. Itt a rajz ami szerint dolgoztam. Ha a MAX232 chipnél összekötöm az RX-TX lábakat, visszaküldi amit kapott a számítógéptől, szóval az jó kell hogy legyen. Valami a PIC-el vagy a forráskóddal van és nem tudom, hogy mi. Már két PIC-el is megpróbáltam, de semmi változás sincs. Próbáltam olyan kódokkal is amit például a HI-TECH C-vel adtak, de az is csak szimulátorban működik. Azt is próbáltam, hogy a MAX232 chip és a PIC között felcseréltem az RX-TX-et, de az sem oldott meg semmit. Szerintetek mi lehet a gond?
  1. list    p = 16f877a
  2.         include p16f877a.inc
  3.  
  4. rs232init       macro
  5.         banksel TRISC
  6.         movlw   0xc0
  7.         movwf   TRISC
  8.         banksel TXSTA
  9.         bsf             TXSTA, TXEN
  10.         bsf             TXSTA, BRGH
  11.         movlw   0x81
  12.         movwf   SPBRG
  13.         banksel RCSTA
  14.         bsf             RCSTA, SPEN
  15.         bsf             RCSTA, CREN
  16.         endm
  17.        
  18.         org             0x00
  19.         goto    reset
  20.        
  21.         org             0x04
  22.         goto    isr
  23.  
  24. reset
  25.         rs232init
  26.         call    message
  27.         goto    reset
  28.  
  29. isr
  30.         retfie
  31.        
  32. send
  33.         banksel TXSTA
  34.         btfss   TXSTA, TRMT
  35.         goto $-1
  36.  
  37.         banksel TXREG
  38.         movwf   TXREG
  39.         return
  40.  
  41. message
  42.         movlw   'H'
  43.         call    send
  44.         movlw   'e'
  45.         call    send
  46.         movlw   'l'
  47.         call    send
  48.         movlw   'l'
  49.         call    send
  50.         movlw   'o'
  51.         call    send
  52.         movlw   ' '
  53.         call    send
  54.         movlw   'W'
  55.         call    send
  56.         movlw   'o'
  57.         call    send
  58.         movlw   'r'
  59.         call    send
  60.         movlw   'l'
  61.         call    send
  62.         movlw   'd'
  63.         call    send
  64.         movlw   '!'
  65.         call    send
  66.         movlw   0x0d
  67.         call    send
  68.         movlw   0x0a
  69.         call    send
  70.         return
  71.        
  72.         end
(#) benjami válasza szabolcsx hozzászólására (») Nov 29, 2012 / 1
 
Első ránézésre: nem állítottad be TX (RC6) lábat kimenetnek.
(#) kissi válasza szabolcsx hozzászólására (») Nov 29, 2012 / 1
 
Szia!
Ha a szimulátorban megy, akkor lehet, hogy pl. a konfigurációs biteket nem jól állítottad be !?
Steve
(#) compaqamplifier válasza icserny hozzászólására (») Nov 29, 2012 /
 
Midi vezérlő lenne, fel is töltöm akkor az asm-et
A hozzászólás módosítva: Nov 29, 2012

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