Teoreticka otazka

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

martind1983
Okoloidúci
Okoloidúci
Príspevky: 17
Dátum registrácie: 30 Jún 2011, 00:00
Kontaktovať používateľa:

Teoreticka otazka

Príspevok od používateľa martind1983 » 14 Aug 2011, 12:03

Zdravim vo spolok. Mam taku otazku co mi nejde do hlavy samozrejme problem viem poriesit inac. Len dana vec sa mi zda zbytocna. Ide o to, ze som robil aplikaciu pri ktorej som vyuzival na MCU od Microchipu typ PIC16F88 starsia stredna rada MCU. Takzvany CCP module "Compare,capture,PWM module" Potreboval som merat casovu dlzku polperiody signalu zacinajuc nabeznou hranou a konciac spadovou. Capture mode tohoto modulu sa mi zdal byt velice dobre riesenie. Jediny hacik co ma zaujal bol, ze ked som potreboval merat vsetko zmeralo ako malo hodnotu som ulozil do premennej vynuloval vsetko tak aby som mohol robit dalsie merania. A nastavenim prislusnych bitov CCP1CON pre nastavovanie prace modulu. do log 0 som modul vypol teda zresetoval. A moja otazka.Preco sa potom nevypne aj prisluchajuci flag a po kazdom prejdeni periody mi to nastavi flag bit CCP modulu na hranu, ktora bola predtym nastavena. Myslim pred vypnutim modulu. Aku to ma potom logiku cely modul vypinat. Cisto dostatocne je len kontrolovat flag bit a mazat ho. V datasheete pisali, ze prepnutie prescalera na iny pracovny mod nastavi fault flag bit. Ale aky to ma potom zmysel vypinat ten modul, ked aj tak reaguje? Alebo ja neviem ako to mam naprogramovat? Programovanie bolo robene v C jazyku. Vo vyssej verzii CCS compilera. Dakujem za rady a nazory.
0
Pri tych tisickach schopnych a mudrych ludi aj tak clovek zisti, ze na vsetko zostane sam.

Používateľov profilový obrázok
jaromir
Power user
Power user
Príspevky: 4538
Dátum registrácie: 08 Júl 2011, 00:00
Vek: 40

Príspevok od používateľa jaromir » 14 Aug 2011, 15:01

Precital som si to viackrat, ale vobec nechapem co tym chces povedat alebo na co sa pytas... ehm :)
0

martind1983
Okoloidúci
Okoloidúci
Príspevky: 17
Dátum registrácie: 30 Jún 2011, 00:00
Kontaktovať používateľa:

Príspevok od používateľa martind1983 » 14 Aug 2011, 19:13

Jaromir vyuzival si uz niekedy tento modul? Preco ked vypnes prescaler,teda bity, ktore nastavuju tento modul to su prve 4 bity CCP1CON registra". stale sa nastavuje flag bit tohoto modulu pri zmene hrany, ako keby to pracovalo v normalnom mode, t.z. nastavis bity do nuly, tym modul zresetujes. Preco ti to dalej aj tak nastavuje flag bit, ktory je priradeny k tomuto modulu? To nechapem. Naco ho potom treba vypinat? V com mi to pomoze? Pouzivam funkcie CCS compilera a mozno neviem vyuzivat spravne funkcie. V datasheete som cital, ze pri zmene rezimu sa nastavi t.z. "false flag bit", ktory je nutne vymazat. Jaromir dakujem za help. Dufam, ze tento krat som to popisal zrozumitelnejsie.
0
Pri tych tisickach schopnych a mudrych ludi aj tak clovek zisti, ze na vsetko zostane sam.

Používateľov profilový obrázok
jaromir
Power user
Power user
Príspevky: 4538
Dátum registrácie: 08 Júl 2011, 00:00
Vek: 40

Príspevok od používateľa jaromir » 15 Aug 2011, 08:00

Pytas sa, preco by si mal vypinat modul... no to ja neviem, ten modul netreba vypinat. Nepomoze ti to v nicom.

