Fórum témák

» Több friss téma
Fórum » Folyamatábrás mikrokontroller programozás Flowcode-dal
Lapozás: OK   93 / 360
(#) watt válasza (Felhasználó 15355) hozzászólására (») Nov 24, 2012 /
 
Itt vannak a parancsok:
  1. // 1. ROM function commands
  2.  #define        OO_READROM            0x33
  3.  #define           OO_MATCHROM           0x55
  4.  #define          OO_SKIPROM            0xCC
  5.  #define        OO_SEARCHROM          0xF0
  6.  #define        OO_ALARMSEARCH        0xEC
  7.  
  8.  // 2. Memory Command Functions
  9.  #define        OO_WRITEPAD           0x4E
  10.  #define        OO_READPAD            0xBE
  11.  #define        OO_COPYPAD            0x48
  12.  #define        OO_CONVERTT           0x44
  13.  #define        OO_RECALLE2            0xB8
  14.  #define        OO_READSUPPLY        0xB4


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
(#) watt válasza (Felhasználó 15355) hozzászólására (») 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...
(#) watt válasza watt hozzászólására (») Nov 24, 2012 / 1
 
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...
(#) watt válasza (Felhasználó 15355) hozzászólására (») Nov 24, 2012 /
 
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ó.
(#) pjg válasza watt hozzászólására (») Nov 24, 2012 /
 
Nekem ez már kínai. Pláne másik mikrovezérlő típus...
(#) watt válasza pjg hozzászólására (») Nov 24, 2012 /
 
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?
(#) pjg válasza watt hozzászólására (») Nov 24, 2012 /
 
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?
(#) watt válasza pjg hozzászólására (») Nov 24, 2012 /
 
Azt hittem tudom, de kiderült, hogy nem.
A hozzászólás módosítva: Nov 24, 2012
(#) pjg válasza watt hozzászólására (») 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
(#) watt válasza pjg hozzászólására (») 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
(#) watt válasza pjg hozzászólására (») 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.
(#) pjg válasza watt hozzászólására (») Nov 24, 2012 /
 
Később kipróbálom. Most a porszívót idomítom.
(#) pjg válasza watt hozzászólására (») Nov 24, 2012 /
 
A megszakítás nekem idegen dolog.
(#) watt válasza pjg hozzászólására (») Nov 24, 2012 /
 
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...
(#) watt válasza pjg hozzászólására (») Nov 24, 2012 / 1
 
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
(#) watt válasza (Felhasználó 15355) hozzászólására (») 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!
(#) watt válasza (Felhasználó 15355) hozzászólására (») Nov 24, 2012 /
 
Nézd meg mekkora kódot fordít és milyen lassút!
(#) pjg válasza watt hozzászólására (») Nov 24, 2012 /
 
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.
(#) pjg válasza watt hozzászólására (») Nov 24, 2012 /
 
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.
(#) pjg válasza watt hozzászólására (») Nov 24, 2012 /
 
Ezt így elméletben tudom is, csak még nem gyakoroltam.
Nem úgy mint a porszívózást.
(#) pjg válasza (Felhasználó 15355) hozzászólására (») Nov 24, 2012 / 1
 
Ha mínusz a szám akkor a kettes komplemensét kell képezni +1

temp=~temp+1
(#) pjg válasza (Felhasználó 15355) hozzászólására (») Nov 24, 2012 /
 
Ez a sor nem kell
2. temp2 = temp2 / 10
(#) watt válasza (Felhasználó 15355) hozzászólására (») Nov 24, 2012 /
 
Mit számolgattok ilyen bőszen?
(#) watt válasza (Felhasználó 15355) hozzászólására (») Nov 24, 2012 /
 
Nálam ez így néz ki:
  1. Hofok_tort = Hofok_1 * 100
  2. Hofok_tort = (Hofok_tort MOD 1600)
  3. Hofok_tort = Hofok_tort >> 4 //:16
  4. Hofok_1 = Hofok_1 >> 4 //:16


Mínusz esetén 0-ból kivonom és előjelet rajzolok az LCD-re.
(#) watt hozzászólása Nov 25, 2012 /
 
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! ) A gomb lenyomásának tényét kell megoldani, a gomb lenyomásához tartozó események lekezelése természetesen külön történet, ahhoz több blokk kell...

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
(#) watt válasza (Felhasználó 15355) hozzászólására (») 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ó...
(#) watt válasza (Felhasználó 15355) hozzászólására (») Nov 25, 2012 /
 
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
(#) pjg válasza watt hozzászólására (») Nov 25, 2012 /
 
Ezek a makrók átírhatók véglegesre.
(#) watt válasza pjg hozzászólására (») 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!
(#) pjg válasza watt hozzászólására (») Nov 25, 2012 /
 
Akkor szerintem maradjunk annyiban, hogy ez a program a már nem kezdőknek való, akik hamarosan tovább lépnek a "C", majd asm felé.
Következő: »»   93 / 360
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem