Fórum témák
» Több friss téma |
Köszönöm a segítséget!
Már csak a Timer0-t kellene beállítanom egy 500 ms-os megszakítással... Ehhez még a doksit tanulmányozom, de ha van tippetek, hogy hogyan kezdjek neki, akkor azt megköszönném
Idézet: „Ehhez még a doksit tanulmányozom, de ha van tippetek, hogy hogyan kezdjek neki, akkor azt megköszönném” Szerintem jól kezdtél neki ! Idézet: „Az a gyanúm, hogy és maszkok vannak definiálva:
lenne a helyes megoldás” A Microchip az őrületbe kergeti az embert ezzel az VAGY maszk/ÉS maszk mizériával, de van erre egy kézenfekvő megoldás: definiálni kell a projektben az USE_OR_MASK szimbólumot.
Idézet: Még a végén áttérsz az assemblyre. „Végül sikerült megoldani úgy, hogy kiiktattam az usart library-t és megírtam a beállítást regiszterek állítgatásával...”
Köszönöm...
Én inkább elfelejtem az egészet, ahogy a program szerzője is tette... Ugyanis nagyon sok ember sok-sok munkaóráját fekteti be egy teljesen fölösleges programkönytárba.... Egy PIC programon belül pl. az OpenADC függvényt csak egyszer kell meghívni, akkos is teljesen fölösleges a paraméter átadás, a beállítások összeállítása egy teljesen más adattá, amit majd a meghívott eljárás bitenként letesztel és beállítja a megfelelő vezérlő regiszter megfelelő bitjeire. Tudom, hogy ezáltal álítólag hordozható lesz a program, de azt is tudom, hogy pontosan az ADC kezelésére "alkotott" a Microchip kismillio verziót az eltérő felépítés miatt. Ezzel teljesen alkalmatlanná téve a kód hordozhatóságát....
Sziasztok! Tudom már volt, de nekem ez az "orvosi lovam", ezzel tanulok, szeretném a tanácsotokat kérni. Tápellátás illetve zavarszűréssel kapcsolatos kérdésem lenne.
A PIC (18f14k50, 18f6622) maga és a vezérelt rész szuperul működik, de összeszed hülyeségeket amik lehetetlenné teszik a továbblépést. Adott egy terepasztal, ennek csinálja a váltóvezérlését. A megfelelő bemenő feltételek esetén a megfelelő lábak megfelelő ideig zárnak optokapukat amik kapcsolják a váltómotorokat. A program és a váltók működnek. A váltó visszajelzést RS flip flopok állítják 4001-es ICvel az alacsony szintre az a jel húz ami az optokaput is zárja. A táp jelenleg egy stabil 5V 450mA-es telefon töltő (ezért jár a pofon nem is ez lesz a jövőben), de a panelen van LD33V kondikkal szűrve, a PIC 3,3Vot kap. Minden szépen megy amíg a trafó többi dolgát be nem kapcsoljuk. Ilyenkor a bistabil oldalak véletlenszerűen átállnak. Kikapcsoláskor és bekapcsoláskor valamint olyan kapcsolókon amikor relét működtetünk. Mi zavarhat be illetve mivel lehetne a vezérlőpaneles részt (PIC, 4001 IC) részt totál leszűrni, leválasztani? Ebben kérném a tapasztalatotokat, segítségeteket... Köszönöm!
1. Ez a kérdés nem ebbe a topikba való!
2. A konkrét kapcsolás és a kivitelezés ismeretének hiányában csak általánosságokat lehet rá mondani, ami nem biztos, hogy sokat segít rajtad: - Elsősorban ott kell szűrni, ahol a zaj forrása van (relék, motorok, trafók). - Célszerű zajra kevésbé érzékeny megoldásokat használni: Schmitt-triggeres bemenet, a CMOS IC-k 15 V-on működjenek, esetleg az R-S flip-flop helyett bufferelt kimenetű billenőkör stb.
Csináltam egy órát 16F886-tal, Timer1-et lépteti egy külső 32,768 kHz-es kavics. A kérdésem az lenne, hogy a pontosságán lehet -e valahogy javítani? Egy hét alatt majdnem fél percet késett.
Van hibakezelési elmélet két kvacot használni fel az ütemjel hibájuk csökkentésére. Gyárthatsz hőtermosztátot is csökkenteni a kvarcok hibáját csökkenteni. Szinkronizálhatsz hálózati erőforráshoz is (ami közvetve internetes atomóra), ha tudsz olyat elérni bármi módon. És nagyjából annyi.
Ha az eltérés mértéke fix, akkor több megoldás is van:
- trimmerkondi a kvarc egyik lábánál (most mekkora kondik vannak ott?) - szoftveresen is megoldható az alábbi módon maximum +-127ppm értékkel: Megméred mennyi ppm-et kell gyorsítani vagy lassítani az óra járásán. Egy 24 vagy 32bites számlálót minden Timer1 megszakításban megnövelsz 65536-al (ez gyakorlatilag a felső szó megnövelése eggyel). Megnézed több-e a számlálód értéke 1milliónál. Ha több, akkor kivonsz belőle 1milliót, valamint Timer1 értékét növeled vagy csökkented a korrigálandó ppm értékkel. A csökkentést/növelést viszont elég körültekintően kell csinálni, legegyszerűbb az alábbi módszer szerint még a Timer1 interrupt-ban.
Ezzel kb. 4msec ideig elakasztjuk a főprogram futását, ha ez nem engedhető meg, akkor máshogy kell megoldani a korrekciót.
Szia!
Ha a hardverhez nem akarsz nyúlni, akkor szoftveresen kell "hangolni" ! Ez azt jelenti, hogy 604 800 másodperc alatt késett 30 másodpercet! Lehet például olyan megoldást választani, hogy minden 20160 másodperc után hozzáadsz 1 másodpercet, azaz 5óra 36 percenként hozzáadsz 1 másodpercet a tényleges időhöz ( persze ezt is célszerű állítani bizonyos tartományban ! ) !
Az enyém is késett. Járattam kb. egy hónapig, az eltérésből kiszámoltam a valós frekit (nálam 0,5 másodperces az IT), így 16383,15129 Hz jött ki. Ezt felszoroztam 1024-el (mert asm-ben így egyszerűbb számolni), ennyivel lehet pontosabb. Csináltam egy 3 byte-os változót amibe összeadom a hibát ( 1024x(16384-16383,15129)=869), tehát minden IT-re 869-et hozzáadok. Amikor a számom túlcsordul hozzáadok a számoláshoz még egy fél másodpercet ( az 1024x16384 az 1000000h).
A hozzászólás módosítva: Nov 12, 2016
Sziasztok!
MPLAB 8.91, XC8 V1.34 környezetben PIC12F1501-el az eeprom_write(0,0); nem működik, mert a 128 Byte adatmemória Flash felső részén van kijelölve. Az erről szóló infóban található include fájlokat a fordító nem találja. Kérdésem, hogyan lehet hozzáférni ezzel a fordítóval a nem felejtő memória kezeléséhez?
Újabb kérdés: Miért nem tudom PIC18F26K22-nél a PORTC-t digitális bemenetként használni? Vagyis nem minden portját? A szimulátor ezt írja: Pin(s) (0x08) on PORTC can not be stimulated due to being controlled by the A/D converter Csak nem értem miért. Az idevágó regiszterek:
Nem tudom, milyen nyelven dolgozol, de a K-csalad tobb tagjanal is az ANSEL regiszterek mar a memoria masik vege fele vannak, tehat nem erhetok el direktben, elotte ki kell adni a
movlb 0x0f -et, allitani, majd utana vissza movlb 0x00-t.
Assembly... Tudom, ezen túl vagyok. Szimulátorban az ANSELC bitjei szépen átállnak 0-ra, de a 2-es 3-as bitet nem lehet stimulussal piszkálni.
Ha csak a szimulatorban van ez a problema, akkor siman hiba.
Ha eloben is ez a gond, akkor pedig valami mas periferia hasznalja, nem feltetlenul AD-nek. Tertium non datur.
PWM vagy hardveres vagy szoftveres. Ha jól gondolom téged a szoftveres érdekel. A válasz igen. 'Szoftveres PWM' kulcsszóra keress rá.
Sziasztok!
Most kezdtem a PIC-cel való ismerkedést egy utángyártott PICKIT2-vel és egy PIC16f628A-val. Lenne ezzel kapcsolatosan pár kérdésem: Programozáshoz, az USB-re kötött pickit kimeneteket rákötöm a megfelelő lábakra, nem igényel semmi diszkrét elektronikát (talán amit olvastam róla, az mclr földrehúzása ellenállással) PWM-et egy sima I/O portra rakott függvénnyel lehet imitálni? A delay értékét lehet változóval megadni? Válaszokat köszönöm.
Programozáshoz nem kell a lábakat sehova kötni. A legegyszerűbb ha csak a kontroller van a programozóra kötve, a megfelelő kiosztással.
Igen, lehet a delay értékét változóval megadni. Igen, létezik szoftveres PWM.
Az a kérdés először is, hogy milyen nyelven programozol?
Uraim PIC32MX795 memóriájába akarnék írni pár byte adatot mint, ha lenne benne Eeprom.
Írt már valaki ilyen programot? Szeretnék egy példa programot kérni, vagy valami segítséget, hogy tudnám megírni. AN1095 nem volt a segítségemre, microchip oldala sem. Google se a barátom most. Előre is köszi segítséget.
Kiolvasod az EEProm -nak felhasznált Flash program memória tartalmát RAM -ba, a RAM másolatban átírod a kívánt rekeszek tartalmát. Törlöd a lapot, majd beírod az egész lapot...
Akkor, ha jól értem az adatlapot:
NVMCON regiszterrel állítom, hogy éppen olvasni vagy írni akarom a memóriát. NVMADDR regiszterrel a címet adom meg. NVMDATA regiszterrel pedig az adatot adom meg. NVMKEY regiszter nem kell igaz? Vagy is mehet 0-ra. NVMSRCADDR regisztert nem tudom mire is való.
Szia
Alap konfigurációban az MCLR egy ellenálláson 10k-n legyen tápra húzva. Különben össze vissza resetel, ha nincs rajta semmi.
Köszi, az előző sokat segített.
Még lenne egy kérdésem. Nézem az adatlapot és a flash memória 0xBD000000 címtől kezdődik. Mettől érdemes bele írni? A lényeg, hogy semmi képen ne nyúljak oda ahová esetleg ő is töltene valamit. Vagy ez nem így működik?
Tipp: csinálj egy statikus memória tömböt, töltsd fel adatokkal legalább az elején (valami marker szerű byte-okkal), és programból még ellenőrizheted is, hogy a mutató helyén, amit lekérdezel, csakugyan az van-e (természetesen az lesz ott). Akárhova is rakja a fordító a cuccaidat, a címét programból biztosan könnyű lesz megtalálni, és az is biztos, hogy nem fogsz ütközni semmivel, ha azt a területet felülírod.
A konstans tömbhöz pár program részlet:
Aztán valahova beraksz egy ilyet a teszt programodba:
Ha a kimeneten az error 0 értéken van, akkor működik a cím lekérdezés. Írj rá teszt programot, gyújts ki egy ledet, ami éppen akad kéznél tesztpanel, gondolom, akad rajta valami. A flash programozásra fentebb már kaptál tippeket.
Csak le kell foglalni.... A példa az "Emulating Data EEPROM for PIC32 microcontrollers" forrásából:
Ez elég használhatónak tűnik.
Ez a sor:
Gondolom itt annyi byte-ot kell lefoglalnom az enyem_tomb-el amennyire szükségem van és annak az elejét megkeresnem. Igaz? Hp41C: Ezt sajnos nem teljesen értem.
Vagy csak lapokat lehet lefoglalni? Miből tudom majd a kezdő címet? Előre is köszi. |
Bejelentkezés
Hirdetés |