Ale podme sa pozriet na datasheet, konkretne tento tu http://ww1.microchip.com/downloads/en/D ... 30487c.pdf
Chod na strnau 23, kde je popis PIR1 registra, je tam aj bit CCP1IF, pise sa tam

Kód: Vybrať všetko

1 = A TMR1 register capture occurred [b](must be cleared in software)[/b]
Teda ak je raz bit nastaveny, vynulovat sa da iba sofwarovo, teda zapisom nuly do tohto bitu.
Dalej, strana 84, kapitola 9.1 pise v zasade to iste

Kód: Vybrať všetko

When a capture is made, the interrupt request flag bit, CCP1IF (PIR1<2>), is set. It must be cleared in software.
Teda nepise sa nic o tom, ze zmena modu, resp, preddelicky by mala vynulovat CCP1IF.
Ale zato kapitola 9.1.4 pise toto:

Kód: Vybrať všetko

When the Capture mode is changed, a false capture
interrupt may be generated. The user should keep bit
CCP1IE (PIE1<2>) clear to avoid false interrupts and
should clear the flag bit, CCP1IF, following any such
change in operating mode.
Takze po zmene preddelicky nielen ze nemozes ocakavat, ze CCP1IF sa vynuluje, ty mas dokonca ocakavat, ze sa nastavi! Takze po zmene modu by si mal ten bit vynulovat.
Nieco podobne hovori aj nasledujuca kapitola na tej istej strane:

Kód: Vybrať všetko

There are four prescaler settings, specified by bits
CCP1M3:CCP1M0. Whenever the CCP module is
turned off, or the CCP module is not in Capture mode,
the prescaler counter is cleared. This means that any
Reset will clear the prescaler counter.
Switching from one capture prescaler to another may
generate an interrupt.
Takze v datasheete je aspon dvakrat napisane, ze CCP1IF sa nuluje softwarovo a dvakrat napisane, ze zmena prescalera nielen ze nevynuluje tento bit, ale ho moze nastavit - teda to, co ty pozorujes.

To, ze nejake funkcie z CCS to nerobia korektne - tak to je uz ina vec. Okrem toho, ze CCS kompilator je znamy svojou sadou zartovnych funkcii na "ovladanie" HW rozneho druhu, vzdy a vsade vsetkym pisem a otrieskavam o hlavu: Ludia moji drahi, nepouzivajte HW funkcie pribalene ku kompilatoru, zvlast ak presne neviete co to robi. A ak aj viete co to robi, tak neviete ako sa to zmeni pri najblizsom update kompilatora.
Napis si vlastnu funkciu, ktora robi to co ma, maj pri tom otvoreny datasheet. Praca s CCP modulom sa da zabalit do zoapr funkcii, ktore nebudu mat dokopy viac ako 15 riadkov a daju sa napisat v priebehu polhodiny. Odmenou ti bude nieco, co funguje presne a vies to presne ovladat.
0

alibaba

Príspevok od používateľa alibaba » 15 Aug 2011, 08:55

A k čemu je takový kompilátor dobrý, když nevíte co přesně robí? Tyhle kompilátory, to je dílo ošukaných programátorů. Ty jejich vývojový prostředí s kompilátorama mají spoustu chyb a když chcete s tím něco naprogragramovat, tak 80% času u toho stráveného jde na boj s vývojovým prostředím a jen 20% času je na vývoj vašeho vlastního projektu.

Používateľov profilový obrázok
jaromir
Power user
Power user
Príspevky: 4538
Dátum registrácie: 08 Júl 2011, 00:00
Vek: 40

Príspevok od používateľa jaromir » 15 Aug 2011, 09:18

alibaba napísal:A k čemu je takový kompilátor dobrý, když nevíte co přesně robí? Tyhle kompilátory, to je dílo ošukaných programátorů. Ty jejich vývojový prostředí s kompilátorama mají spoustu chyb a když chcete s tím něco naprogragramovat, tak 80% času u toho stráveného jde na boj s vývojovým prostředím a jen 20% času je na vývoj vašeho vlastního projektu.
Kto povedal, ze neviem, co to robi? :)

