Fórum témák
» Több friss téma |
HW PWMSziasztok!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ű.
A hozzászólás módosítva: Okt 13, 2024
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.
Átírtam, de így sem megy.
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.
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.
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.
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:
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.
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.
Idézet: Ez milyen utasítás? Sosem találkoztam még vele.„molvb ANSELA” 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?
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ő.
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.
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
utasítás a 0x050 című regiszter tartalmát olvassa ki a WREG -ben. a
utasítás a WREG tartalmát írja a PORTA regiszterbe, az 0xF89 címre. De a
utasítás mind a két (nem ACCESS bankbeli) regiszter teljes (12 bites) címét tartalmazza, nem használja a BSR regisztert.
Köszönöm!
Akkor egy konkrét kérdés. hogy kell kezelni a
parancsot?
A banksel makrót is használhatod:
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....
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
Idézet: Kihalóban lévő faj vagyunk... „Új stílus van a Microchp -nél: Ugyan ki akar ma assemblyben programozni....”
Nem. A kis, 8 bites uc-k vannak kihaloban, es/vagy dragabbak mint a modernebb 32 bitesek. Azokat pedig valoban, ki akarna assemblyben programozni.
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. 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. 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.
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.
MP Lab stimulusEgy 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.
A debugger / Stimulus lapon be lehet állítani. Ld. csatolt állományok.
Köszönöm szépen! Megpróbáltam a leírás alapján beállítani, de mégsem működik.
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.
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
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.
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.
|
Bejelentkezés
Hirdetés |