Fórum témák
» Több friss téma |
Az, hogy az alap -amihez nem nyúltam- asm-hex-re fordítása után a 16f628-as pic, miért nem villogtat. Azaz miért nem működik? Azt nem értem, ha ennyire egyszerű a kód, akkor ez sem univárzális ezekre a hasonló PIC-ekre? Hogy lehetne a 16F628-ra átírni ezt a kódot?
Legalább a CONFIG részt és a PIC típusát át kell írni a használni kívántra. Elképzelhető, hogy ezután fog működni 16F628A-n is, mert eléggé hasonlóak bár a komparátor kikapcsolása rész hiányzik belőle. Azért ha végig mazsolázod, látszik, hogy nem annyira "egyszerű" vagy inkább szerintem csak túl van bonyolítva. Mindent át lehet írni mindenre, az a kérdés, hogy megéri-e. Ha világos a feladat arra a picre megírni amit használni akarsz.
Mindössze annyit szeretnék, hogy a 8 kimenetet egymás után 0,5-0,5 másodperces időközzel egymás után kapcsolja be, ha áramot kap a pic. Ha mind be van kapcsolva akkor tartsa meg ezt az állapotot a kikapcsolásig.
Köszönöm!!!!
![]() ![]() Működik. Át tudom írni az asm-et akkor máris mást csinál!
Kedves Hp41C!
Kicsit átalakítottam az asm-et. Most már majdnem azt csinálja amit szeretnék... ![]() Szépen egymás után felkapcsolja a LED-eket, aztán törli az összest, és megint felkapcsolja. Ezt 7 szer teszi meg, aztán az összes led bekapcsolva marad. Mit kell még kiszednem ebből a szerencsétlen kódból, hogy csak egyszer csinálja végig a műsort, ne hétszer??? (A műsor, ami egyébként nagyon jó, mert lehet szépen állítgatni a felkapcsolások sebességét is.) Köszönettel: Newl A hozzászólás módosítva: Jún 26, 2018
Hát az átalakítás nem volt teljesen sikeres.
Mivel kivetted a minták meghívását az a Return a minta végén bekavar valószínűleg. Oda inkább egy Goto -1 kellene például.
a 16f84 és a 628 nagyon is nem azonos, ugyanaz a szoftver módosítás nélkül nem fut, a különböző perifériakészlet miatt, amit inicializálni kell
Beírtam, de így meg le se fordította hex-re. Ha kiveszem a return-t akkor is 7 szer játssza le a műsort, nem egyszer.
Őszinte leszek, nem gondoltam volna, hogy ez ennyire bonyolult... Örülnék, ha sikerülne, de így önerőből nem megy.
A GPR kezdőcíme volt a legnagyobb gond (16F84 - 0x0C <-> 16F628 - 0x20) .
Rendesen kell átírni. Cimke: goto Cimke
Inkább valahogy így:
Köszönöm ismételten!
![]() Működik. Egyszer megy végig a sorba bekapcsolás, aztán úgy marad bekapcsolva. Ez így nekem tökéletes!!! A mintázatot, és a bekapcsolások közötti sebességet pedig át tudom írni - kipróbáltam. A goto parancssal tulajdonképpen egy végtelen visszaküldésbe kényszerítjük a PIC-et ugye? Ezért áll meg. Köszönöm, hogy segítettetek ennek az outsider embernek!
Rendes volt, mert hidd el, én ezt nem tudtam volna megírni.
Szeretném ismételten megköszönni! Nagy segítség volt ez így mert ezek után univerzálisan tudom használni a PIC időzítését 8 kimenetre. Akár futófény, akár lépcsőzetes bekapcsolás, minden szóba jöhet. Majd még kipróbálom külső kristály nélkül is, mit csinál akkor a PIC. Köszönet!
Sziasztok!
Nem túl rég kezdtem elmélyedni a PIC témában. C-ben írom a programokat. És a továbblépéshez felmerült egy kérdés. Azt írják mindenhol, hogy az XC8 gyári delay makró úgymond "dummy" utasítás, és komolyabb programoknál célszerű másképpen megoldani. A kérdésem, hogy ez mennyire igaz, ill. ha igaz akkor hogyan cérszerű helyettesíteni? Írtam egy minta programot három szerintem használható megoldással, amiből az első és a harmadik kb. ugyanaz csak máshol van az ellenőrzés. Mennyire jó irány ez? Szívesen fogadok minden észrevételt, kritikát.
Én rövidebb időzítésekhez, ~10us-ig szoktam használni a gyári rutinokat.
Általában nem fogják meg a program futását delay utasításokkal, hanem flageket/változókat használnak, amiket az interrupt beállít/csökkent/növel. pl. interruptban fogyó változóval (deklarációnál volatile BYTE tmr1ms; ): tmr1ms=23; while (1) { EgyebRutinok(); if (tmr1ms == 0) IdozitesLetelesehezTartozoRutin(); } Egyszerűbb alkalmazásoknál érdemes egy timert fixen beállítani 1 vagy 10 ms-re, és abban állítgatni a flageket. pl.: #define FLG_100_MS 0x80 #define FLG_1_SEC 0x40 ... timerben: bTmrFlags |= FLG_100_MS; //100ms elteltekor timerben: bTmrFlags |= FLG_1_SEC; //1s elteltekor foprogramban:
Köszönöm!
Akkor azért nem voltam rossz nyomon. Azért is kérdeztem, mert még csak épülget a programom, és nem mindegy, hogy mikor és milyen mértékű váktoztatást kell rajta végrehajtanom. Mégegyszer köszönöm.
A kérdés szemléleti. Ha gondolkodásban rá tudsz állni, hogy ne sorfolytonos utasításokkal, hanem aszinkron állapotgéppel csinálj meg egy feladatot, jobb ötlet úgy csinálni. És kezdésnek gyakorolj olyan feladatokon is, amik egyébként nem igényelnék azt a bonyolultságot. Van, amihez edződni kell. Nem szokott elsőre könnyen menni.
Üdv!
A 32MX-ekben nincs CLC? Ezek az MC-s keresők elég bénák. A parametrikusban meg nem is lehet kiválasztani.
Egy kérdés a kezdőknek?
![]() Utána kellett nézzek mi is az a CLC...
Hát a haladóba sem akartam egy ilyen kérdést feltenni
![]()
Ez így elsőre olyan, mint amikor egy kínainak a teljes hasonulásról beszélsz.
De köszönöm a tippet, mert fogalmam sem volt erről, és így legalább van mit tanulmányoznom, hátha tudom alkalmazni is majd. Eddig egy számomra is felfogható példa leírást találtam... ...Ha ismertek ilyeneket, linkeljtek be párat légy szíves! Köszönöm.
Hát ez az.
Akkor nem csak én vagyok vak. Az MM sebessége meg elég alacsony. Na mindegy. Majd lesz valami.
Jól látom, hogy a kód konfigurátor nem veszi figyelembe a PLL-t?
Kicsit volt időm utána olvasni enek az állapotgépnek, és így már értem mire gondoltál. Nagyon jó ötlet és nem is olyan bonyolult. Az igazi nehézség számomra a megfelelő állapotok és feltételek kiötlése lesz, de "egy kis gyakorlással könnyen megtanulható" ez is.
Pár nap alatt is igen sokat tanultam. Köszönöm mindenkinek.
Amíg nincsen tényleges tétje annak, hogy valami szakmai kihíváshoz hozzá vagy-e edződve, vagy sem, addig nyilván fáj a hócipőd miatta
![]() ![]() |
Bejelentkezés
Hirdetés |