Treba rozlisovat medzi kompilatorom a kniznicami pribalenymi k nemu.
Ked vie clovek pouzivat kompilator, tak dokaze usetrit nesmierne mnozstvo casu. Kompilatory nie su dielom osukanych programatorov.

Ja osobne robim profi projekty prakticky vyhradne v C, denno-denne a este sa mi nestalo, ze by som bojoval s kompilatorom kvoli jeho internym chybam. Ak som aj mal nejake problemy, tak ich rozhodne nebolo 80% celkoveho casu - a boli sposobene chybou medzi stolickou a klavesnicou.

Pokial niekomu vychadzaju casy v pomere 80/20, ako si popisal, tak by sa mal na programovanie vykaslat a ist predavat zemiaky.
0

martind1983
Okoloidúci
Okoloidúci
Príspevky: 17
Dátum registrácie: 30 Jún 2011, 00:00
Kontaktovať používateľa:

Príspevok od používateľa martind1983 » 15 Aug 2011, 10:29

Jaromir ja to chapem co pisu v datasheete. Ba dokonca chapem, ze pri zmene modu v prescaleri sa ti nastavi flag bit priradeny k modulu CCP1. Co znamena nastavenie chybneho flagu. A viem, ze flagi treba mazat softwarovo. Lenze ked som cez funkciu "setup_ccp1(CCP_OFF) vypol teda zresetoval prescaler cakal som, ze to vypne aj ten modul a prisluchajucu indikaciu danym flag bitom. A paradoxne pri vypnuti teda zresetovani prescalera mi to nenastavilo chybny flag bit ako pisu v datasheete. Ale az potom pri dalsom behu programu, ked sa vyskytla na pine RB3 udalost, ktora nastavuje dany flag bit. Co uz pre mna nebolo ziaduce. Dany CCP1 modul som mal nastaveny na RB3 pin cez konfiguracne bity. A dany flag bit mi tento neziaduci priebeh nastavil az pri spadovej hrane.
Ktoru som mal funkciou "setup_ccp1(CCP_CAPTURE_FE) pred z resetovanim teda vypnutim prescaleru a v case, ked som chcel merat nastavenu. Ja som chcel len vediet naco potom sluzi resetovanie "vypnutie" prescalera, ked to nevypne dany modul a jeho prislusny flag bit. A ci to moze byt chyba zle napisane kodu alebo je to proste vec, ktoru vyvojari procesorov nevedia poriesit. A flag bity sa nedaju vypinat. Lebo je to hardwarovo tak navrhnute. Skor by som to tak chapal. Realne to nemam odskusane ako by to fungovalo v danej aplikacii. Ale bolo to simulovane v MPLAB simulatori. Dik.

