Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Sziasztok, egy kis segítséget szeretnék kérni. A Nyolc lábbal AVR IV. részében lévő NiMH töltő kisütő részét dobtam össze próbapanelen. Van egy pic, aminek az egyik lába vezérel egy fetet ugye a kapcsolás alapján.(16f683) Feszültségmérés AD keresztül szépen megy. A gondom az hogy nem tudom hogy kell pontosan bekötni az elemet a kisütéshez. Ugye a FET source lábát a földre kötöm, az elem pozitív sarkát a drainre, a negatív sarkát a földre, de ez így nem jó. Az elem feszültségmérése szépen megy, de a FET nem zár valamiért. Nem a FET a hibás, mert ha pl egy motort/ledet kötök be, azt szépen be-ki lehet kapcsolni. Másik fettel sem megy. Ebből gondolom , hogy én hibáztam valahol, de akárhogy kötözgetem nem tudom kisütni az akksit. Megköszönném, ha valaki nálam okosabb segítene megoldani a problémám. IRF 530 és 02n60p Fettel próbáltam. 1db 1,2V-os akksit akarok kisütni egyébként. Mellékelem pirossal bekeretezve Topiék kapcsolásának azt a részét amit valahol elrontottam. Ha az ellenállást elhagyom, akkor sem érzem, h melegedne a fet. LM317-et ki tudom szépen kapcsolni stb. A kisütés része nem akar működni. Előre is köszönöm a segítséget.
Sziasztok!
Két egyszerű kérdéssel fordulok hozzátok: 1) PORTA-n gomb, PORTD-n LED, Inicializálás után, ennyi a program: MOVLW B'00000000' MOVWF PORTD MOVLW B'00000000' BTFSC PORTA,0 MOVLW B'00000001' MOVWF PORTD END ;program vége end END előtti 'GOTO program elejére' sort kitöröltem Lefordítva, beégetve a led folyamatosan világít, gomb nyomva tartása mellett kialszik. (ugyanúgy, mint GOTO-val) Hogyan lehet az, hogy a szekvencia már túlhaladt a PORTA-beolvasásán, a program elért a végére (nincs elejére ugrás, elvileg csak egyszer futott le), és mégis reagál a gombnyomásra (többször is)? Mit csinál a PIC ha elért a program végére? Hol tudok ennek utánanézni? 2) 0.1-10 ms nagyságrendben kell vezérlőjelet időzíteni, de pár áramkör előtti/utáni dolog kompenzálása miatt: x [ms] +- y [us]. Emiatt 4 vagy 20 MHz-es kristályt szeretnék használni. A nagyon pontos időzítések beállítására van bevált okos megoldás (program, hardver), vagy az utasítások (órajelciklusok) számolgatásával kell belőni az értéket? Az időzítés az egytlen feladat (főprogram), ha van erre a célra jobb megoldás, mint a PIC, az is érdekel. Köszi a segítséget: Zsema
Üdvözletem Mindenkinek!
PIC16F628-al kapcsolatban kérnék segítséget. Az egyik kérdésem, hogy hogyan lehet a forráskód elején (assembly-ben) definiálni a belső oszcillátort. pl.: __CONFIG _INT_OSC vagy hogyan? Ennek is kétféle üzemmódja van, CLKout vagy I/O funkció az RB6 lábon. Ezt hogyan határozhatom meg? Égetésnél ugyan a progiban be lehet állítani a config biteket, de én a forráskódban szeretném... A másik, hogy ha be is állítom az égető progiban, csak úgy hajlandó működni, ha az RB6-ot CLKout-nak állítom be. (FOSC2=1, FOSC1=0, FOSC0=1) Ha ezt is I/O-ként állítom (FOSC2=1, FOSC1=0, FOSC0=0), akkor az oszcillátor el sem indul, a program nem fut. Valami regiszterben állítani kell még valamit? (A PIC hibáját azért zárnám ki, mert van egy 12F629 is, aminek a belső oszcillátorát ugyan így kell definiálni, de az is csak CLKout-al hajlandó működni, I/O beállítással nem. ) Előre is köszönöm! Gyula
A watchdog nem indítja újra a kontrollert?
A programot meg kellene állítani a végén, különben elér a memória végére, és 'újraindul'. Időzítéseket utasítások számával lehet belőni.
Szia!
Nyisd meg a c:\Program Files\Microchip\MPASM Suite\P16F628.INC állományt, a végén találhatók a konfigurációs beállítási lehetőségek.
Köszönöm.
WDT off, de tényleg elérte az elejét és újraindult. Kipróbáltam. Van olyan PIC család, amelyiknél "biztosan" mindegyik utasítás azonos órajelciklus? A 16F8xx elvileg minden utasítása 4 órajelciklus (valahol láttam, hogy ez sem teljesen van így), de CALL meg ehhez hasonlók miatt rengeteget kell számolni, mire 4MHz-es kristállyal kisakkozom a [ms]-os nagyságrendet. Zsema
Arra ott van a debugger.
Az elején törlöd a stopperórát, a végén meg kiolvasod. Egy kis kereséssel meg lehet találni egy oldalt, ahol egy időzítésgenerátor van. Ebben a topikban is történt már rá pár hivatkozás.
Timerről (periféria) még nem hallottál?
Szia!
Használd a MpLab szimulátorának Stopwatch megjelenítését. A Debugger Settings pontjában állítsd be az órajel frekvenciáját. Ha periódikus időzítés kell, akkor a Timer2 megszakítással egyszerűbben lehet megoldani. Az ugrások (goto, call, return, retlw) és a btfsc, btfss decfsz, incfsz ha a feltétel igaz, 2 utasítás végrehajtási időt igényelnek. A 18F-nék még a feltételes és feltétel nélküli branch, dcfsnz, infsnz, tstfsz, movff is 2 utasítás végrehajtási időt igényelnek. Ha a feltételes utasítás után 2 szavas utasítás áll, akkor még egy 3. utasítás végrehajtási idő is kell. Kérésre javítva. Frankye
Először is meg kellene mérni, hogy a PIC FET-et vezérlő kimenetén megjelenik-e normálisan a logikai magas szint, amikor a kisütésnek kellene működnie.
Hali. Kérdésem az lenne hogy ha két PIC UARTon kommunikál, és ha az első PIC ami küldd, állandó táp alatt van, és a második PIC ami fogad, csak néha van táp alatt, akkor is működne-e a kommunikáció?
Tehát a küldő PIC állandó táp alatt van, és ha a második fogadó PIC-t táp alá helyezem, fogja-e venni az adatot, vagy a két PIC-t egyszerre kell hogy indítsam?
Azt néztem, kevéssel 5V alatt jelenik meg, mind a két kimeneten amit használok, a BC182-vel kapcsolgatom az LM313T adjust lábát az működik, bár 0,6V-ot mérek akkor is ha groundra húzom az adjustot és rámérek, de 0 áramerősséggel. Ha az elem helyére berakok egy kis DC motort, azt simán tudom ki-be kapcsolgatni. Azt is kipróbáltam, h az LM317-et kapcsolgatom ki-be és úgy is tudom vezérelni a motort. Ezért nem értem, h mi lehet a baj. Miért nem akarja kisütni a feten keresztül az akksit ha azt teszek a motor helyére..
Miből gondolod, hogy nem megy a kisütés? A FET D-S között mértél feszültséget?
Az a 120 ohm egy 1.2V-os cellához egyébként nagyon soknak tűnik, 1000mAh esetén 100 órás kisütési időt jelent. Én az akkutöltőmben 1 cellához 1 ohm-ot használok, ami meg mondjuk drasztikusan kevés, de szerintem célszerű 10 ohm alatt maradni, ha kivárható kisütési időket szeretne az ember.
Szia!
A kapcsolat létrejön a táp bekapcsolása után is, de be kell tartani néhány dolgot: - Az állandóan bekapcsolt (a küldő) pic RxD lába ne menjen alacsony szintre, ha a vevő ki van kapcsolva. A formátum hiba állandó vételi megszakítást okozhat. - A vevő pic lábain a szint ne menjen kikapcsolt, állapotban sem, a táp feszültségénél 0.3V -tal magasabb szintre, - A vevő, ha feléledt, valahogy ismerje fel a távirat(ok) elejét.
Tudom, hogy sok. Ezért raktam be egy 22 ohmos ellenállást. De ha teljesen elhagyom, h a FET fűtsön el mindent, akkor sem melegszik még csak nem is langyos. Több akksival is kipróbáltam.
A FET D-S lába között megvan az 1.26V, az akksin direktbe 1.3-at mérek. Nézek vmi kis ellenállást de a fél wattost szerintem pillanat alatt szétkapaja a 2600mah-es akksi
Arra gondoltam, hogy az úgyis a proci tehermentesítésére szolgál. De nekem nincs más programom, így lényegében mindegy, hogy melyiket számoltatom. A TIMER működtetéséhez is fel kell használni azokat az utasításokat, amik kritikusak.
A 22 ohm-nál nem kell kisebb, egyelőre. Ha a FET G-S feszültsége 4V feletti, illene a D-S feszültségnek eléggé leesni, kinyitnia a FET-nek. Jó a FET? Jól kötötted be a FET-et?
Nálam IRLZ34 végzi a kisütést, de az IRF530-nak is jónak kellene lennie (az 540-es adatlapját nézem épp, 4.5V G-S feszültségnél 0.1V D-S mellett kb. 1.5A Id-nek kellene folynia).
A PIC-en a programoknak nincs vege! Az END direktiva azt mondja meg hol van a forrasod vege, de ettol meg a programszamlalo inkrementalodik, nem fog leallni ott. Ezert szokas a vegere (vege elott) betenni egy vegtelen ciklust, tehat a PIC csak malmozik, ha mar nincs mit tennie. De betehetsz ebbe a vegtelen ciklusba egy sleep utasitast is ami sleep modba kuldi a PIC-ed, es ha ne adj isten valami felebreszti akkor a ciklus miatt ujra bealszik a PIC...
Tehat ami nalad tortenik: A programod lefut, majd tovabb fut, es vegrehajta azt a program szemetet ami a PIC program memoriajaban van a Te programod mogott. Majd egyszer csak elerkezik a memoria vegere, ahol a program szamlalo (PC) tovabb csorog a 0-s cimre, ahol ugye a Te programodat kezdi el elolrol futtatni.
Fogalmam sincs mert nem tudom miféle program van benne. A 16F-eket nem ismerem, de a 18F-ek majdnem akkor órajellel tudnak menni belső oszcillátorról mint külsőről. (Amikkel eddig találkoztam azok 40MHz-en mennek maximum külső kvarcról és 36MHz-en belső órajelről. Feltételezem hogy ez a jelen PIC esetén is hasonlóképp van, szóval nem lehet túl nagy a különbség a két megoldás sebessége közt.)
Szia!
A 16F88 -nak max. 8MHz -es belső oszcillátora van, a konfigurációs érték szerint "INTRC oscillator; port I/O function on both RA6/OSC2/CLKO pin and RA7/OSC1/CLKI pin". Sajnos 31.25kHz-es órával indul, és programból kell átállítani a frekvenciát. Ld. Adatlap OSCCON regiszter. Külső quartz oszcillátorral mehetne 20MHz-vel is, de a programban levő időzítéseket át kellene számolni...
Ami miatt én inkább aggódnék, az a belső oszcillátor pontossága, illetve pontatlansága. Egy ilyen feladathoz illene a pontos órajel, a belső oszcillátor nem kimondottan ilyen jellegű dolgokra van kitalálva. A 8MHz sok mindenre elég lehet, ha jól van megírva a program.
Sziasztok.
Jól tippelem hogy a két PIC között az a különbség hogy az egyiken a leggyorsabb kiadható jel változása 4 Hz a Másikon meg 20Hz Elvileg akkor egy kimeneten a jelszint hányszor tud változni? a 4 Mhz sen elvileg másodpercenként 4000 szer, tehát egy másodperc alatt elvileg 2000 ezerszer tud villanni a jel, ugye? Köszönöm.4/p 20/p
A maximali orajel frekvenciat adjak meg vele MHz egysegben. Hasznalj 16F628A tipust, es az megy 20 MHz-ig, es ha minden igaz olcsobb is ha a Chpcad-nel veszed.
Milyen ket PIC? Valosiznuleg 4 MHz es 20 MHz -et akartal irni. Hogy mekkora a max valtzakozo jel amit ki tudsz adni: A PIC (8 bites architekturan legalabbis) FOSC/4 azaz 4MHz/4=1MHz ill 20MHz/4 azaz 5MHz utasitas ciklussal lehet szamolni. Tehat T=1/f = 1us ill 200ns -et lehet elerni.
Ezt a frekit amugy direktben is ki lehet rakni ha ez kell neked. De ha utasitassal akarod kirakni akkor ugye elmeletileg lehetseges lenne az egymas utan kovetkezo utasitasokkal egy labat billegtetni, azonban gyakorlatilag fellephet egy un. RMW hiba ami miatt kesleltetest kell bet billegtetes koze betenni, amihez altalaban eleg egy NOP (vagy mas) utasitas, igy FOSC/8 gyakorlatilag az elerheto bitbillegtetesi sebesseg. Ha 18F-ed van akkor a LATx regisztereket hasznalva nincs szukseg idozitesre, szoval ott az FOSC/4 lehet szamottevo. Nyilvan, ha ciklusba szervezed akkor a ciklusmag illetve ciklus fejlec/lablec idejei hozza adodnak ehhez.
Igen, az m lemaradt előle. . . lényeg, hogy azt jelenti amire gondolok, csak egy kicsit gyorsabban teker, mint ahogy én számoltam
![]()
Köszönöm. Amugy a két picet belinkeltem. De köszi a választ igy már jobban kezdem érteni
Komolyan mondod, hogy nem tudod mennyi a MHz?
![]()
Elnézést az off-ért, de mivel a kérdéses emberkék főként ebben a topikban tanyáznak
![]() Még egyszer elnézést!
Szia!
Elnézést, hogy ilyen későn reagálok, de kicsit kevés időm volt. A lényeg, hogy az oszcillátorbeállítást sikerült a forráskódból megoldanom, de ha I/O lábnak definiálom RB6-ot belső oszcillátorral, akkor még mindig nem fut a progi. Ez mitől lehet? A válaszokat előre is köszönöm! Üdv: Gyula |
Bejelentkezés
Hirdetés |