Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Hello!
Már csak egy kérdés! Mondtad, hogy a putc és puts nem a legjobb választás! Mit használjak helyette??? Előre is köszi!
Szia!
Többször leírtam már (ebben a topikban is)... A kimeneti adatokat tedd egy körforgó bufferbe. Írj egy eljárást a bufferbe történő berakásra, ami engedélyezi az adási megszakítást. Az adást is kezeld le megszakításosan, ha van karakter az adó bufferban, akkor írja be az uart adó regiszterébe, ha nincs, tiltsa le az adási megszakítást. A vétel is szerencsésebb bufferelten. A megszakítási rutin csak a vételi hibát ellenőrizze, kezelje le, illetve, ha nincs hiba, tegye a vett karaktert egy körforgó bufferbe. Írj egy eljárást, ami kiszedi a következő karaktert a vételi bufferből, illetve jelzi, ha üres. Ezt hívogassa a főprogram, ha a vett adatra van szüksége.
Amugy azt ugye sejted, hogy a 'return' utani resz nem hajtodik vegre?
Sziasztok, valaki mondja már meg nekem hogy az miért van, hogy amikor a régi MPLAB-bal (5.4) írok meg egy progit és lefordítom, ill. beletolom a PIC-be, akkor sokkal gyorsabban belemegy, (Kis progira gondolok.) mint amikor a 8.5-ös verzióval csinálom ugyanazt. Én arra tippelek, hogy az új MPLAB olyan hex.-et generál, amiben minden memóriacím fel van töltve. (Függetlenül attól, hogy van-e értelmes adat benne.) A régi MPLAB pedig csak azokat, amiben tényleg hasznos adat van. (A többit pedig gondolom törli, vagy nem is foglalkozik vele.) Ez akkor számmít, amikor egy kis progit változtatok és sokszor bele kell írni. Mert sokszor kevés idő, az sok idő.
Tedd fel mind a két hex-et(csatold fájlként)!
Ez a 2 progi ugyanazt csinálja. És a teszt5.4 kb. 0,5s-alatt benne van a PIC-ben, míg a másik vagy 5s alatt van benne.
Gondolom az uj verzio csinal egetes elott egy teljes torlest es iras utan egy tesztet is, mig a regi verzio nem volt ennyire alapos. Amugy milyen programozorol van szo es milyen PIC-rol?
PICKIT2 klón a programozó. A PIC pedig 16F877, 16F819, 16F84. Tudom hogy elavultak, de ilyenek vannak most nálam úgyhogy jók ezek. Váltani pedig nem a PIC-re fogok, hanem valami ARM architektúrájú procikra. (Mivel manapság arra van kereslet.)
Hello
Még csak most ismerkedek a PICel, valaki tudna segítteni hogy az alábbi forráskód mért nem megy? Azt szerettem volna ha sikerül beállítanom 1másodperces majd 10másodperces késleltetést. A kvarcra amit használlok az van írva hogy 14,31818 Szóval úgy számoltam, hogy 3579 utasítást hajt végre másodpercenkét. 16F877A ról lenne szó.
A két hex között csak egy sor eltérés van, ami számít, ez: :043000000034003464
Igazából nem tudom hirtelen, mi van az 1800-as programszó címen(otthon tudnám megnézni), de nem valószínű. hogy ettől írja tovább. Ahogy trudnai kolléga írja, szerintem is az újabb verzió többet szöszöl a visszaellenőrzésekkel, vagy lassították az égetést valami miatt!
Attól tartok, hogy ez 14,31818 MHz-es kvarc, tehát ennek megfelelően számold újra a késleltetéseket!
A megjegyzés nem igaz. Változtattál? ... Ilyen időzítések ellenőrzésére való(többek között) a szimulátor! Kiválasztod az MPLAB SIM-et, majd beállítod az órajelet a beállításoknál(fejből most nem tudom hol van, de meg lehet találni), majd a StopWatch -ot kiválasztod a debugger menüből. Teszel egy-egy megszakítási pontot az várakozó rutinjaid elé és elindítod a szimulációt. A StopWatch-ben láthatod az időket, nullázhatod a következő lépés előtt stb. A várakozó rutinjaid pedig ránézésre is nagyon kevés időt várakoznak. Azt írod 3579 utasítás. Ez így ebben a formában nem is igaz, mert vannak olyan utasítások, amik 2 programlépést igényelnek. A helyes megközelítés a programlépés, ami az órajel negyede. Tehát, ha 14,31818MHz a kristály, akkor az 3,579545MHz programsebesség, ami 3579545(három millió!) lépést jelent 1 sec alatt! Jelzem, hogy nem igen okos dolog ilyen várakozásokat beiktatni! Első lépésekre jó, csak nem szokd meg, mert ez így elveszi a drága erőforrásodat a többi feladattól. Erre valók a timerek és a megszakítások. De előbb írd meg a valós 1sec-es várakozást egymásba ágyazott ciklusokkal!
Sziasztok!
PIC16F877 - re írok programot. A háromnegyede kész is van de az MPLAB fordításkor kiírja hogy megtelt a programmemória - "Address exceeds maximum range for this processor" - az 1407. dik sortól kezdve. Mit lehet ilyenkor tenni? Lehet más memóriacímen folytatni? Vagy rövidítsem a programot?
Ha tele van a memória, akkor nincs hol folytatni. Két lehetőség van:
1. megpróbálod a programot rövidíteni, pl. ha vannak szubrutinba rakható részek, akkor azokat csak egyszer lekódolni és utána csak meghívni 2. nagyobb programmemóriájú típust keresel. 16F877 helyett már csak valami 18F-et nézhetsz, pl. 18F4520-at. Vagy esetleg a 16F1xxx típusok között, ezeket nem ismerem, hogy azokban miből mennyi van.
Köszi! Akkor rövidítek a programon. Meglátom mi lesz a vége.
Esetleg mutasd meg a kódodat és akkor lehet tudunk javasolni valamit, hogy mivel lehetne rövidíteni. C vagy asm? Abból, hogy 1407-es sorban már tele van, abból C-re tippelek.
Szia!
Figyelembe vetted, hogy a 16F877 program memóriája 4 lapból áll, és a lapok közötti ugrások / eljárás hívások megfelelő előkészítő műveletekkel kell előkészíteni, illetve a hívások után is akad egy kis kötelező rendrakás. Ekkora programnál a megszakítási rutinnak a szokásos regisztereken kívül más regisztereket is kell mentenie / visszaállítánia, és más kötelező teendője is akad... Bővebben ebben a cikkben... A Debug fordítási mód egy kód- és adatterületet fenntart a debugger részére. Ha Release módba állítod a fordítót, ezeket a területeket is használhatod, de már nem tudod nyomonkövetni a programot. Idézet: Nem megépíteni akarja, hanem megépíttetni, így szerintem hiába magyaráztok neki... „meg tudja ezt építeni/programozni nekem valaki?”
A probléma az, hogy ez itt off.
Sziasztok
Következő kérdésem lenne. Adott egy PIC amiben van belső RTC aminek ugye a másodlagos oszcillátort kell bekonfigurálni, 32,768Khz es kvarc kell hozzá. Ezzel nincs is baj de én nem szeretnék kvarcot használni mivel rendelkezésre áll egy pontos 32,768Kz es négyszögjel. Sajnos nincs external clock beállítási lehetőség a másodlagos oszcillátornál. Kérdésem mi lenne ha rákötném a négyszögjelet a SOSCIN re? Persze bekonfigurálva mintha kvarc lenne rajta. Ki is próbálhatnám de nem szívesen nyírnám ki a cuccost.
Üdv!
Én is kérdeznék: 3PWM jelet kell formálnom annak függvényében, hogy mi jön be usarton. Nem szeretném ezt szoftveresen megoldani, de a pic18f1827 adatlapján úgy látom, hogy van benne két CCP modul,és 2 ECCP modul. Kérdésem az lenne - ha már foglalkozott ezzel az ic-vel valaki, hogy ezek a ccp modulok egymástól teljesen függetlenek, és mindegyiknek megvan a kis külön regisztere, ahova az értéket beírva megváltoztatja a kitöltési tényezőt? Köszönöm a választ előre is!
Szervusz!
Mivel PIC18F1827 típus nem létezik, feltételezem, hogy PIC16F-ről van szó. Ennek a típusnak van két ECCP, meg két CCP modulja, melyek egymástól teljesen függetlenek lehetnek, saját timerek kapcsolhatók hozzájuk, így az időalapok is különbözőek lehetnek.
Még nem próbáltam ilyet, de ha egy 470ohm-on keresztül kötöd be, semmi baja nem szabadna, hogy legyen. De ez csak egy vélemény...
Sziasztok !
Vettem egy PIC32mx340F512H-t kísérletezni és nem igazán értem a portokat, konkrétan a PMP/PSP-t. Nem értem mi a különbség pl. az RD1 és PMD1 között. Melyikre hogyan hivatkozom. Ha valaki lenne oly kedves és felvilágosítana erről. Köszönöm!!
Hogy érted azt, hogy hogyan hivatkozol rájuk? Volt már dolgod PIC-el? Ezért kérdezem, mert a kérdésedből úgy tűnik nem. Ha ez igaz, akkor a 32-es egy kicsit húzós lesz kezdésnek!
Ja persze volt már, csak vettem most egy 320x200-as
touchpad-os tft-t és össze akartam vele kötni és 16 bitesen hajtani és nem értem hogy programozás közben (mikroc) hogyan különböztetem meg a PMDx-t meg az RDx-et és úgy gondolom ez abból fakad hogy valamit nagyon nem értek ott a portok résznél.
A portra így lehet hivatkozni C32-ben:
A PMDx az a Paralel Master Port Data, azaz a párhuzamos port adat lábai. a PMAx ugyanez, csak a címvezetékek. Vannak még ezzel összefüggő vezérlő lábak is(PMCSx stb.). Külső párhuzamos eszközök vezérléséhez jó, mint pl. Flash, EEPROM, SRAM. A modult konfigurálni kell használata előtt, és akkor ez lesz a kimenet funkciója. A PGDx pedig sima port, mint bármelyik másik PIC-en. Ja igen, a PMP-hez tartozik egy halom belső regiszter, ezeken keresztül éred el a Címet, adatot stb.
Közben rájöttem hogy tényleg nem egyértelmű a kérdésem , a portot nyilván értem azon nincs is mit nem érteni hanem ez a parallel dolog zavar meg és ezek szerint mint periféria nem értem mi célt szolgál.
Mármint a PMP.
Közben szerkesztettem. Érdemes belenézni az adatlapba a PMP részhez.
|
Bejelentkezés
Hirdetés |