Fórum témák
» Több friss téma |
Itt vannak a parancsok:
De a konverziós parancs után nem kell külön parancsot kiadni, csak olvasni kell a portot, majd ha kész, kiolvasni a hőmérőt. A flowcode makró blokkja után nem kell, mert benne van a késleltetés, inkább várakozás, ami elég gáz megoldás. Ha külön adod ki a konverziós parancsot és azonnal kiolvasod, akkor az nyílván rossz eredményt fog adni. Már megvan az tervem a megoldásra, hogy minden menjen és közben konvertáljon csak magában a hőmérő. Na most eszem! ![]() A hozzászólás módosítva: Nov 24, 2012
Köszi! Megvan, működik C nélkül! Hamarosan felteszem a megoldást, mert ki kell szednem egy nagy programból és most el kell ugranom...
Csatoltam a megoldást.
Lényege, hogy a konverzió indítását a Timer0 megszakításban egy segédszámláló ütemezésében kezdem, kb. 1 sec-enként, majd utána a Timer0 megszakításában (183Hz) ellenőrzöm, hogy befejeződött-e. Ha igen, beállítok egy jelzőt, amit a fő ciklusban figyelek és ott történik meg a kiolvasás, formázás, kijelzés. Az egészben egy jó dolog van, hogy ezt megengedi a Flowcode one wire blokkja, ami rossz, hogy még is készítettek nekünk egy olyan blokkot is, ami majd egy másodpercre megállítja a program futását és erről nem nagyon dicsekedtek. Persze itt jön az a fő gondolat, amit ebben a topicban sem szabad elfelejteni, hogy ha valaki nem tud programozni az Flowcode-al sem fog tudni és könnyen összelapátol egy olyan folyamatot, ami használhatatlan... ![]()
Nem tudom, hogy megjegyzi-e a címet, amit előzőleg elküldtem, de nem is érdekes, mert utána csak olvasni kell a portot, ha nem nulla, akkor kész a konverzió.
Nekem ez már kínai. Pláne másik mikrovezérlő típus...
![]()
Mindegy milyen PIC, működnie kell.
Viszont a korábbi kódodban nem csak a kijelzés hibádzik, hanem a századok kiszámítása is. 90 századról ugrik egészre, holott 93 századról kéne. Tudod miért?
Nem foglalkoztam még mélyebben a dologgal. Az volt a cél, hogy elinduljon. Lássam, hogy az egész rendszer, programozás, letöltés, futtatás megy e.
20 éve ez az első pic projectem. Azelőtt még a parallax ASM volt c52 és 84 vezérlőkkel. Már rég elfelejtettem. Újrakezdő vagyok. Miért?
Azt hittem tudom, de kiderült, hogy nem.
A hozzászólás módosítva: Nov 24, 2012
Annyi!
228000/9600=23,75 23*9600=220800 228000-220800=7200 Vagy 9600*0,75=7200 A hozzászólás módosítva: Nov 24, 2012
Túl gyors voltál!
Persze, hogy annyi, csak én belekeveredtem. Naszóval, a 380 MOD 16 az 12. Ezt szorzod 6-al, akkor az 72 Ellenben ha 380*100=38000 MOD 1600 = 1200 /16 = 75 ami a helyes érték Tehát kerekítési hibát szorzol, ami csak növekszik. Ezért először fel kell szorozni az alapot. A hozzászólás módosítva: Nov 24, 2012
Ha valamit nem értesz a csatolt folyamattal kapcsolatban, nyugodtan kérdezz, nem túl bonyolult, csak a szervezés logikáját, indokát kell megérteni.
Később kipróbálom. Most a porszívót idomítom.
![]()
Ezzel a MOD dologgal van még némi probléma, hogy csak kijelzésre jó. Összehasonlításhoz jobb lenne egy fixpontos szám. Ezt elő lehet állítani végül is, ha az egészeket szorzod 100-al és a MOD-al kiszámolt maradékot hozzáadod. Így pl. a 23,75 esetén 23*100+75=2375 lesz, amivel már lehet szabályzókörökben dolgozni...
Mivan, nem indul a porszívó!
![]() Ennek véget kell vetni, összehozlak vele! A megszakítás egy olyan szubrutin(elkülönített programrész), ami csak akkor hajtódik végre, ha egy megszakítási esemény ezt kéri. Ilyen a Timer0 túlcsordulása is. Ekkor a program megszakítja az éppen folyó dolgát(elmenti amit el kell, hogy emlékezzen hol ját) és elkezdi végrehajtani a megszakítási rutint. Amikor azzal végzett visszatér és folytatja tovább a következő megszakításig. A megszakításban csak nagyon fontos dolgokat szabad végrehajtani, amik nagyon rövid idő alatt lefutnak. Ezért használunk jelzőket. A kijelzés, hosszabb számolás már a fő rutinban ráér. Persze vannak egyszerű számolások(nem lebegőpontosak) amiket ha fontos, még ott el lehet végezni, de ez ritkább és el kell tudni dönteni, hogy mennyire sűrgős. Most mennem kell, 3/4 óra... A hozzászólás módosítva: Nov 24, 2012
Float-ot nem a PIC-nek találták ki, csak nagyon indokolt esetben szabad használni, nemrég volt erre példa, hogy 3 számítás telenyomott egy 2000 szavas 16F-es PIC-et!
Nézd meg mekkora kódot fordít és milyen lassút!
Igen! Az csak a kijelzéshez jó. A folyamat irányítására ott van az a szám, amit a DS-ből beolvas a Get_Temp.
Ha temp= 352 az 22°C. 336 az 21°C. 320 az 20°C. Ugye 1 °C 16 részre van osztva. Ezzel már lehet kereskedni. ![]()
De indul. Csak van az elején egy ilyen hosszú, ormányszerű izé. No azt kell elég sokat toszigálni előre, hátra.
![]()
Ezt így elméletben tudom is, csak még nem gyakoroltam.
Nem úgy mint a porszívózást. ![]()
Ha mínusz a szám akkor a kettes komplemensét kell képezni +1
temp=~temp+1
Ez a sor nem kell
2. temp2 = temp2 / 10
Mit számolgattok ilyen bőszen?
![]()
Nálam ez így néz ki:
Mínusz esetén 0-ból kivonom és előjelet rajzolok az LCD-re.
Még egy hasonló blokk van, ami érdekes dolgokat tud okozni, ha nem nézünk mögé. Ez a gomb kezelése. Azért elég tré megoldás, hogy a gombhoz beállított "időzítés" valóságban várakozás, ami szintén elfogadhatatlan egy jó programban.
Fontosnak látom ezt tudni és hanyagolni, helyette normális gombkezelést írni, amit tökéletesen támogat a környezet. Ha valakinek van ötlete várom, mielőtt lelőném a poént, ti hogyan csinálnátok? Feladat, hogy a gombok kezelése ne vegyen el időt a fő száltól, csak annyit amennyi feltétlenül szükséges, azaz emberi léptékkel észrevehetetlen. Ha a fő szál valami miatt megakadna(pl, LCD kjelzés, vagy egyébb időigényesebb számítás) akkor a gomb lenyomása ne vesszen kárba. Legyen prellmentesítés, beállíthatóan, valamint legyen egy késleltetett ismétlés is. (ha ez 13 blokkból megvan, akkor ügyesek vagytok! ![]() Később tovább léphetünk az ismétlési sebesség menet közbeni módosítására, hogy könnyebb legyen egy adott érték beállítása. Másik megoldás a helyiérték léptetése, de ez már a gombhoz tartozó esemény lekezelése... Segítségként, Timer0, vagy más időzítő megszakítás szükséges hozzá. Jó fejtörést! A hozzászólás módosítva: Nov 25, 2012
Csupán a késleltetés nem oldja meg a felsorolt kívánalmakat.
A LED-ek azért jók, mert lehet szimulálni a kimenetet velük. Igaz, talán a Chip ablakban is követhető a láb állapota. Ezekkel az átgondolatlan makrókkal az a baj, hogy képesek olyan program kialakítására rávenni azokat, akik nem látnak beléjük, ami nem fog működni, vagy nem jól. Itt aztán jön a roló...
Még annyit, hogy ha direkt használod a portokat, akkor be kell tudnod állítani az irányukat, ami C blokk nélkül bajos. Viszont megnéztem pár blokkot, igen lazán bánik a programmemóriával. A flowcode nem arról lesz híres, hogy tömör kódot fordít. Persze, lehet, hogy a hex fordító jól optimalizál!
Bocsi, most látom, hogy vannak Be és Kimenet deklaráló blokkok. Így kicsit más a menet. Hiába ezt még én is csak most tanulom! A hozzászólás módosítva: Nov 25, 2012
Ezeknek a blokkoknak eleve nem így kéne létezniük. Viszont azt nem állítom, hogy könnyű lenne eleve jó megközelítéssel blokkokat gyártani! Elég komoly ellentmondás!
|
Bejelentkezés
Hirdetés |