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   1209 / 1210
(#) Pali79 hozzászólása Okt 13, 2024 /
 

HW PWM

Sziasztok!
Egy PIC18F67K40 típussal játszom. Szeretnék pwm-et beállítani, de sehogy sem akar működni. Már oda vissza átnyálaztam az adatlapot, de nem értem mit rontok el. A CCP1-et használnám, ami az RE5 láb. Betettem egy BTG-t az RE2 lábra, hogy lássam, fut a program. A kitöltési tényező és a periódus idő beállítása egyenlőre véletlenszerű.
  1. Setup
  2.         clrf    LATA    ;kimeneti portok törlése
  3.         clrf    LATB
  4.         clrf    LATC
  5.         clrf    LATD
  6.         clrf    LATE
  7.         clrf    LATF
  8.         clrf    LATG
  9.         clrf    LATH
  10.         clrf    PORTA   ;bemeneti portok törlése
  11.         clrf    PORTB
  12.         clrf    PORTC
  13.         clrf    PORTD
  14.         clrf    PORTE
  15.         clrf    PORTF
  16.         clrf    PORTG
  17.         clrf    PORTH
  18.         clrf    ANSELA  ;minden láb digitális
  19.         clrf    ANSELB
  20.         clrf    ANSELD
  21.         clrf    ANSELE
  22.         clrf    ANSELF
  23.         clrf    ANSELG
  24.         clrf    TRISA   ;minden láb kimenet
  25.         clrf    TRISB
  26.         clrf    TRISC
  27.         clrf    TRISD
  28.         clrf    TRISE
  29.         clrf    TRISF
  30.         clrf    TRISG
  31.         clrf    TRISH
  32.        
  33. HW_PWM
  34.         movlw   b'00100101'
  35.         movwf   RE5PPS
  36.         movlw   .200
  37.         movwf   T2PR
  38.         movlw   .125
  39.         movwf   CCPR2L
  40.         movwf   CCPR2H
  41.         movlw   b'10001100'
  42.         movwf   CCP1CON
  43.         movlw   b'00000001'
  44.         movwf   T2CLKCON
  45.         movlw   b'10000000'
  46.         movwf   T2CON
  47.  
  48. ;==================================================
  49. ;               Fő program
  50. ;==================================================
  51. Main
  52.         btg     LATE,2
  53.         nop
  54.         goto    Main
A hozzászólás módosítva: Okt 13, 2024
(#) Bakman válasza Pali79 hozzászólására (») Okt 13, 2024 / 1
 
RE5PPS. Adatlap szerint a CCP1 kódja 0b00000101 és nem 0b00100101. 0b00100101 = 0x25, ilyen számú periféria nincs, az utolsó a 0x21-es (ADGRDB).

CCP1-et akarsz használni de CCPR2L és CCPR2H van a kódban.

Nem látom, hol írod a CCPTMRS0 regisztert, CCP1 alapesetben Timer4-et használja PWM üzemmódban.
(#) Pali79 válasza Bakman hozzászólására (») Okt 13, 2024 /
 
Átírtam, de így sem megy.
  1. HW_PWM_setup
  2.         movlw   b'00000101'
  3.         movwf   RE5PPS
  4.         clrf    CCPTMRS0
  5.         clrf    CCPTMRS1
  6.         movlw   .200
  7.         movwf   T2PR
  8.         movlw   .125
  9.         movwf   CCPR1L
  10.         movwf   CCPR1H
  11.         movlw   b'10001100'
  12.         movwf   CCP1CON
  13.         movlw   b'00000001'
  14.         movwf   T2CLKCON
  15.         movlw   b'10000000'
  16.         movwf   T2CON


Viszont közben lett egy másik probléma is. Beállítottam egy timer0 megszakítást, de ez sem működik. A szimulátor szerint a timer fut, de nem fut megszakításra, mert a bsf PIE0,TMR0IE nem hajtódik végre.

  1. TMR0_setup
  2.         movlw   b'00000000'
  3.         movwf   T0CON0
  4.         movlw   b'01000000'
  5.         movwf   T0CON1
  6.         bsf     INTCON,GIE
  7.         bsf     INTCON,PEIE
  8.         bsf     PIE0,TMR0IE
  9.         bcf     IPR0,TMR0IP
  10.         bsf     T0CON0,T0EN
(#) Bakman válasza Pali79 hozzászólására (») Okt 14, 2024 /
 
Az eredményeket csak szimulátorban nézed vagy valós PIC-en is? Utóbbit is próbáld ki, szimulátor szeret, nagyon szeret tévedni.

Errata doksiban van Timer0 hiba, szinkron üzemmódban nem működik.
(#) Pali79 válasza Bakman hozzászólására (») Okt 14, 2024 /
 
Az eredményt nem, de a lábak működését néztem.
Idézet:
„Errata doksiban van Timer0 hiba, szinkron üzemmódban nem működik.”

Köszönöm, ezt megnézem később.
(#) Hp41C válasza Pali79 hozzászólására (») Okt 14, 2024 / 1
 
Régen volt csak igaz az az állítás, hogy a PIC18 típusokon nem kell törődni a bankváltással.
A 18F67K40 -ben már olyan sok SFR van, hogy nem férnek el az ACCESS bankban. A regiszterek beállításánál meg kell adni az utasításban, hogy az ACCESS bankot vagy a BSR regiszter által kijelölt bankot használja.
pl:
  1. clrf PORTA, ACCESS
  2. molvb ANSELA
  3. clrf ANSELA, BANKED

Az ANSELA címe 0x0E92, tehát nem az ACCESS bank területére esik.

Át kell nézni az összes regiszter elérést ilyen szempontból.
(#) Pali79 válasza Hp41C hozzászólására (») Okt 14, 2024 /
 
Köszönöm, sejtettem, hogy ilyesmi gond lesz. A szimulátorban a nem reagáló regiszterek olyanok, mint amikor PIC16F-nél elfelejtettem bankot váltani.
(#) Pali79 válasza Hp41C hozzászólására (») Okt 14, 2024 /
 
Idézet:
„molvb ANSELA”
Ez milyen utasítás? Sosem találkoztam még vele.

Próbáltam kihámozni az adatlapot, de nem biztos, hogy jól értem. Úgy nézem, az access kezdő címe 0x0F60. Ha minden igaz ez az ADCON0 regiszter. Tehát ami az adatlapon a 639. oldalon kezdődő táblázatban e cím előtt van, kb 280 regiszter az már nem az access területén van?
(#) Hp41C válasza Pali79 hozzászólására (») Okt 14, 2024 /
 
Az adatlap 763. oldalán van a movlb utasítás, ami beállítja a BSR regisztert a WREG módosítása nélkül. A 126. oldalon egy memóriatérképet találsz, amin a legfelső zöld csíkkal jelzett regiszterek (0x00-0x5F) elérhető az ACCESS bankkal. A többi a BSR-t felhasználva BANKED módon vagy indirekt címzéssel vagy a movff utasítással kezelhető.
(#) Pali79 válasza Hp41C hozzászólására (») Okt 14, 2024 /
 
Még mindig nem értem teljesen. Az általad linkelt adatlap 699. oldalán kezdődő táblázat (és az include fáljban is) szerint az első címen PPSLOCK regiszter van aminek a címe 0x0DEF. Azt írja, hogy a 0x0000 és a 0x0DEF között nincs használható. Az általad írt példából azt veszem ki, hogy a PORTA regiszter az acces területen van, de a címe 0x0F89. Ez (szerintem) kívűl esik a 0x00-0x5F tartományon. Vagy nem?
Bocsi, hogy ennyit értetlenkedek, de ha ezt nem fogom fel, nem tudom ezt a PIC-et normálisan használni.
(#) Hp41C válasza Pali79 hozzászólására (») Okt 14, 2024 / 1
 
Alap utasítás rendszerben:
Az ACCESS bank két részből áll:
0x00 - 0x5F - a 0. bank GPR regiszterei (0x000 - 0x05F)
0x60 - 0xFF - a 15. bank SFR regiszterei (0xF60 - 0xFFF)

Szóval a
  1. movf 0x50,w, ACCESS

utasítás a 0x050 című regiszter tartalmát olvassa ki a WREG -ben.
a
  1. movwf PORTA, ACCESS

utasítás a WREG tartalmát írja a PORTA regiszterbe, az 0xF89 címre.

De a
  1. movff  T8PR,FRVCON;  azaz
  2. movff  0xF29,0xEC4

utasítás mind a két (nem ACCESS bankbeli) regiszter teljes (12 bites) címét tartalmazza, nem használja a BSR regisztert.
(#) Pali79 válasza Hp41C hozzászólására (») Okt 14, 2024 /
 
Köszönöm!
Akkor egy konkrét kérdés. hogy kell kezelni a
  1. bsf     PIE0,TMR0IE

parancsot?
(#) Hp41C válasza Pali79 hozzászólására (») Okt 15, 2024 /
 
A banksel makrót is használhatod:
  1. banksel    PIE0
  2. bsf     PIE0,TMR0IE
(#) Pali79 válasza Hp41C hozzászólására (») Okt 15, 2024 /
 
Köszönöm, így most működik.
Az még mindig nem világos, hogy honnan látom az adatlapból, hogy melyik regiszter melyik területen van. Régen a 16F628A adatlapjában olyan szépen benne volt egy táblázatban, hogy melyik regiszter melyik bankban van, totál egyértelmű volt. Ezt miért nem lehet így megcsinálni....
(#) Hp41C válasza Pali79 hozzászólására (») Okt 15, 2024 /
 
Szia!

A regiszter címének felső 4 bitje adja meg a bank sorszámát. Pl:
FRVCON címe 0xEC4 - A regiszter a 0xE, decimálisan a 14. bankban érhető el.

Új stílus van a Microchp -nél: Ugyan ki akar ma assemblyben programozni....
Keress egy régebbi adatlapot, abba a 102. oldaltól ott a táblázat, amit keresel.
A hozzászólás módosítva: Okt 15, 2024
(#) Pali79 válasza Hp41C hozzászólására (») Okt 16, 2024 /
 
Idézet:
„Új stílus van a Microchp -nél: Ugyan ki akar ma assemblyben programozni....”
Kihalóban lévő faj vagyunk...
(#) usane válasza Pali79 hozzászólására (») Okt 16, 2024 /
 
Nem. A kis, 8 bites uc-k vannak kihaloban, es/vagy dragabbak mint a modernebb 32 bitesek. Azokat pedig valoban, ki akarna assemblyben programozni.
(#) zenetom válasza usane hozzászólására (») Okt 16, 2024 /
 
Ez valahol szomorú.
Már lassan egy LED villogtatóhoz is ARM processzort használnak.
Persze tök jó dolgokat lehet csinálni, most pl. ESP32-t programozgatok C nyelven Visual Studio Code-ban. De már látom magam előtt, hogy ha x év múlva hozzá akarok nyúlni a kódhoz, akkor lehet kuka az egész, mert inkompatibilis lesz már az új verzió a kódommal. Mint ahogy az az esetek 99%-ban lenni szokott.
(#) Pali79 válasza usane hozzászólására (») Okt 17, 2024 /
 
Idézet:
„A kis, 8 bites uc-k vannak kihaloban...”

Ez egyáltalán nem igaz. Ha csak a PIC kinálatot nézem 580 féle 8 bites van forgalomban, 265 féle 24 bites és 229 féle 32 bites. Az való igaz, hogy a régi 8 bitesek amik már ritkaság számba mennek, már drágábbak de mindig lehet olcsó alternatívát találni és az assembly kódot migrálni nem olyan nagy dolog ha normálisan, igényesen van megírva.
(#) sonajkniz válasza zenetom hozzászólására (») Okt 17, 2024 / 1
 
Idézet:
„inkompatibilis lesz már az új verzió a kódommal”

Ehhez még csak a hardvernek sem kell változnia.
Ugyanaz a PLC, csak az alapszoftverét "fejlesztgetik" meg persze a fejlesztőkörnyezetet.
Egyszercsak az eddig hibátlan, jópár gépre feltöltött programomat a fejlesztőkörnyezet kidobja, mint hibásan megírt szoftvert.
(#) benjami válasza zenetom hozzászólására (») Okt 17, 2024 / 1
 
Azért egy 32 bites procira már célszerű úgy megírni a programot, hogy rétegekre legyen bontva. Ebben az esetben másik procira történő átköltöztetéskor csak a legalsó (hardverközeli) réteget kell módosítani, a program logikáját tartalmazó felsőbb réteg(ek) változatlanok maradhatnak (vagy csak minimális mértékben kell rajtuk módosítani). Nagyobb gond inkább akkor van, ha a program nagyrészt idegenek által megírt kódokra és/vagy "lib"-ekre támaszkodik, amik a prociváltás után már nem elérhetőek.
(#) Pali79 hozzászólása Okt 22, 2024 /
 

MP Lab stimulus

Egy alkalmazásban a Timer1-et külső 32,768 kHz-es órajelről járatom. A régi Mp lab szimulátorban a stimulust be lehet állítani, hogy ennek megfelelően működjön? Egy kicsit magas nekem ez a része.
(#) Hp41C válasza Pali79 hozzászólására (») Okt 23, 2024 / 1
 
A debugger / Stimulus lapon be lehet állítani. Ld. csatolt állományok.
(#) Pali79 válasza Hp41C hozzászólására (») Okt 23, 2024 /
 
Köszönöm szépen! Megpróbáltam a leírás alapján beállítani, de mégsem működik.

stim.jpg
    
(#) KBal76 válasza Pali79 hozzászólására (») Okt 23, 2024 /
 
Miben fogod tervezni a panelt? Ha teljesen véletlen Proteusban, ott a F628A szimulációja támogatott, jóval könnyebb lehet megoldani amit tesztelnél.
(#) Pali79 válasza KBal76 hozzászólására (») Okt 23, 2024 /
 
Ehhez nem tervezek panelt. A proteust én ott húztam le, amikor egy valóságban működő kódra azt mutatta, hogy nem működik, pedig egy egyszerű LCD kijelző meghajtó volt. Az Mplab nem annyira szemléletes, de legalább működik.
A hozzászólás módosítva: Okt 23, 2024
(#) Hp41C válasza Pali79 hozzászólására (») Okt 23, 2024 / 1
 
A TRISB 7. és 6. bitje hogyan áll? Bemenetek?
Nálam 8.90-ben a T1CKI -ra adott Clock Stimulus a működés látszatát kelti.
(#) Pali79 válasza Hp41C hozzászólására (») Okt 23, 2024 /
 
Köszi ez volt a baj. Az adatlap azt írja, hogy a timer1 külső órajel beállítása, figyelmen kívűl hagyja a TRIS regiszterek állapotát és bemenetként működik. Ezek szerint a szimulátor ezt figyelmen kívűl hagyja.
(#) Hp41C válasza Pali79 hozzászólására (») Okt 23, 2024 / 1
 
Minden nem lehet tökéletes..
(#) Pali79 válasza Hp41C hozzászólására (») Okt 23, 2024 /
 
Ez legyen a legnagyobb baj!
Következő: »»   1209 / 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