Fórum témák
» Több friss téma |
Sziasztok! Akkor lezárnám a mai fejtörőt!
Köszönöm a részvevőknek a példákat! Csatoltam a kódot, amiből kiindultam az összehasonlításhoz. Látható, hogy kokozo nagyon közel volt, csak a műveleteket kellett volna a maradékképzésre cserélnie! Ezért ma neki jár a virtuális aranyérem! További szép estét, jó éjszakát! A hozzászólás módosítva: Dec 19, 2012
Tettem a kódodba lcd kijelzőt - először az első szám 0 volt (csak akkor lett 1 amikor egy számítással 1 re állítottam a cik változót , de nem adja mind a 10 számot , én volnék béna ?
5 után 7 jön és az az utólsó amit kijelez A hozzászólás módosítva: Dec 19, 2012
Ügyes.
Az alsó számítás blokknál mi az a nagy piros petty?
Töréspont. Szimulációkor itt megáll a program futása, meg tudod nézni hogy állnak a változók. Jobb gombbal kattintasz a blokkra és ott lesz a töréspont menüpont.
Azt is vedd figyelembe, hogy a szimulátor hibás, ha 1-nél nagyobb számmal kezdődik a 10jegyű, akkor nem jól számol. Valamint az is fontos, hogy az ULONG legnagyobb tárolási értéke 4294967295.
A rutint kipróbáltam C-ben, hibátlan. Ha valakit érdekel így néz ki C-ben:
Ha a Flowcode hozzáférést engedne a for ciklusának belső változóihoz a ciklus blokk deklarációjánál, akkor még rövidebb kód kerekedne. Erről lenne szó:
Szóval a FCV_CIK-re és a hozzá tartozó műveletre nem lenne szükség, ha lehetne használni a FCLV_LOOP1 belső változót. Ilyen formán a flow eléggé pocsékol, de ezt tudjuk róla.
A virtuális aranyérem csatolva. Kokozo: Gratulálok!
Hello
Van nekem egy lm35 hőmérségket érzékelőm, nos most az a baj vele hogy valós 36 C-nél 20 jelez ki, 22nél csak 13-at, 0-nál 1-et. A hőérzékelő a PIC analog bemenetére van kötve, a kiiratás direktbe megy, semmi képlet. Ez gondolom igy nem jó, milyen képletet szokás alkalmazni hogy való értékeket jelenitsen meg?
Ott valami nem stimmel
Adatlap szerint: Choose R1 = −VS/50 μA V OUT=+1,500 mV at +150°C = +250 mV at +25°C = −550 mV at −55°C Adatlap 7. oldal Figure 7. A hozzászólás módosítva: Dec 21, 2012
Az LM35 egytápos(plusz 4..20V-ig) táplálás esetán +2C...150C-ig mér 10.0mv/C felbontással.
Az adatlapban benne van, hogyan kell táplálni, hogy +2C alatt is mérjen, azaz negatív feszültséggel kell előfeszíteni a kimenetet és azt meg is kell tudni mérni, azaz PIC-el simán nem lehet, áramkört kell elé tenni. A hozzászólás módosítva: Dec 21, 2012
Próbálok belső C változót használni C blokkban, egyelőre sikertelenül. Van valakinek ötlete, hogyan lehetne hozzáférni? Nekem most a DS18B20 CRC-jét tároló változó tartalmát(ONEWIRE_1_oo_crc) kéne áttöltenem egy élő flow változóba.
Van még egy kérdés, illetve észrevétel.
Amikor az 1Wire blokk tulajdonságánál beállítjuk, hogy legyen CRC, akkor a C kódban a #define ONEWIRE_1_OO_CRC_EN 1 Állítódik be, egyébként értéke 0. Viszont ha tovább nézzük a kódot látható, hogy a fordítási feltételeknél az #if OO_CRC_EN ==1 vizsgálat történik, azaz nem lehet bekapcsolni a CRC kezelést. Ezt a működés is alátámasztja, mert nem a CRC kóddal tér vissza a oo_read_device() rutin, hanem 0-val. Mekerestem a FC5_PIC_One_Wire.c fájlt és módosítottam a hibás bejegyzéseket. az #if OO_CRC_EN == 1 helyett a #if %a_OO_CRC_EN == 1 a helyes.
Kiderült, hogy nem tudja befordítani a saját CRC táblázatát(lehet, hogy nem volt véletlen a CRC mellőzése?). A hiba, amit kiír nem sokat segít(faliure), nem értem, mert C blokkban simán létrehoztam a táblázatot, lefordult, amit ő fordítana be, az meg nem megy. Lehet, hogy beletörik a bicskám!
A hozzászólás módosítva: Dec 21, 2012
Hát épp az, hogy így sehogy! Fogalmam nincs miért definiálták a OO_CRC_ROM ot!? Kitöröltem és lefordult, működik. Igaz még jó pár dolgot változtattam.
Ha belenézel a FCD_One_Wire0_oo_read_device, valamint amit ebből hívnak a FCD_One_Wire0_oo_rx_byte rutinba, akkor láthatod, hogy mind a 9 bájtra számol CRC-t, azaz a CRC bájtot is bele számolja, ezért a végén, feltéve hogy az átvitel hibátlan, a kiszámolt érték 0 lesz. Igazából engem a CRC valós értéke érdekelt volna, ezért átírtam úgy, hogy csak 8 bájtot számoljon, de ezt lehet, hogy vissza alakítom, hogy ha a visszatérési érték nem nulla, akkor rossz a CRC, azaz az eredeti elképzelés szerint működjön. Csatoltam a módosított fájlt, amiben már működik a CRC kiszámítása. Az oo_read_device visszatérési értéke a CRC-t tartalmazza. Ha kiveszem a 8bájtos módosítást, akkor 0-t, ha jó az átvitel.
A kérdésedhez még annyit, hogy a ROMARRAY_S az egyenlő "rom char"- al a ROMARRAY_E pedig "[]"-el. Ezeket korábban definiálták valamelyik *.c-ben, vagy *.h-ban.
Az 1wire tömb valójában így néz ki:
Az általad "jó tömbbel" vigyázz, mert az mutató típus, ami nem az értéket adja vissza, hanem a címét!
Szia !
Kicsit pontosítom a kérdésem, 1MHz órajel mellett szeretném a TMR0 frekvenciáját 1KHz-re állítani. 16Fx -nél C blokkba a tmr0 += x; beálltható, de 18Fx -nél ezt nem fogadja el. Hogyan lehet ezt beállítani ?
Talán tmr0l vagy tmr0h neveket kellene használni...
Ha jól emlékszem a 18F-eknél a 16bites TMR0-t 8 bitesként használja a Flow. Tehát a tmr0l-t próbáld feltölteni. Csak 256-os osztásra számíts tőle, + az előosztó...
Köszi fiuk, ezt már lefordította, de még jobban nem tudtam kipróbálni.
Üdv !
Hardveresen nehezen, esetleg 2MHz-es kvarccal 122Hz, de minek ilyen alacsony freki?
A szoftveres megoldást pedig simpi már rég feltette, az úgy állítod, ahogy tetszik.
Sziasztok!
Így a világvége után kitörve a sötétségből az első napi találós kérdésem egy a DS18B20-akhoz használható CRC8 kódolása lenne, amit Flowcode-ban lehet használni a hőmérő által küldött adatok jóságának ellenőrzésére(vagy más egyés saját adatfolyamunk biztonságos továbbítására 10..30bájtig). Kérdés, hogyan lehet a legegyszerűbben kiszámolni néhány adat CRC-jét blokkokkal. Lehet, sőt kell is használni 1db C blokkot, erre készüljetek, de nem kódot kell beletenni, úgyhogy ettől nem kell tartani. Szabad használni a gyári forrásokat is ötletszerzésre! Valójában pofon egyszerű (utólag persze). Este fogom lezárni a fejtörőt. Kíváncsian várom a megoldásokat! Jó fejtörést! A hozzászólás módosítva: Dec 23, 2012
rákeresek...
van egy elektronika, amit 100Hz -es négyszögjellel kell megvezérelnem. Az a baj, hogy ráadásul kitöltésvezérelt, szóval nem elég csak egy fix kitöltés, mert 8-14% között állítgatni kell. Köszönöm!
Sziasztok kicsit nem ide tartozik de flow-ban szeretném megvalositani ha van értelme illetve ha müködik. Adott egy16F690 és arra szeretnék több ds18B20-at rákötni de én ugy szeretném megcsinálni hogy minden egyes lábra külön külön kötnék egy DS-t. Szerintetek ez elvadult ötlet vagy müködöképes?
Más kérdés, van esetleg valami magyarnyelvü leirás hogy a DS-t hogy kell felporgramozni flowcode-ban mert annyi állitás van és nem tudom mi mire való. Üdv Kovács Mégvalami igy elöre is boldog karácsonyt és köszönet az idáigi segitségért.
Szia! Nem sok értelme van külön lábra tenni őket, pont azért találták ki, hogy elég legyen 1 láb. A Flow 1Wire blokkja szépen lekezel mindent ami kellhet (kivéve a CRC-t, de azt megoldottam elvileg), csupán meg kell érteni a DS működését és a folyamatot, ahogy használni kell. Ha gondolod a DS18B20 topicban tudunk erről bővebben beszélni...
A hozzászólás módosítva: Dec 23, 2012
Lehet, hogy kicsit nehéz volt a kérdés. Valójában én is megszenvedtem vele, mert C-blok nélkül nem működik, mivel nem jöttem rá, hogyan lehet ROM-ba táblázatot létrehozni, amire lehet indexelve hivatkozni. Sajnos a Custom blokkok nem jól máködnek, mert olyan, mint ha C-blokkot hoznék létre, azaz nem adódnak át a változók értékei a folyamatábra változóinak.
Ezért a megoldás csak PIC-ben működik, nem lehet szimulátorban futtatni sajnos. Csatoltam a programot. Boldog Karácsonyt! A hozzászólás módosítva: Dec 23, 2012
Időközben sajnos rájöttem valamire! A Flowcode szimulátora nem képes semmit valós mivoltukban futtatni, ez csak szemfényvesztés! A dolog úgy működik, hogy amit a szerkesztőben létrehozunk folyamatot, illetve változókat, ahhoz írtak egy PC-n futó, a mikrovezérlőkhöz valós kapcsolattal nem rendelkező szimulátort. Tehát azokat a makro blokkokat sem képes lefuttatni, amiket gyárilag ki lehet választani. Az LCD kijelzés is csak egy PC program, virtuális és csak azért "működik", mert nincs visszatérési értéke! Egyik makró sem képes értéket visszaadni, mert a szimulátor nem futtatja a bennük lévő C kódot!
Ezért hiába írunk saját makrót(Custom), ugyanúgy nem fog a szimulátorban működni, mint egy C blokk. |
Bejelentkezés
Hirdetés |