Fórum témák

» Több friss téma
Fórum » Folyamatábrás mikrokontroller programozás Flowcode-dal
Lapozás: OK   113 / 361
(#) watt hozzászólása Dec 19, 2012 /
 
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
(#) kaqkk válasza watt hozzászólására (») 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
(#) pjg válasza watt hozzászólására (») Dec 19, 2012 /
 
Ügyes.
Az alsó számítás blokknál mi az a nagy piros petty?
(#) watt válasza pjg hozzászólására (») Dec 20, 2012 /
 
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.
(#) watt válasza kaqkk hozzászólására (») Dec 20, 2012 /
 
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:
  1. unsigned long szam;
  2.         unsigned char digitek[10], cik;
  3.  
  4.        
  5.         void main(void)
  6.         {
  7.  
  8.         //10 digites szám digitekre bontása.
  9.        
  10.                 szam=3234567890;
  11.                 for(cik=0;cik<10;cik++){
  12.                         digitek[cik]=szam % 10;
  13.                         szam=szam/10;
  14.                 }
  15.  
  16.         while(1);      
  17.         }

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ó:
  1. //Ciklus
  2.     //Ciklus: Ciklus 10 alkalommal
  3.     for (FCLV_LOOP1=0; FCLV_LOOP1<10; FCLV_LOOP1++)
  4.     {
  5.  
  6.         FCV_DIGIT_TOMB[FCV_CIK] = FCV_SZAM % 10;
  7.         FCV_SZAM = FCV_SZAM / 10;
  8.         FCV_CIK = FCV_CIK + 1;
  9.  
  10.  
  11.     }

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.
(#) pjg válasza watt hozzászólására (») Dec 20, 2012 /
 
Köszi
(#) Frankye válasza watt hozzászólására (») Dec 20, 2012 /
 
A virtuális aranyérem csatolva. Kokozo: Gratulálok!

medal.jpg
    
(#) kokozo válasza Frankye hozzászólására (») Dec 20, 2012 /
 
Köszönöm mindenkinek
(#) pjg válasza kokozo hozzászólására (») Dec 20, 2012 /
 
(#) Sanyessz hozzászólása Dec 21, 2012 /
 
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?
(#) pjg válasza Sanyessz hozzászólására (») Dec 21, 2012 /
 
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
(#) watt válasza Sanyessz hozzászólására (») 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
(#) watt hozzászólása 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.
(#) watt hozzászólása Dec 21, 2012 /
 
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.

(#) watt hozzászólása Dec 21, 2012 /
 
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
(#) watt válasza (Felhasználó 15355) hozzászólására (») 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.
(#) niedziela hozzászólása Dec 22, 2012 /
 
Szia !
PIC18F-ben hogyan lehet a tmr0-nak offset értéket állítani ?
köszi !
(#) watt válasza (Felhasználó 15355) hozzászólására (») Dec 22, 2012 /
 
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:
  1. rom char OO_CRC_ROM[]={0. 94,..};

Az általad "jó tömbbel" vigyázz, mert az mutató típus, ami nem az értéket adja vissza, hanem a címét!
(#) niedziela válasza niedziela hozzászólására (») Dec 22, 2012 /
 
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 ?
(#) Hp41C válasza niedziela hozzászólására (») Dec 22, 2012 /
 
Talán tmr0l vagy tmr0h neveket kellene használni...
(#) watt válasza niedziela hozzászólására (») Dec 22, 2012 /
 
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ó...
(#) niedziela válasza watt hozzászólására (») Dec 22, 2012 /
 
Köszi fiuk, ezt már lefordította, de még jobban nem tudtam kipróbálni.
Üdv !
(#) Szamy hozzászólása Dec 23, 2012 /
 
Üdvözletek!
100Hz -es Pwm -et hogyan tudok beállítani?
(#) watt válasza Szamy hozzászólására (») Dec 23, 2012 /
 
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.
(#) watt hozzászólása Dec 23, 2012 /
 
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
(#) Szamy válasza watt hozzászólására (») 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!
(#) Kovabe hozzászólása Dec 23, 2012 /
 
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.
(#) watt válasza Kovabe hozzászólására (») Dec 23, 2012 /
 
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
(#) watt válasza watt hozzászólására (») 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
(#) watt hozzászólása Dec 24, 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.
Következő: »»   113 / 361
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