[size=9][color=#999999]//Automatické spojenie príspevkov. Pridané po 6 minútach:[/color][/size]

Za kniznice pribalene ku kompilatoru sa povazuju aj "buit in functions" Lebo ja vyuzivam len tie.
0
Pri tych tisickach schopnych a mudrych ludi aj tak clovek zisti, ze na vsetko zostane sam.

alibaba

Príspevok od používateľa alibaba » 15 Aug 2011, 11:37

tak komppilator jistě obvykle kompiluje, horší to bývá s tím vývojovým prostředím, nebo, chceš-li tomu říkat "přibalenými knižnicemi". Ony bývají nedílnou součástí. Třeba ten PicBasic. Kompilátor funguje, ano, základní příkazy také fungují. Až když chceš použít I2CWRITE na něco jiného než EEPROMku, tak se objeví problém. V manuálu nic, v helpu nic, nikdo nic neví. po úporným hledání v internetu zjistíš, že nejsi sám, kdo narazil. Výrobce kompilátoru taktně stále mlčí. Po nasazení I2C analyzátoru se zjistí, že pošukaný programátor, autor PICBasic kompilátoru tam má malou chybičku. Tak napíšeš autorovi a za týden přijde odpověď: "ano víme o tom". Tak to je jen jeden příklad z mnoha. Mám i jiné vzpomínky, na jiné "maprosto dokonalé" vývojové programovací nástroje, ke kterým chodí každý měsíc update na odstranění drobných chybiček... Jen nechápu, proč ty ošukaný programátoři vypoštějí tolik zmetků. Představ si, že by výrobce hardware pracovali stejným způsobem a třeba tvůj notebook by vyžadoval každý měsíc zásah výrobce, pro odstranění hardwarové chybičky, na kterou se při návrhu zapomenulo. :D

//Automatické spojenie príspevkov. Pridané po 6 minútach:

Mimochodem, jiný příklad o ujetých programátorech: před pár hodinami, během noci, jsem vystvětloval jednomu americkýmu programátorovi, že prostě do 16-bitovýho registru nelze narvat číslo 10000000. On to nechápal (a asi nechápe stále) a uvažuje takto: do 16-bitovýho registru v MCU pustí signál z oscilátoru 10 MHz. Vstup hradluje signálem 1pps z GPSky. A ohromě se diví, že binární hodnota v tom 16bitovém registru po ukončení hradlování neodpovídá číslu 10000000 převedenému na binární kód. Jeho to vůbec nevzrušuje a počítá s tím zbytkem po několikanásobném přetečení, co tam má a tváří se že to je vlastně v pořádku. Na můj dotaz, kolikrát mu ten registr přetekl, odpověděl, že tím se nezabývá :D

martind1983
Okoloidúci
Okoloidúci
Príspevky: 17
Dátum registrácie: 30 Jún 2011, 00:00
Kontaktovať používateľa:

Príspevok od používateľa martind1983 » 15 Aug 2011, 11:42

Verim tomu, ze tyto ludia z CCSka to beru na tazsiu vahu lebo je to dost cenovo drahy kompilator. A nemozu si dovolit robit kiksy len tak. Ale vsetko moze byt, to je pravda. A este dalej potom netusim aky druh funkcii by som mal pouzivat aby som si bol isty. Kedze pomaly vsetky su v budovane do kompilatora. Aj bezne funkcie, na nastavovanie port, trisov. A nakoniec zistim, ze z celeho Ccka, kvoli zle navrhnutym funkciam kompilatora, mozem vyuzivat len ANSCI teda deklaracie, direktivy preprocesora a prikazy vseobecne pre C jazyk. Kdez to vyssie jazyky su robene na vyuzivanie funkcii. Samotna firma CCS dava urcity typ upozornenia na neodskusane funkcie pre novsie rady MCU. Ale myslim si, ze chyba nie je vo funkciach, skor to je hardwarom lebo flag bity sa proste vypnut nedaju ani tym, ze vypnem dany modul k nim prisluchajuci. A zresetovanie prescaleru CCP1 ho nevypne preto to treba stale sledovat. A mazat flag kvoli vyhnutiu sa zlemu chodu programu.
0
Pri tych tisickach schopnych a mudrych ludi aj tak clovek zisti, ze na vsetko zostane sam.

Používateľov profilový obrázok
jaromir
Power user
Power user
Príspevky: 4538
Dátum registrácie: 08 Júl 2011, 00:00
Vek: 40

Príspevok od používateľa jaromir » 15 Aug 2011, 11:43

martind1983 napísal:Ja som chcel len vediet naco potom sluzi resetovanie "vypnutie" prescalera, ked to nevypne dany modul a jeho prislusny flag bit.
Resetovanie prescalera restuje prescaler, na to je dobre.
Nulovanie bitu nuluje bit, na to je dobre.
A to je vsetko, je to tak jednoduche ako len moze byt :)
martind1983 napísal: A ci to moze byt chyba zle napisane kodu alebo je to proste vec, ktoru vyvojari procesorov nevedia poriesit. A flag bity sa nedaju vypinat.
Myslim ze sa az velmi analyticky venujes veciam, ktore su takpovediac zbytocne :)
Je mnoho zalezitosti, ci uz u PICiek alebo aj inde, ktore by teoreticky mohli byt spojene, ale nie su. Proste je to tak, ako to je a smitec.
Mozno je to tym, ze mam na tieto vyssi nahlad, ale mne to nepride vobec ako divne alebo neocakavane.
Skor by som povedal, ze je to taky filozoficky pohlad na to ako robit jednocip - spolocnym rysom RISC procesorov je to, ze robis vela jednoduchych operacii namiesto jednej zlozitej, to plati aj pre instrukcny subor. Tu potrebujes urobit akciu, ktora pozostava z dvoch alebo viacerych jednoduchych krokov, ktore maju ale inak velmi jednoduche pravidla, nie su medzi nimi nijake neockavane spojitosti, vsetko sa da lahko pochopit a odladit.

