Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Itt volt a baj...
Teljesen jól megy, tapogatom, nem őrül meg a program. Nagyon köszönöm a tippet. Ment a like!
Egészségedre
Ez az LVP megviccelt a PIC16F628A esetén. Ha be van kapcsolva, akkor a korábban említett probléma jelentkezik, azonban ha kikapcsolom és úgy égetem be a flowcoddal, akkor "Memory Adress Error" hibát dob. Ha viszont a PICKIT2 saját programjával égetem be úgy, hogy manuálsan választom ki a PIC eszközt, akkor helyesen fut a program.
PIC16F873 esetén ha kikapcsolom az LVP-t és a flowcode-on belül égetem, akkor hibátlan. Ideális beállításokat szeretnék valahol találni PIC-ekhez flowcodon belül. Leginkább a PIC16F628A, PIC16F873A, PIC16F877A. A hozzászólás módosítva: Dec 3, 2021
Korábban írtam már hogy konfiguráld kimenetnek az RB0-t. Vagy ha bemenet akkor ne hagyd lebegve.
Már próbáltam, nem segített. Csak az LVP kikapcsolás segít, de a 628A esetén más programozó szoftver kell. A Flowcode nem hajlandó beégetni, ha az LVP ki van kapcsolva. Érdekes, mert a 873A-t meg gond nélkül megcsinálja.
Én soha nem használtam az LVP-t. Valószínűleg ezért nem jelentkezett a probléma nálam. Abban teljesen biztos vagyok, hogy valamelyik láb bemenetként zavarjelet szed össze nálad. Szerintem égess PICKIT2-vel és hagyd az LVP-t. Úgy értem normál módban égetve. LVP kikapcsolva.
A hozzászólás módosítva: Dec 3, 2021
Egyetértek. Ezt a metódust fogom használni. Flowcode-ot nemrég használok, ismerkedem a PIC konfigurációs ablakkal.
Sziasztok,
Egy gyors kérdésem lenne.. Egy 16f684-es arra használok, hogy órajel generátor legyen egy másik PIC felé - a PIC PWM perifériáját használom, 50%-os fix kitöltéssel. Azt hogy működik vagy sem úgy akarok ellenőrizni, hogy az előállított órajelet (65536Hz vagy 32768Hz .. átkapcsolható) rávezetem a PIC EXT_IT lábára és mérem az IT-k közötti időt. Érdemes valamit tenni a két láb közé, vagy simán összeköthető a két láb - az egyik kimenet a másik bemenet tehát elvileg nem lehet baj - induláskor mindkettő bemenetkén áll fel, tehát itt sem lehet gond?? Van valakinek ilyen irányú tapasztalata? Köszi a segítséget előre is...
Ha mind a kettő azonos tápfeszültségre van kötve, akkor nincs szükség plusz alkatrészre, a két kivezetés közvetlenül összeköthető.
Ezt nem értem ..?
Egy PIC-en belül akarom összekötni (RC5 lábat (PWM kimenet) az RA2 lábbal (External IT) direktbe) tehát milyen 2 tápfeszre gondolsz? Idézet: !?„órajel generátor legyen egy másik PIC felé” Szerintem ebből adódott a félreértés... A hozzászólás módosítva: Dec 30, 2021
Aha..
Nem, a másik PIC felé nem gond, mert annak az órajel bemenetét fogom hajtani és ott nem gond. Az egy PIC-en belüli visszacsatolást viszont még nem próbáltam és nem tudom mire számíthatok. A két PIC különben közös tápfeszt kap, tehát ez a feltétel nem lenne gond....
Össze lehet kötni a két lábat közvetlenül. Mivel minden láb bemenet (és analóg módban van) a reset után. A programban ügyelni kell nehogy a két lábat egyszerre állítsuk kimenetre.
Van néhány kivétel: - Órajel lábak: más lábbal összekötve bizonytalan lehet az oszcillátor indulása. - ICSP kivezetések: Más célra való felhasználásuk esetén a felprogramozásuk előtt néhány ms -ot várni kell - időt kell biztosítani a programozónak a kapcsolat felvételére. - PDM láb: A mennyiben az alacsony feszültségű programozás engedélyezett, fix szintet kell adni a lábra. - Van néhány modul, ami a felprogramozása után önállóan vezérli a hozzá tartozó lábat felülírva a TRIS regiszter által előírt módot. A hozzászólás módosítva: Dec 31, 2021
Köszi a tanácsot ... ki fogom próbálni..
De akkor már lenne még egy kérdésem. Van a Microchip-nek egy új kontrollere - 18F06Q41. Imádom, mert csak 14 lábú, de van 3 külső megszakítás bemenete és létezik benne egy 16 bites PWM periféria a CCP modul PWM-jén kívül (a CCP PWM formációja csak 10bites ami nem igazán elég szervó vezérléshez a modellezésben). Én a CCS C fejlesztőjét használom és nem találok benne segítséget vagy támogatást a különálló PWM periféria abajgatására, ami ráadásul szerintem egy fél híd kapcsolás, mert a PIC adatlapja szerint két kimenete van. Van valakinek tapasztalata ennek a PWM-nek a besergetésére, mert nem igazán tudok elindulni vele. A CCS .h file-ját átnéztem és elvileg vannak paraméterek a felprogramozáshoz, de pl. nincs infóm, hogy egy kimenetet lehet-e használni, vagy mindkettőnek ki kell kerülni a külső lábra ?
Ebben 3db duál kimenetű 16 bites PWM modul van, amit slice-nak hív az adatlap. Azaz 3 slice, mindegyik 2 kimenettel. A slice két kimenete csak együtt megy, nem lehet külön tiltani, de a 3 slice külön konfigurálható más más célra is, és tilthatóak is külön, azaz akár 1-et is használhatsz.
Ha a regiszterek definiálva vannak a CCS.h-ban akkor nincs más hátra, végig kell nyálazni az adatlap megfelelő fejezetét és a regisztereket a céljaidnak megfelelően beállítani. Milyen egyéb támogatást vársz? Valami varázslót, amin klikkelgetéssel bekonfigurálod?
Igen.
A CCS C-nek igen jó a klikkelgetős beállítása ami a végén megírja a keretprogramot és ezzel nem kell foglalkozni. Érdekes, hogy a 12F1752-hez megvan a külön PWM konfiguráló rész a programban, ehhez az újhoz meg nincs semmi...
Szeretnék 16 bites PIC-en saját megszakítást használni. Tehát én indítom, szoftveresen, meghatározott prioritással! Szerintetek van erre valami lehetőség?
Nézegettem az adatlapot, de nem igazán jött le, hogy ez megoldható e vagy sem?! Jelenleg azt trükköztem ki, hogy egy nem használt hardveres megszakításra "telepedtem" rá, ami hardver eseményt nem használok per pillanat. Itt kézzel indítva a megszakítást jelző flaget, beesik a meghatározott prioritású megszakítás ahogy kell. Ez így működik jól, de jobban örülnék neki, ha a sok, nem használt megszakítási vektorból tudnék erre a célra egyet elkülöníteni...
Szerintem nincs, bár soha nem próbáltam még ilyet. Amit én használok 16 bites PIC-et, azon csak a HW moduloknak (+ a hw és sw hibák, pl. stack error, stb.) van megszakítási hely az IVT-ben, szabadon beállítható sw-es helyet nem láttam. Szerintem csak az a megoldás működik, amit most is használsz.
Ha egy nem használt periféria megszakításkérő bitjét szoftveresen állítod be, akkor tudsz szoftveresen megszakítást indítani.
Bővebben: Link
Mintha pont ezt a megoldást írtam volna én is le feljebb....
Szia!
Nem használom, de úgy gondolom, hogy egy CALL mem_cím és RETFIE párossal mennie kellene (az elején letiltva a megszakítást a megfelelő ISR résznél!)... Idézet: --> a CALL előtt letiltani a GIE-t és a RETFIE újra engedi... „az elején letiltva a megszakítást a megfelelő ISR résznél!”
Igen, és a Microchip fórumán (amit belinkeltem) csak annyi a plusz infó, hogy nincs is más...
Azt is írják, hogy csak a PIC32-nek van valódi szoftveres megszakításkérő lehetősége.
És a prioritást hogyan szabályoznád? Mert hogy az is fontos itt....
Ha szoftveresen akarod előidézni, akkor van ISR, amikor meghívod ( előtte, mint írtam, letiltod a megszakítást!), az ISR-ben meg ezt ellenőrzöd le először... Ha esetleg volt hardveres megszakítás, akkor közben úgy sem tudsz szoftverest előidézni...
szerk.: Nem ismerem a 16 biteseket, de azt írtad, hogy van sok megszakítási vektor...akkor arra a címre kell ugratni, amelyiket használni akarsz... Melyik lenne a konkrét típus ?! A hozzászólás módosítva: Jan 31, 2022
A háttérben fut egy magasabb prioritású megszakítás! Nem tilthatom ezt le.
Ez a segéd megszakítás csak azért kell, alacsonyabb prioritással, hogy azért ne a főprogramot terheljem ennek a kezelésével(azért ennek is meghatározott idő alatt kell bekövetkeznie, de itt nem kritikus, elég nagy jitter is belefér)... Amikor esemény van(azt a magas prioritású kezelőben állítom bizonyos feltételek alapján be), az a magas prioritás után fog értelemszerűen lefutni, de nem kell foglalkoznom tovább vele, mert az mindig szinkron fog zajlani a másikkal, alárendelt szerepben.
dsPIC33EV32GM002 - ez az áldozat )
A linker script file(gld) tele van előre definiált, de nem használt vektorokkal, ha jól láttam.... Ezért gondoltam, hátha valahogy ki lehet ezt használni...
Nem néztem meg a linker fájlt, meg ezt a típust nem ismerem, de szerintem 16 bites PIC-en csak hardvernek van megszakítás vektora.
A 16 bites megszakítása teljesen más, mint a 8 bites PIC-ek 2 szintű megszakítása. Ha nem ismered, akkor mielőtt leírsz olyan dolgokat, ami itt nem működik, lehet érdemes lenne utána nézni. A 16 bitesnél 8 megszakítási szint van, aminek a szintjét tetszőlegesen tudod engedélyezni. Attól függően, hogy milyen szintű a generált megszakítás, ill. milyen szint van engedélyezve, simán előfordulhat, hogy egy "szoftveres" megszakítás magasabb szintű lesz, mint egy hardveres. Ilyen alapból is van benne amúgy, pl. egy incorrect address megszakítás szoftveres, mégis magasabb szintű, mint egy hardveres megszakítás.
|
Bejelentkezés
Hirdetés |