Fórum témák
» Több friss téma |
A változókat a főprogramból is tudod módosítani mert globálisnak kell lennie.
Utóbbit az óra beállítására értem. A hozzászólás módosítva: Ápr 9, 2017
De akkor igaz az hogy ha ráfekszek a gombra akkor érdemes egy olyat bevezetni a szamlalo() fügvénybe hogy ha mas1 nagyobb mint 10 akkor kiszámolja a külöbséget nem? Ebben a helyzetben
Remélem nem zagyván írom.. ![]() A hozzászólás módosítva: Ápr 9, 2017
Én megszakítást kihagynám ebből.
Ezért írtam, hogy globális változókat használsz, tehát azokat főprogramból is tudod módosítani. Megszakítást csak hagyd békén számolni. A hozzászólás módosítva: Ápr 9, 2017
" while(PORTB.F1);" De ezek a részek nem megállítják a fő ciklusomat??? És amig nyomva tartom nem tér rá az idoszamol() fügvényre???
Vagy hogy lehetne átalakítani úgy hogy ne szakitsa meg a főprogramot és ne legyen pergés ??
A kijelző 4 biten menne a D4...D7 lábakat bekötve, és megtaláltam, amit írtál, tehát miért is kellene a mikroc kódból hex fordítás? Csak úgy lehetne kiírni a PICre? És végül: a videók alapján már el tudnék indulni, de egyszerűen írjam át, hogy mi melyik lábon van? Mert akkor szívesen megpróbálnám, legfeljebb meglátjuk, hogy beleférek-e 2k-ba!
Idézet: „...tehát miért is kellene a mikroc kódból hex fordítás?” Na itt kezdődnek a gondok! Nem akarlak bántani, de szerintem neked a compiler definíciójával érdemes elkezdeni a tanulást: Bővebben: Link
14. sort még mindig nem javítottad.
A while(PORTB.F1);-el csak az F1 gomb elengedését várod. Ha megnyomsz egy gombot az marha gyorsan teszed, nem fogod vagy tartod fél óráig. A főprogram és a megszakítás külön szálon fut, tehát nem érdekes, ha főprogramod megszakad gombnyomás ideéig. Feljebb írtam neked, hogy egy másik while() szerkezetben, ha tartod az egyik gombot figyelheted az összes többit, és azokkal simán beállíthatod az órát. Nem tudom mennyire világos ez neked, de írok még egy példát:
Ha F1-et elengeded, akkor a SET (beállításból) kilép, és öröm van. Ez egy a sok közül amit könnyedén meg lehet valósítani. Nem érdemes túl bonyolítani ezt. De ebből adódóan, ha elsőnek F2-őt nyomod le akkor lehet arra is egy ilyen szerkezetet írni, és F3-ra is. A lényeg, hogy figyeld melyik gombra mit teszel és jegyezd meg.. Készíts feljegyzéseket, vagy doksit magadnak is a bonyolultabb beállításokról, tapasztalat. ![]() A hozzászólás módosítva: Ápr 9, 2017
Már megírtam az elöbbi példádal
![]() ![]() ![]() Rendben köszönöm. ![]()
Mert csak a ".hex" állományt tudod PIC-re tölteni.
Meg kell értened, hogy minden PIC más, nem vagy csak nagyon minimális esetnél lehet (mondjuk 0.0001%-ban) ugyan azt a programot két különböző típusú PIC-re feltölteni. Egyszerűen nem fog menni. Vannak olyan beállítások melyeket el kell végezned a PIC pontos beállításaihoz, nem elég csak a lábakat definiálnod. A 2kbyte-os limit meg nagyon kevés, elsőnek egy normális fordítót keress, ahol ilyen korlát nincs. Majd keress egy leírást, amely segít a MicroC programozás alapjaiban, majd ezek után a PIC adatlapját is nézegesd, hogy melyek a kötelező beállítások, gondolom majd ebben itt is kaphatsz felvilágosítást, majd csak ezek után kezdj el foglalkozni a programozással. Lehet, hogy most csak úgy látod, hogy csak az kell amit ez az indiai srác írt, de ez csak egy alap amelyből el lehet indulni. Program írás közben az ember vagy 10szer alakítja át vagy módosítja a kezdeti gondolatait, mert kell még ez meg még az is...stb. Kezd el szerintem egy LED villogtatásával, azzal kiismerheted kicsit a működést. Csak szépen lassan, türelmesen..
Nem akartam két kérdést egyszerre feltenni ezért most meg kérdezem.
pic10f322 állítja elö a pwmet. Kódja :
és a lábon van egy 1k ellenállás bc337 tranzitor bázisán és a bc377 colectorára(10k felhuzoval) rávan kötve a 74hc595 blink lábaira(5db van belöle) Amikor az órát átváltom BINeráis ra akkor ha 10 töb led villágit veszitenek sokat a fényeröböl mint ha töbször futna le a a kód. Teszteltem ugy hogy a bázist felhuztam 5v ra akkor nem csinálta de ha pic10f322 visszaraktam megint elkezte. Bin kódja(pic16f628):
És nem értem miért csinálja ötlet?? A hozzászólás módosítva: Ápr 9, 2017
Esetleg próbáld meg csökkenteni vagy növelni a frissítés sebességét. (bináris kiírásét)
Így hirtelen ez jut eszembe.. A hozzászólás módosítva: Ápr 9, 2017
De akkor miért volt jó amikor felhuztam 5v ra a tranyo bázisát??
Akkor nem volt gond. Amugy másodpercenként frissitem.
Milyen jó is lenne, ha egyben lehetne látni a programot.
Emlékein szerint a timer2 -t beállítottad 10ms periodikus megszakítás kérésre. A kiszolgáló rutinban egy számlálót növelsz, ha eléri a 100 -at, beállítod, hogy növelni kell az időt. A nyomógomb rutinokat pergésmentesítetted úgy, hogy megvárja a felengedést.
Tekintsük azt a pillanatot, amikor a megszakítási számláló 99 -nél jár. Ekkor lenyomjuk a PORTB.F1 -re csatlakozó nyomógombot és folyamatosan lenyomva tartjuk mondjuk 1100 ms -ig. Mi történik? A while(PORTB.F1); utasításból nem tud kilépni a főprogram. Közben a megszakítás bekövetkezik, a timer2 kiszolgálója növeli a számlálót, az 100 -ra vált, jelzi, hogy az időt növelni kell, a számláló 0 -ra áll. Jönnek a következő kérések 10ms -enként. Ha ismét bejön 100 db (1000ms, a gomb még mindig le van nyomva), a számláló ismét átfordul 100 -ról 0 -ra. Bebillentené a jelzést, hogy növelni kell az időt, de hatása nincs már, mert még mindig 1. Tehát elveszett egy növelés. Másik módszer: Minden gombhoz felveszünk egy 8 bites regisztert és egy bites változót. A 10ms timer2 megszakításban jeleznénk a főprogramnak, hogy nézzen rá a gombokra. A főprogram, ha rá kell néznie a gombokra, sorra beolvassa a gombhoz tartozó bemenetet (legyen a lenyomott gombhoz tartozó érték 0) és értékét belépteti a gombhoz tartozó 8 bites regiszterbe (balra léptet, az új bit a 0 pozícióba kerül), a 8 bites változó 7. bitjét 1 -re állítja. Ha a 8 bites érték 0xC0, beállítja a gombhoz tartozó jelzőbitet 1 -re. Ha kész az össze gomb kiértékelésével, törli a "rá kell nézni a gombokra" bitet. Megy tovább a főprogram és már a gombok jelzőbitjeit vizsgálja, ha valamelyik kiértékelésével végzett, 0 állítja a gombhoz tartozó jelzőbitet. Akármennyi gombot is kell kezelni, a főprogram fut, jelen esetben tudja növelni az időt, ha kell. A hozzászólás módosítva: Ápr 9, 2017
Valahogy igy gondoltad:
Ha van benne elírás kérlek szólj ![]() Így már jól müködhet? A hozzászólás módosítva: Ápr 9, 2017
Idézet: „if(jobbgomb== 1 || kozepgomb== 1 || balgomb== 1)gombkukol=1;” kihagytam.. ellenörizni is kéne hogy a gombokat felengedték e. Jól gondolom?
Nincs benne a pergésmentesítés.
Ez if változatba hogy nézki mert ez kinai igy nekem ![]()
jobshift = (jobshift << 1) | PORTB.F1 | 0x80;
A hozzászólás módosítva: Ápr 9, 2017
Ezt a shiftelgetés soha se értettem ...
![]() Ezért szerettem volna IF kiváltani a dolgot.
Igy pergés mentesítve van?? A hozzászólás módosítva: Ápr 9, 2017
jobshift <<= 1; azonos a jobshift += jobshift; utasítással.
Nézd meg itt a példánál (example) a két ábrát: unsigned char jobshift esetén a bal oldali a balja léptetés: a jobshift <<= 1 -nek felel meg, a jobb oldali a jobbra léptetés: a jobshift >>= 1 -nek felel meg.
De mi a külöbség a tied és az enyémhez képest??? Azon kívül hogy neked permentes
Túl variálod már teljesen.
Szerintem kezd el vissza olvasni az egészet amit eddig írtunk és válasz egyet és annak mentén dolgozz.
Whilos megoldás azért nem jó mert meg akasztja a fő programot
Hp41C Amit ajánlott azért nem jó számomra bonyolult ez a shift tologatás hát .... Azt a változatot a shiftologatosat szeretném if változatba meg valósítani. Csak hogy lehetne megoldani??
Most mond el nekem, miért gond, ha egy pillanatra leáll a főprogramod?
az idoszamol fügvény ugy müködik hogy a másodpercet két részre bontom (mas2 mas1)
ha mas1 = 9 és akkor nyomom akkor nem fogja átadni a mas2 hogy növelje . És igy már nem számolna tovább mert if (mas1 == 10) nem teljesül.
max ha jó gyógymód erre : if (mas1 => 10) mas1 -= 10; mas2++;
Tedd az egészet interupt-ba..
Nem értem miért bontod ketté az időszámolást. Nem kell ehhez még függvény sem. Megszakításba számold az időt. (óra, perc, másodperc) Kiíratás meg főprogramon belül.. Ennyi az egész. Még 16F628-ra írtam anno: Változók:
Szerkezet a lényeg. A hozzászólás módosítva: Ápr 10, 2017
Linkelt kóddal megy nekem a mai napig bináris órám.
Szépen fut, nincs vele azóta sem gond. Videóim közt megtalálod: Bővebben: Link |
Bejelentkezés
Hirdetés |