Fórum témák

» Több friss téma
Fórum » Folyamatábrás mikrokontroller programozás Flowcode-dal
Lapozás: OK   245 / 360
(#) HuG válasza Bakman hozzászólására (») Dec 5, 2015 /
 
Sajnos nekünk nincs más, mint a kapkodás. Az általunk épített, forgalmazott rendszerek (mind külföldi és ált. Microchip alapúak (16Cxxxx)) tartalmaznak bug-ot. Vannak olyan hibák, amiket nem akarnak vagy nem tudnak kijavítani. Ezt a példát amit felraktam, nekik kellett volna beépíteniük a mikrovezérlőjükbe, de nem hajlandóak, vagy mivel elég régi a proci, már lehet, hogy nem fér bele. Így nekem nem kellene kínlódni hardweresen, meg szoftweresen.

Az indulási késleltetést olvastam itt a fórumben egy hozzászólás erejéig, de HP41C-jét még nem, elolvasom.

Ezeket a finomságokat csak úgy tudja megtanulni az ember, ha végig kínlódja, meg ha kap ilyen hathatós segítséget.
(#) HuG válasza Bakman hozzászólására (») Dec 5, 2015 /
 
Ezzel kapcsolatban van még egy érdekesség, mármint azzal, hogy nem mindent jól állít be a flowcode.
Ennél a panelnél ill. pic12f1822-nél az analóg csatorna kezelését nem jól kezeli a program. Legalábbis ezt tapasztaltam. C-kód generálásnál összeállítja a deklarációkat stb. És ebben van egy ADC TYPE konstans amit erre a mikrovezérlőre 26-ra állít be. De nekem az ADC nem működött.
Ez a mikrovezérlő a kommentekben nincs felsorolva az ADC-TYPE-oknál. Míg végül megkerestem, ill. kitapasztaltam, hogy az ADC-TYPE 10-es változat amivel működik (12f1840).
(#) HuG válasza Bakman hozzászólására (») Dec 5, 2015 /
 
Köszönöm a sok segítséget!
(#) Bakman válasza HuG hozzászólására (») Dec 5, 2015 /
 
Idézet:
„pic12f1822-nél az analóg csatorna kezelését nem jól kezeli a program”
Több ilyen hiba is van a programban, nem egyedi eset. Úgy értem, hogy több kontrollernél vannak ilyen és ehhez hasonló gondok (bug-ok). Nincs mit tenni, valahogy ki kell kerülni a hibát.
(#) HuG válasza Bakman hozzászólására (») Dec 5, 2015 /
 
Idézet:
„A programban használsz Boolean (logikai) változót. Flowcode-ban nem túl szerencsés, hibákhoz vezethet, javaslom a byte típust.”


Elképzelhető-e az, hogy emiatt van az előző fejlesztésemben egy olyan hiba, ami ritkán jön elő és nem találom az okát? Időnként egy feltétles elágazásnál, eltéved a program. A 40db panel nem következetes módon, véletlenszerűen hibázik. Sajnos nincs a panelen ICSP-hogy élesben láthatnám a belét.
Szimulátorban pedig nem tudom előidézni. Csak a hiba jellege (látható tünet) alapján tudom, hogy nem az az ág fut le, mint aminek kellene. Oszcilloszkóppal mérve a bemeneti jeleket jól kapja kb. 99% (legyen 95%)-ban jól fut le, de időnként nem. A probléma a tettenéréssel van, hogy egyszerre 40db megy és nem 1-2 géppel van probléma, hanem véletlenszerűen. De a hiba mindig ugyan az.

Újraírom a programját. Csak 40db felprogramozni menet közben húzós lesz.
(#) Bakman válasza HuG hozzászólására (») Dec 5, 2015 /
 
Javaslom, hogy a 40 egységből csak négyet-ötöt programozz át. Ha azokon nem jelentkezik a hiba, akkor megvan, mit kell változtatni.
(#) HuG válasza Bakman hozzászólására (») Dec 5, 2015 /
 
Ezt úgy szoktam "csinálni", hogy 1db-on panelcsere új programmal. Teljes körű teszt, hogy működni működik-e a berendezés. Utána 10db pót mikrovezérlő felprogramoz. 1 ember gépek bontása, 1 ember mikrovezérlő csere, újabb 10-10-10 felprogramozása, 1 ember gép összeszerel. Nincs idő. Termelés.
(#) niedziela válasza HuG hozzászólására (») Dec 5, 2015 /
 
Szia !

Idézet:
„nem tudom megbecsülni előre azt az időt, hogy mekkora szűrési időre van szükség.”

Milyen környezetben vannak ezek a panelek, hogy ilyen módú és intervallumú szűrésre van szükség ?

4MHz -en kellene járatni, és a program elején beállítani a belső órajelet, ehhez pedig a timert.
Timer alapot ezen belül még lehet pontosítani, én 1000Hz -re állítanám.

Ha ezen kívül külső potival még akarsz ofszetet állítani azt ennél egyszerűbben is meglehet tenni szerintem.
(#) niedziela válasza HuG hozzászólására (») Dec 5, 2015 /
 
Idézet:
„az ADC-TYPE 10-es változat amivel működik (12f1840).”


Multkor kinlódtam vele én is, bár az ADC ment, csak furcsa volt.
Hogyan állítottad át az ADC_TYPE értékét, hogy az, azzal a #define MX_ADC_TYPE_10 fordítsa hex-re ?
(#) HuG válasza niedziela hozzászólására (») Dec 5, 2015 /
 
Szia!

Ez egy berendezésnek (fejésvezérlő) külső indításának javítására szolgál. A probléma kovetkező: leemelő munkahengerben van egy mágnessel előfeszített reed cső (NO). Ha a fejős meghúzza a kötelet, mert meg akarja fejni a tehenet, a reed csőtől elhúzza a dugattyúban található másik mágnest, így a reed cső kontaktot ad. A fejésvezérlő eszt észlelve, elzárja a vákuumot, így a kezelő le tudja húzni a kötélet a fejőkészülékkel, miközben elindul a pulzáció. Ahogy öregedik a leemelő munkahenger, valamiért egyre érzékenyebb lesz a reed cső, mert fajs indítási jeleket küld a fejés vezérlőnek. Valószínű ezek tüskék, de pontos hosszuk nem ismert, mert itt is kiszámíthatatlanul bármelyik készülék tudja ezt produkálni. A gond nem is a fejés indítással van, hanem a fejés végi automatikus leemeléssel, ugyanis ez nem történik meg. A fejésvezérlő programja csúszik szét. Ha a tejátfolyás mérő által indított fejés vége nem történik meg, a tehén túl lesz fejve, ami tőgyulladást okoz.
A pontos időzítést ill. a szoftveres szűrést nehéz "kitalálni", mert nem lehet menet közben, egyszerre 24 fejőállást, vagy 56db fejőállást monitorozni és detektálni a hibát, megállapítani a tüskék hosszát. Ez több okból: egy fejőház nem az a körülmény, ahol laptoppal, oszcilloszkóppal stb. tud rohangálni az ember.

A szoftveres késleltetés nem lehet túl hosszú, mert a kezelőnek annyi ideig stabilan adott pozícióban kell tartani a berendezést, ha túl gyors akkor a valódi indítást is kiszűröm, ha túl lassú akkor meg sohasem fog elindulni a berendezés.

A körülmények mostohák: sz*r, h*gy, amónia stb. A tehén megemeli a farkát és már fröcsög is minden szerteszét.
Az állásszerkezetekre felszerelt berendezések, hatalmas ütéseket kapnak, mert a 500kg-800kg-ig terjedő tehenek fészkelődnek a helyükön, döngetik az állásszerkezetet. Láttam olyat is, hogy az amúgy egy tehén szélességre tervezett helyen egyik tehén elment a másik mellett. Azt hittem szétszakad minden. Tehént nem érdekli, hogy mi szakad.

Keressetek rá a neten: "SAC fejőrobot fábiánsebestyén". Lézeres tőgykeresés és kamera van beszerelve a robot fejbe. Ha bolond a tehén és rúg, ne tudjátok mit kap a robot fej.

Idézet:
„Ha ezen kívül külső potival még akarsz ofszetet állítani azt ennél egyszerűbben is meglehet tenni szerintem.”


Ötlet?
(#) HuG válasza niedziela hozzászólására (») Dec 5, 2015 /
 
Megkerestem az FCD alkönyvtárban a mikrovezérlő leírását: pl: pic12f1822.fcd.

Átnéztem, és van benne egy sor ADC_TYPE_26

Meg megkerestem a CAL könyvtárban az PIC_CAL_ADC.c és megnéztem, hogy melyik ADC_TYPE az ami szerintem jó lehet. Nem sikerült elsőre.

A pic12f1822.fcd-ben kijavítottam az ADC_TYPE_26-ot.
(#) HuG válasza niedziela hozzászólására (») Dec 5, 2015 /
 
Idézet:
„4MHz -en kellene járatni, és a program elején beállítani a belső órajelet, ehhez pedig a timert.
Timer alapot ezen belül még lehet pontosítani, én 1000Hz -re állítanám.”


Bakman segített ebben, kivágta az erdő elől a fát.

Ebben a projektben nincs igazán annak jelentősége, hogy 100ms vagy 120ms, mert itt nem marad le a rendszer semmiről.
A nagyságrendi eltérésből lehet probléma, ha 0.2 sec helyett 2 sec-ig késleltetek, mert az 800db tehénnél 1600sec. Következő alkalommal a fejők kikészítik a vasvillát, mire odaérek.
(#) niedziela válasza HuG hozzászólására (») Dec 5, 2015 /
 
Szia !

Az 1000Hz -es tmr0-t azért írtam, mert azzal a késleltetést egyszerű meghatározni.
Ha alapból, csak a példa kedvéért mondjuk van konstans 100mS, ahhoz a potival +/- tudsz adni.

Idézet:
„A pic12f1822.fcd-ben kijavítottam az ADC_TYPE_26-ot.”

Kijavítottam én is, Köszi !
(#) HuG válasza niedziela hozzászólására (») Dec 5, 2015 /
 
Nekem az 1000Hz-es megszakítással van bajom, ill. a nagyságrendjével.

Nagyon nagyon régen foglalkoztam mikrovezérlő programozással. Akkor programoztam utoljára PIC-et, amikor 16C84-es újdonság volt.

Nekem újra kell tanulnom az egészet. Kellene annyi agyamnak lenni, hogy kiszámoljam vagy annyi tapasztalatomnak lennie, hogy ráérezzek, hogy a megszakítás kérelmek gyakoriságával, valamint az interruptokba írt kód mennyisége ne akadályozza a programfutást stb.

Annyira sok minden újdonság van ebben a Pic-es dologban, meg mindenféle periféria, hogy rengeteg idő kell. Ezért tetszik a Flowcode, mert agresszív fejlesztést tesz lehetővé (meg nagy szívásokat is), mert ha újra megtanulnám az Assembly-t, akkor kénytelen lenne az ember mindent megírni, következetesen végigmenni mindenen és nem azt gondolni, hogy ha beállítom a programban az internal clockot, akkor azt lekezeli, nem kell vele foglalkozni.

Idézet:
„Ha alapból, csak a példa kedvéért mondjuk van konstans 100mS, ahhoz a potival +/- tudsz adni.”


Én úgy gondolom, hogy ez történt, csak a maximum beállítható, külső időt arányosítom.
A hozzászólás módosítva: Dec 5, 2015
(#) niedziela válasza HuG hozzászólására (») Dec 5, 2015 /
 
Ha nem értem teljesen félre amit szeretnél akkor ez is egy lehetőség.
potival beállítasz egy időt ami a késleltetés, és ahhoz számolsz 1mS pontossággal.

tmr.fcf
    
(#) HuG válasza niedziela hozzászólására (») Dec 5, 2015 /
 
Nézem.
(#) niedziela hozzászólása Dec 5, 2015 /
 
Szia !

Villámkérdés
Ha be szeretném kapcsolni az ADC belső referenciát, vajon elég egy C blokkban megadni
FRVCON = 0b11000001; vagy piszkálnom kell az PIC_CAL_ADC.c -t ?

köszi,
(#) Bakman válasza niedziela hozzászólására (») Dec 6, 2015 /
 
A beállítás függ a kontrollertől, de általánosságban elmondható, hogy az adcon1 és vrefcon0 regiszterekkel kell játszani.
(#) niedziela válasza Bakman hozzászólására (») Dec 6, 2015 /
 
Szia !

Magyarázzátok el légyszi, mert le vagyok maradva egy szinkópával, ezekkel a módosításokkal.

PIC_CAL_ADC.c

  1. if (Vref != 0)                                                                                 
  2.                         st_bit(adcon1, ADREF1);
  3.  
  4.                 old_tris = *tris_reg;                                                                  
  5.                 *tris_reg = old_tris | tris_mask;
  6.                 *ansel_reg = *ansel_reg | tris_mask;
  7.                 adcon0 = (0x01 | (Channel << 2));                                              
  8.                 delay_us(T_Charge);                                                                            
  9.                 adcon0 = adcon0 | 0x02;                                                                
  10.         }


Szeretném bekapcsolni
ADCON1 0-1 bit-jét --> adcon1 = adcon1 | (ADREF & 0x03);
FVRCON --> fvrcon=fvrcon | 0xC2;

Hova illesszem ezt be, egyáltalán igy jó ?
(#) Bakman válasza niedziela hozzászólására (») Dec 6, 2015 /
 
Mit szeretnél elérni?
(#) niedziela válasza Bakman hozzászólására (») Dec 6, 2015 /
 
ADC Fix feszültség referenciát bekapcsolni.
(#) Bakman válasza niedziela hozzászólására (») Dec 6, 2015 /
 
Legalább azt áruld el, milyen kontrolleren.
(#) niedziela válasza Bakman hozzászólására (») Dec 6, 2015 /
 
Nagyjából mindegy, jelenleg a módosítás menetét szeretném megismerni.
De konkrét kontroller pl: 16F1936, 12F1822, ....
(#) Bakman válasza niedziela hozzászólására (») Dec 6, 2015 /
 
Nem mindegy, mert vannak különbségek, az adatlapokban benne vannak.

Mivel a Flowcode-ban nem lehet megadni a belső referenciafeszültséget, kénytelen vagy C blokkokkal operálni. Én így csinálnám (lásd melléklet). A regisztereket kikeresve az adatlapból, végig lehet követni, melyik mit csinál. Perpillanat az an0 lábon lévő feszültséget olvassa be és adja vissza az x nevű változóban, 8 bites felbontással.

Ha kevés a 8 bites felbontás, akkor az adresh és adresl regisztereket is ki kell olvasni, nem csak az egyiket.

ADC.fcf
    
(#) niedziela válasza Bakman hozzászólására (») Dec 6, 2015 /
 
Szia !

Köszi, kipróbálom a napokban.

Üdv.
(#) Kovabe hozzászólása Dec 13, 2015 /
 
Sziasztok
Olyan kérdésem lenne hogy a több irányú elágazást lehet e 10-nél több felé ágaztatni?
(#) kaqkk válasza Kovabe hozzászólására (») Dec 13, 2015 /
 
Nem de használhatsz többet a második elágazás 11-től indul és 20 ig megy stb
A hozzászólás módosítva: Dec 13, 2015

20.fcf
    
(#) Bakman válasza Kovabe hozzászólására (») Dec 13, 2015 /
 
Nem. Ha két vagy több ilyen elágazást teszel egymás után, nem jó? Ha a tíz lehetséges irány közül egyik sem jó, akkor a "bal szélen" megy tovább a folyamat, tehát a tíz irányú elágazás tulajdonképpen 11 lehetséges irányt jelöl.
A hozzászólás módosítva: Dec 13, 2015
(#) Kovabe válasza kaqkk hozzászólására (») Dec 13, 2015 /
 
Valahogy sejtettem, köszönöm
(#) Kovabe hozzászólása Dec 17, 2015 /
 
Sziasztok
A mellékelt programban hogy tudnám megkülönböztetni az utoljára bekapcsolt bit-et? Sajnos semmi ötletem nincs rá.
Következő: »»   245 / 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