Takze tolko moj prispevok. Neviem ci som ti odpovedal aspon nejako :)
0

alibaba

Príspevok od používateľa alibaba » 15 Aug 2011, 11:44

[quote="martind1983" Realne to nemam odskusane ako by to fungovalo v danej aplikacii. Ale bolo to simulovane v MPLAB simulatori. Dik.

Za kniznice pribalene ku kompilatoru sa povazuju aj "buit in functions" Lebo ja vyuzivam len tie.[/quote]

Nojo ty simulátory, to je také neštěstí. Simulace je jedna věc a následná realita je věc druhá. Žádný simulátor není 100% dokonalý...

martind1983
Okoloidúci
Okoloidúci
Príspevky: 17
Dátum registrácie: 30 Jún 2011, 00:00
Kontaktovať používateľa:

Príspevok od používateľa martind1983 » 15 Aug 2011, 11:59

Pocuj, ale ten PICbasic to je nejaky oficialny licencovany kompilator? Nie je to nejaky freeware? Lebo to sa mi nechce verit? Ze by robili taketo chyby a neriesili ich firmy, ktore to predavaju za slusne love.

[size=9][color=#999999]//Automatické spojenie príspevkov. Pridané po 9 minútach[/color][/size]

Samozrejme, ze simulatori to rataju algoritmamy. Ja osobne vyuzivam MPLAB IDE simulator. A doteraz som nemal problemy s jeho funkcnostou. Sice je pravda, ze na nom uz tazko budem simulovat komunikaciu roznych komunikacnych protokolov lebo by som tam potreboval simulovat aj devici k tomu pripojene. Ale na to su uz ine simulatory. Ale myslim si, ze ked to nie je simulator analogovych obvodov bude na velke percento velice presny by som tomu kludne dal aj 99%. Lebo tam sa nema co nejak mylit. Jedine omyly mozu byt zo strany vyvojarov. A to verim, ze taketo chyby sa snazia vyvojari v takychto korporaciach napravit. Takze by som nebral, ze je chyba dufat, ze takyto simulator je nedoveryhodny. wink

[size=9][color=#999999]//Automatické spojenie príspevkov. Pridané po 4 minútach:[/color][/size]

Diky Jaromir. Myslim, ze to tak asi treba brat ako hovoris. Doverovat tomu datasheetu a nezaujimat sa preco to tak asi nefunguje. :lol:
0
Pri tych tisickach schopnych a mudrych ludi aj tak clovek zisti, ze na vsetko zostane sam.

Používateľov profilový obrázok
jaromir
Power user
Power user
Príspevky: 4538
Dátum registrácie: 08 Júl 2011, 00:00
Vek: 40

Príspevok od používateľa jaromir » 15 Aug 2011, 12:11

alibaba napísal:tak komppilator jistě obvykle kompiluje, horší to bývá s tím vývojovým prostředím, nebo, chceš-li tomu říkat "přibalenými knižnicemi". Ony bývají nedílnou součástí. Třeba ten PicBasic.
No hej, ale PicBasic je hracka, ktoru som nikdy nepovazoval za nastroj. Je trochu nefer voci serizonym kompilatorom (ktore byvaju za casto lepsiu cenu alebo zadarmo) brat priklad PicBasic-u. To je nieco ako keby som ja argumentoval, ze je lepsie si kupit auto, ked chces vozit vacsie naklady a ze je to vyhodnejsie ako nosit to na chrbte (co je v tomto pripade vhodne porovnanie) a ty povies, ze ked si si kupil Moskvica, tak mu nefungovlao dobre zapalovanie a vobec, tie ojazdene Skody 120 nie su bohvieco.
alibaba napísal: Kompilátor funguje, ano, základní příkazy také fungují. Až když chceš použít I2CWRITE na něco jiného než EEPROMku, tak se objeví problém.
Hej, objavi sa problem, ze nevies co robis.
Vyrobca kompialtora sa nikdy nemzoe pripravit na vsetky mozne veci, ktore potrebujes urobit a nemoze urobit kniznice na vsetko, ale byva tam toho pomerne dost. Mladez je potom zblbnuta tym, ze na vsetko su predsa kniznice a ked pride na to urobit nieco bez kniznic, su v prdeli. Ale to nie je problem kniznic, ale programatorov, ktori sa nechcu ucit.
alibaba napísal: V manuálu nic, v helpu nic, nikdo nic neví. po úporným hledání v internetu zjistíš, že nejsi sám, kdo narazil. Výrobce kompilátoru taktně stále mlčí. Po nasazení I2C analyzátoru se zjistí, že pošukaný programátor, autor PICBasic kompilátoru tam má malou chybičku. Tak napíšeš autorovi a za týden přijde odpověď: "ano víme o tom".
Tak to je este pomerne dobre, napriklad taky Microsoft ti nenapise ai to :)
Holt smola. Vybral si si zly kompilator, ak sa to tak da nazvat, zvolil si si, ze budes pouzivat jeho kniznice, je to koledovanie si o pruser. Nikdy sa nic neda urobit dokonale a bez chyb, to kazdy chape. Ale seriozny inzinier si predsa bude volit cesty, pri ktorych vznika najmensia pravdepodobnost omylu, ci uz na jeho alebo druhej strane a nedrzat sa alibisticky toho, ze praca ineho cloveka musi byt bezchybna, ked za nu vyvalim tazkych 99USD.
Moznost chyb sa da minimalizovat a snad aj to je dovod, ze s kompilatormi mam uplne ine skusenosti ako ty.
alibaba napísal: Představ si, že by výrobce hardware pracovali stejným způsobem a třeba tvůj notebook by vyžadoval každý měsíc zásah výrobce, pro odstranění hardwarové chybičky, na kterou se při návrhu zapomenulo. :D
Porovnavas neporovnatelne.
alibaba napísal: Mimochodem, jiný příklad o ujetých programátorech: před pár hodinami, během noci, jsem vystvětloval jednomu americkýmu programátorovi, že prostě do 16-bitovýho registru nelze narvat číslo 10000000.
Ano, aj toto je ten typ cloveka, ktory by mal ist predavat zemiaky. Ale aj tento desivy priklad nic nemeni na tom, ze kompilatory su skvela vec, ktora v rukach zodpovedneho cloveka dokaze robit divy. Ale podobne je to aj s tym autom, ku ktoremu som to prirovnal predtym.
Ked ja poviem, ze auto je dobra vec na prevazanie tazkych nakladov, ty prides do debaty s tym, ze na auto treba vodicak a benzin (co je jeho nevyhoda), tvoj Moskvic 408 (za ktoreho si dal kedysi 10 vyplat) zle startuje a okrem toho nejaky blb ti minuly mesiac presiel kocura, nic to nemeni na fakte, ze auto je dobry pomocnik :)

Toz takto. Nechcem nejakym sposobom bagatelizovat tvoje zle skusenosti s nejakymi "kompilatormi", budiz - ale je nespravne generalizovat to na vsetko, zvlast ak mas skusenosti iba zle a nezahrnaju konkretny typ, o ktorom sa bavime (a ze momentalne nie je chyba v kompilatore, ze ano). A vyhlasit, ze s kompilatormi stravis 80% chybami a 20% pracou je, pri vsetkej ucte, prachobycajny nezmysel. Nerad by som, aby sa tu mladez, ktora si to tu cita, chytala takychto vyhlaseni.
0

Napísať odpoveď