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   522 / 1210
(#) alfoldisandor válasza nedudgi hozzászólására (») Máj 12, 2014 /
 
Így van. Nem titok: nincs időm vele foglalkozni, van sok más fizetős/határidős melóm és ezért gondoltam hogy megoldatom mással.
(#) djadji válasza alfoldisandor hozzászólására (») Máj 12, 2014 /
 
16f628-ra van egy komaparátoros programom... Illetve volt. Komaparátorral csináltam egy ADC-t. De neked nem 628hoz kell.
(#) szidom hozzászólása Máj 13, 2014 /
 
Sziasztok!

Segítséget szeretnék kérni pic16F628A programozásával kapcsolatban. Konkrétan az asm nyelvről lenne szó.
Aszinkron kommunikációval küzdök, a kérdésem az lenne: hogy tudom assembly-ben megállapítani hogy milyen adat érkezik?
Amíg csak azt kell eldönteni hogy 'A' jött-e vagy nem addig rendben van, de nekem kb. 10 különböző karaktert kellene felismernem, és mindegyikre másként reagálni.
Segítségetek előre is köszönöm!
Üdv!
(#) Hp41C válasza szidom hozzászólására (») Máj 13, 2014 / 1
 
Goooogle a barátod segít: PIC assembly switch case
A hozzászólás módosítva: Máj 13, 2014
(#) foxi63 válasza szidom hozzászólására (») Máj 13, 2014 / 1
 
Szia!
Talán így:
  1. cblock
  2. WPEMP
  3. endc
  4. RUTIN:
  5. MOVWF   WTEMP ;A VIZSGÁLANDÓ KARAKTER
  6. MOVLW 0                 ;ELSŐ ELÁGAZÁS KARAKTERE
  7. XORWF   WTEMP,W
  8. BNZ             A00
  9. GOTO            ELSŐ RUTIN
  10. A00:    MOVLW 1  ;MÁSODIK ELÁGAZÁS KARAKTERE
  11. XORWF   WTEMP,W
  12. BNZ             A01
  13. GOTO            MÁSODIK RUTIN
  14. A01:            MOVLW 02 ;ÉS SORBAN A TÖBBI
  15. ....
  16. ...
(#) szidom válasza foxi63 hozzászólására (») Máj 14, 2014 /
 
Sziasztok!
Foxi63, Hp41C!

Köszönöm a válaszokat, így már könnyebb, bár az angol nyelv tudásom nem tökéletes.
A hiba oka az volt, hogy a vett adatot egyből beolvastam a W-regbe, majd kivontam belőle egy értéket és ellenőriztem a STATUSreg Z bit-et. Most úgy csinálom hogy a vett adatot kimentem egy Temp-be, és abból vonom ki az értékeket egymás után, minden alkalommal ellenőrzöm a Z bitet. Így már megy.
(#) Hp41C válasza szidom hozzászólására (») Máj 14, 2014 /
 
Mottó:
B xor B = 0 tehát A xor B xor B = A
A xorlw művelet is állítja a Z bitet. Ha azt kell vizsgálni pl., hogy "A" vagy "Q" karakter jött és a W regiszterven van a vett karakter:
  1. xorlw 'A'
  2. btfsc STATUS,Z
  3. goto A_jott
  4. xorlw 'A' ^ 'Q'
  5. btfsc STATUS,Z
  6. goto Q_jott

Sokkal rövidebb lehet egy sokfelé történő elágazásnál.
Másik megoldás: Ha egy tartományban levő kódok jönnek pl. A..H közötti karakterek:
  1. addlw -'A'
  2. andlw 0x07
  3. movwf Temp
  4. movlw high(Table)
  5. movwf PCLATH
  6. movlw low(Table)
  7. addwf Temp,w
  8. btfsc STATUS,C
  9. incf PCLATH,f
  10. movwf PCL
  11.  
  12. Table:
  13. goto A_jott
  14. goto B_jott
  15. goto C_jott
  16. goto D_jott
  17. goto E_jott
  18. goto F_jott
  19. goto G_jott
  20. goto H_jott
A hozzászólás módosítva: Máj 14, 2014
(#) don_peter hozzászólása Máj 14, 2014 /
 
Uraim,

Timer0-val szeretnék egy 16bites megszakítást kérni, de valamiért nem megy.
Mi lehet a gond?
  1. //init()
  2. T0CONbits.T0PS0 = 1;            // Előosztás 1:256 osztásra állítása
  3. T0CONbits.T0PS1 = 1;
  4. T0CONbits.T0PS2 = 1;
  5. T0CONbits.PSA = 0;                      // Előosztás bekapcsolása
  6. T0CONbits.T08BIT = 0;           // 16 bites mód kiválasztás
  7. T0CONbits.T0CS = 0;             // Meghajtás belső órajelről
  8.  
  9. RCONbits.IPEN = 0;                      // Magas/alacsony interrupt prioritás kikapcsolása
  10. INTCONbits.TMR0IE = 1;          // Timer0 túlcsordulás interruptkérés engedélyezés
  11. INTCONbits.PEIE = 1;            // Peripheral Interrupt Enable
  12. INTCONbits.GIE= 0;                      // Megszakitások tíltása

Aztán egy függvényben indítanám el:
  1. //46004 binárisan: 10110011 10110100
  2. TMR0H = 10110011;
  3. TMR0L = 10110100;
  4. INTCONbits.GIE = 1;     // Global Interrupt Enable
  5. T0CONbits.TMR0ON = 1;   // Timer0 indítása

PIC18F4550-es kontrolleren kellene futnia.
Ha átállítom 8bites módra a timer0-t akkor egyből megy, de az nekem nem jó sajna...
20MHz-es külső kristály van csatlakoztatva és így elvileg 1másodpercenként generálna megszakítást.
Nem működik pedig elvileg kellene..
(#) KaiserA hozzászólása Máj 14, 2014 /
 
Sziasztok!

PIC32MX44F512H-s mikrokontrollert szeretnék életre kelteni, tud valaki segíteni, az alapbeállításoknál, hogy milyen h fájlokat kell includolni, és hogy milyen szintaktikát kell írni a program elejére, hogy működjön a fordító.

Köszönöm szépen!
A hozzászólás módosítva: Máj 14, 2014
(#) zenetom válasza don_peter hozzászólására (») Máj 14, 2014 /
 
A megszakításban feltöltöd a TMR0L és TMR0H-t?
Fontos, hogy először a TMR0H-t, aztán a TMR0L-nek adj értéket, az adatlapban a "TIMER0 BLOCK DIAGRAM (16-BIT MODE)" résznél az ábrán látható, hogy TMR0L regiszter írásra mozgatja be tulajdonképpen a TMR0H értékét a valódi TMR0H regiszterbe.
(#) szidom válasza Hp41C hozzászólására (») Máj 15, 2014 /
 
Üdv!
Kezdem Érteni, de még rágódnom kell rajt.
Köszi
(#) icserny válasza don_peter hozzászólására (») Máj 15, 2014 /
 
Én alapértelmezetten kétszintű megszakítást használtam a PICCOLO projektben, de akkor a INTCON2bits.TMR0IP=1; beállítás is kellett (a magas szintű megszakítás választásához).
(#) don_peter válasza icserny hozzászólására (») Máj 15, 2014 /
 
Köszi, a segítsétek.
Most már megy.

zenetom : természetesen megszakítás előtt töltöm fel.
Most már megy. Köszi a szándékot.
A hozzászólás módosítva: Máj 15, 2014
(#) icserny válasza don_peter hozzászólására (») Máj 15, 2014 /
 
Idézet:
„természetesen megszakítás előtt töltöm fel.”
Természetesen megszakításban is újra kel tölteni (erre vonatkozott Zenetom kérdése), különben nem 1000 hanem kb. 1400 ms lesz a periódusidő.

Mellesleg a Timerbe nem 18 661-et akartál írni?
  1. TMR0H = 0x48;
  2. TMR0L = 0xE5;


Timer_period = 1 s, Fcy = 12 MHz és PS = 1:256 esetén az előtöltés értéke:
Timer = 65536 - 12 000 000/256
(#) don_peter válasza icserny hozzászólására (») Máj 15, 2014 /
 
20MHz a kristály.
Minden megszakítás elején újra kell tölteni a
  1. TMR0H = ?;
  2. TMR0L = ?;

regisztereket?

Illetve még egy kérdésem lenne:
Miért nincs a LATC port RC4 és RC5-ös lábak definiálva a gyári p18f4550.h állományban?
Ezek valami speciális lábak melyeket nem lehet használni?
Vagy nem ajánlott?
  1. extern volatile near unsigned char       LATC;
  2. extern volatile near struct {
  3.   unsigned LATC0:1;
  4.   unsigned LATC1:1;
  5.   unsigned LATC2:1;
  6.   unsigned :3;
  7.   unsigned LATC6:1;
  8.   unsigned LATC7:1;
  9. } LATCbits;
A hozzászólás módosítva: Máj 15, 2014
(#) icserny válasza don_peter hozzászólására (») Máj 15, 2014 /
 
Idézet:
„Minden megszakítás elején újra kell tölteni a TMR0H, TMR0L regisztereket?”

Nem muszáj, de akkor 65536 utasításciklust számol le, ami 12 MHz FCY és 1:256 előosztó mellett kb 1400 ms.

Az kevéssé érdekes, hogy mennyi a kvarc frekvenciája, az a lényeg, hogy végeredményben mennyi a CPU frekvenciája (48 MHz), illetve az utasításciklus-frekvencia (12 MHz).

Idézet:
„Miért nincs a LATC port RC4 és RC5-ös lábak definiálva a gyári p18f4550.h állományban?”

Gondolom azért, mert ezek az USB D+ D- ki/bemenetek. Ez elvileg digitális bemenet lehet, de max. 3,6 V-ig adható rá feszültség (5 V-tal tönkre lehet tenni...). Ezek a lábak GPIO kimenetek nem lehetnek.

Mellesleg RC3 sincs definiálva, mert annak a helyén van a VUSB kivezetés.
(#) don_peter válasza icserny hozzászólására (») Máj 15, 2014 /
 
Igen közben én is rájöttem, hogy USB portok.
Akkor ezeket a biteket kihagyom.
És köszi az infókat.
(#) Hertz hozzászólása Máj 15, 2014 /
 
Sziasztok!
Kérlek segítsetek beüzemelni egy PIC12F683-ban a TIMER1-et! Szeretném, ha minden túlcsorduláskor megszakítást eredményezne. Egyelőre ezt egy led villogtatásával próbálgattam, de nem sikerült sajnos. A TIMER0-val sikerült, de a 16bit miatt kellene a Timer1.
Köszönöm előre is!
Jelenleg ez van, de nem csinál semmit:
  1. #include <p12F683.inc>
  2.      __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _IESO_OFF & _FCMEN_OFF)
  3.    
  4. CBLOCK     0x20                 ;VÁLTOZÓK
  5.         W_SAVE
  6.         STATUS_SAVE
  7. ENDC
  8.  
  9. ORG 0                           ;A PROGRAMMEMÓRIA KEZDETE
  10.         GOTO    INIT
  11.  
  12. ORG     0X4                     ;A MEGSZAKÍTÁS KEZDETE
  13.         BTFSC   PIR1,TMR1IF             ;TIMER1 MEGSZAKÍTÁS TÖRTÉNT?
  14.         GOTO    MEGSZAKÍTÁS           ;IGEN
  15. RETFIE                          ;NEM
  16.  
  17. MEGSZAKÍTÁS
  18.         BCF     STATUS,RP0              ;VÁLTÁS BANK0-BA
  19.         BCF     T1CON,TMR1ON            ;TIMER1 TILTVA
  20.         BCF     PIR1,TMR1IF             ;MEGSZAKÍTÁS JELZŐBIT TÖRLÉSE (MEGSZAKÍTÁST LEKEZELTÜK)
  21.         BSF     STATUS,RP0              ;VÁLTÁS BANK1-BE
  22.  
  23.         ;Elmentjük a Work és Status regisztereket
  24.         MOVWF   W_SAVE                  ;ELŐSZÖR A WORK REGISZTERT
  25.         MOVFW   STATUS                  ;STATUS-t bele a már lementett Workbe
  26.         MOVWF   STATUS_SAVE             ;Status_save-be beletölti a Worköt
  27.         BTFSS   GPIO,2
  28.         GOTO    BE
  29.         GOTO    KI
  30.  
  31. BE
  32.         BSF     GPIO,2
  33. GOTO    VÉGE
  34.         KI
  35. BCF     GPIO,2
  36.  
  37. VÉGE
  38.         ;Visszatöltjük a Work és Status regisztereket
  39.         MOVFW   STATUS_SAVE
  40.         MOVWF   STATUS
  41.         MOVFW   W_SAVE
  42.         BCF     STATUS,RP0              ;VÁLTÁS BANK0-BA
  43.         BSF     T1CON,TMR1ON            ;TIMER1 ENGEDÉLYEZVE
  44.         BSF     STATUS,RP0              ;VÁLTÁS BANK1-BE
  45.         RETFIE
  46.  
  47. INIT
  48.         BSF     STATUS,RP0              ;VÁLTÁS BANK1-BE
  49.         OVLW    B'01110000'
  50.         MOVWF   OSCCON                  ;Belső oszcillátor 8Mhz-re állítva
  51.         BANKSEL GPIO
  52.         CLRF    GPIO
  53.         MOVLW   B'11111111'             ;AZ ÖSSZES LÁB DIGITÁLIS KI/BEMENET
  54.         MOVWF   CMCON0
  55.         BANKSEL ANSEL
  56.         CLRF    ANSEL
  57.         MOVLW   B'00010000'             ;GP4 BEMENET, A TÖBBI KIMENET
  58.         MOVWF   TRISIO
  59.         BSF     PIE1,TMR1IE             ;TIMER1 TÚLCSORDULÁS MEGSZAKÍTÁS ENGEDÉLYEZÉSE
  60.         BSF     INTCON,GIE              ;GLOBÁLIS MEGSZAKÍTÁSOK ENGEDÉLYEZÉSE
  61.         BCF     STATUS,RP0              ;VÁLTÁS BANK0-BA
  62.         MOVLW   B'0011001'              ;TIMER1 BEKAPCSOLÁSA ÉS ELŐOSZTÁS BEÁLLÍTÁSA: (00=1:1, 01 = 1:2, 10 = 1:4, 11 = 1:8,)
  63.         MOVWF   T1CON
  64.  
  65. START
  66.         GOTO    START
  67. END
A hozzászólás módosítva: Máj 15, 2014
(#) vilmosd válasza Hertz hozzászólására (») Máj 15, 2014 /
 
  1. BSF     PIE1,TMR1IE    ;TIMER1 TÚLCSORDULÁS MEGSZAKÍTÁS ENGEDÉLYEZÉSE
  2.         BSF     INTCON,PEIE     ;Periferia MEGSZAKÍTÁSOK ENGEDÉLYEZÉSE
  3.         BSF     INTCON,GIE     ;GLOBÁLIS MEGSZAKÍTÁSOK ENGEDÉLYEZÉSE

Talan igy mukodni fog
(#) Hertz válasza vilmosd hozzászólására (») Máj 15, 2014 /
 
Köszönöm, hogy megnézted!
Beletettem a periféria megszakítás engedélyezését, ahogy írtad, de sajnos nem változott semmi.
Ha van még valami ötleted, vagy bárki másnak, annak nagyon örülnék!
(#) vilmosd válasza Hertz hozzászólására (») Máj 15, 2014 /
 
MPLAB szimulatorban probald ki a mukodeset. Ott konnyu megtalalni a hibat.
(#) ktamas66 válasza Hertz hozzászólására (») Máj 15, 2014 /
 
A GPIO nem a Bank1-ben van.
(#) vilmosd válasza vilmosd hozzászólására (») Máj 15, 2014 /
 
A 21. es a 44. sorokat kommenteld ki. Nem szukseges a bankvaltas.
(#) Hertz válasza vilmosd hozzászólására (») Máj 15, 2014 /
 
Teljesen igazad van és ktamas66-nak is! Nem mentségül, de ezeket már kínomban rontottam el.
Lényeg, hogy most remekül működik hála Nektek!

Köszönöm!!!
(#) zenetom válasza don_peter hozzászólására (») Máj 15, 2014 /
 
De mi volt végül a hiba oka?
A hozzászólás módosítva: Máj 15, 2014
(#) usane válasza zenetom hozzászólására (») Máj 15, 2014 /
 
Szerintem az amit icserny írt neki, kellett a peripherial interrupt is.
(#) zenetom válasza usane hozzászólására (») Máj 15, 2014 /
 
De amit icserny írt, az csak a magas prioritás beállítására vonatkozott. A periperial interrupt pedig a kód alapján be van kapcsolva. Valami huncutság van itt a dologban.
(#) usane válasza zenetom hozzászólására (») Máj 15, 2014 /
 
Annyira nem néztem át, most épp a saját kódommal vagyok elfoglalva
(#) zenetom válasza usane hozzászólására (») Máj 15, 2014 /
 
És éppen min dolgozol, ha szabad kérdezni?
Egyébként nekem is programozni kéne, csakhát már megint este 8 van...
(#) don_peter válasza zenetom hozzászólására (») Máj 15, 2014 /
 
Az amit te is mondtál, hogy minden megszakításnál újra fel kell tölteni a számláló regisztereket és persze az is hibádzott amit icserny említett.
Magas megszakítást engedélyezni kellett
Következő: »»   522 / 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