Midrange PIC a interrupt on change

Uživatelský avatar
fulda
Příspěvky: 1359
Registrován: 04 led 2016, 17:18

Midrange PIC a interrupt on change

Příspěvek od fulda »

Ahoj,

Postnu svůj dotaz sem, ačkoli není PICaxe, ale o procesoru PIC jako takovém (možná na to někdo narazí i v PICaxe).

je tu někdo, kdo se objektivně vyzná v osmibitových PICech?
Potřeboval bych trochu poradit s interrupt on change na PIC12F629.

mám procesor, který čte sériový signál s použitím interrupt on change na pinu GP3 (MCLR). Tento pin je jediný jako vstupní. Na čtyřech výstupních pinech jsou serva. Původně jsem signál pro servo generoval jako bsf GPIO,x a clrf GPIO. Nicméně bsf vlastně znamená čtení. Protože potřebuji zlepšit kvalitu dekódování signálu, tak jsem nahradil generování serva za movwf GPIO a clrf GPIO (ve W mám správnou hodnotu, kterou jsem poskládal bez čtení GPIO).

A hlavní otázka - pomohu si tím nějak? Nebo jsem něco přehlédl a i tyto zápisy mohou vést ke ztrátě informace o změně?

díky
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
Milops3
Příspěvky: 51
Registrován: 09 kvě 2013, 20:51

Re: Midrange PIC a interrupt on change

Příspěvek od Milops3 »

cau,rad se ti pokusim pomoc ale nejak sem nepochopil to si napsal ... ?
Tento pin je jediný jako vstupní
za predpokladu ze je vyply MCLR, jinak i ostatni piny muzou bejt vstupni
bsf GPIO,x a clrf GPIO
clrf ti vynuluje celej vystupni port , najednou , za predpokladu ze si ve spravne bance
Nicméně bsf vlastně znamená čtení.
nechapu , bsf je instrukce pro nastaveni bitu v registru, (bsf registr,bit), jak se s tim da cist ?

skus to vysvetlit lepe,mozna jsem to spatne pochopil , +schema , +program
DavidO
Příspěvky: 1133
Registrován: 01 kvě 2013, 21:27

Re: Midrange PIC a interrupt on change

Příspěvek od DavidO »

Milops3 píše:
Nicméně bsf vlastně znamená čtení.
nechapu , bsf je instrukce pro nastaveni bitu v registru, (bsf registr,bit), jak se s tim da cist ?
Ne-e. Obavy jsou oprávněné, v datasheetu se píše:
10.1 Read-Modify-Write Operations
Any instruction that specifies a file register as part of the instruction performs a Read-Modify-Write (R-M-W) operation. The register is read, the data is modified, and the result is stored according to either the instruction, or the destination designator ‘d’. A read operation is performed on a register even if the instruction writes to that register.
For example, a CLRF GPIO instruction will read GPIO, clear all the data bits, then write the result back to GPIO. This example would have the unintended result that the condition that sets the GPIF flag would be cleared.
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
DavidO
Příspěvky: 1133
Registrován: 01 kvě 2013, 21:27

Re: Midrange PIC a interrupt on change

Příspěvek od DavidO »

Jo a k původnímu dotazu - já to vidím takhle (a mohu se mýlit):
Pokud ke změně pinu dojde mezi tím, kdy sis zjistil stav toho vstupního pinu a kdy se vykoná clrf GPIO a ten interrupt se nevyřídil, tak o něj přijdeš, protože se tím port change interrupt flag smaže (a možná, že totéž dělá i movwf GPIO, tak nějak mi to z té kap. 10.1. plyne, je to any instruction, která používá file register). To je spíš hypotetická situace, pokud nejsou interrupty zakázané, tak by to mělo být v pořádku až do té instrukce. Ta by to ale mohla ovlivnit, jak se píše v 3.2.2 - že ten interrupt se může vymazat, když se čte z GPIO. Navíc je tam poznámka:
Note: If a change on the I/O pin should occur when the read operation is being executed
(start of the Q2 cycle), then the GPIF interrupt flag may not get set.
tj. když by k té změně došlo jako na potvoru právě při vykonávání té instrukce, tak se nemusí poznat.
Ještě bych se ale zeptal na význam "potřebuji zlepšit kvalitu dekódování signálu". Je to tak, že se ti ztrácí ta událost? Nebo v čem je problém?
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Uživatelský avatar
fulda
Příspěvky: 1359
Registrován: 04 led 2016, 17:18

Re: Midrange PIC a interrupt on change

Příspěvek od fulda »

DavidO píše:Ne-e. Obavy jsou oprávněné, v datasheetu se píše:
10.1 Read-Modify-Write Operations
...
Hmm, R-M-W je asi nepřekonatelný problém. Jsem si to mohl odvodit sám, když je tam zrovna tel clrf uvedenej jako příklad.
DavidO píše:Ještě bych se ale zeptal na význam "potřebuji zlepšit kvalitu dekódování signálu". Je to tak, že se ti ztrácí ta událost? Nebo v čem je problém?
Zlepšení kvality čtení znamená tolik, že protokol (na pinu GP2) má nějaké zabezpečení a nějaké opakování, já čtu v pohodě, pokud mám opakování třeba 3x, ale potřebuji se dostat do stavu, kdy bude opakování 1x a já stále budu číst v pohodě.
Milops3 píše:
Nicméně bsf vlastně znamená čtení.
nechapu , bsf je instrukce pro nastaveni bitu v registru, (bsf registr,bit), jak se s tim da cist ?
No tady se musíš podívat trochu do hloubky té instrukce. Ona totiž přečte registr, udělá na něm "logické or bit" a zase ho zapíše (Jak píše DavidO R-M-W. To popoznáš, pokud si budeš hrát například s portem, který má piny OD (s otevřeným kolektorem). Ty si nastavíš na výstup toho OD pinu 1, ale někdo jiný jej uzemní a nastaví na něm 0. Pokud v té době uděláš třeba bsf port,jiný bit, tak ačkoli jsi se toho OD bitu ani nedotkl, tak se přečetl, byla tam 0, takže po provedení instrukce se zapíše 0 a je problém.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
Milops3
Příspěvky: 51
Registrován: 09 kvě 2013, 20:51

Re: Midrange PIC a interrupt on change

Příspěvek od Milops3 »

Ok,uz sme doma,mas napsat rovnou RWM, pro me je to trochu nesikovne napsany ... no tet uz je to jedno

Ten signal na gp2 je jaky ? specifikace ?
DavidO
Příspěvky: 1133
Registrován: 01 kvě 2013, 21:27

Re: Midrange PIC a interrupt on change

Příspěvek od DavidO »

fulda píše:Zlepšení kvality čtení znamená tolik, že protokol (na pinu GP2) má nějaké zabezpečení a nějaké opakování, já čtu v pohodě, pokud mám opakování třeba 3x, ale potřebuji se dostat do stavu, kdy bude opakování 1x a já stále budu číst v pohodě.
Je to opravdu problém ztraceného - přeskočeného bitu při přenosu? Nemůže to být špatnou úrovní signálu (třeba rušením)?
Co rychlost? Jestli to je někde našponované, delší sekvence stejného bitu to můžou rozbít. Taky jestli druhá strana odvozuje baudrate děličkou z frekvence procesoru a na tvojí straně to počítáš jako čas odvozený od svého oscilátoru, může to být už mimo. (ještě takovej jeden blbej nápad - když to máš spolehlivě na 3x ale na 1x ne, tak zpomalit na polovic by bylo sice 2x pomalejší, ale kdyby to bylo OK už napoprvé, tak by to bylo zpomalení jen 2x a ne 3x jako teď)
A jaké je použité kódování na nejnižší vrstvě? (třeba, kdyby místo čistého seriáku byl Manchester, tak při "přeskočení" jedné změny hned z následující poznáš, že jsi tamtu přeskočil i jaká změna to byla. Akorát teda ty změny můžou být 2x častější, to nevím, jestli by sis pomohl, když ti nějaké změny unikají už takhle)

I když vlastně, možná to jsou rady k ničemu, jestli to jsou vláčky, tak s vysíláním asi nic změnit nejde a je potřeba všechno ošetřit až na mašince. Nedal by se tam aspoň těsně před ten PIC předřadit nějaký tvarovač signálu?
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Uživatelský avatar
fulda
Příspěvky: 1359
Registrován: 04 led 2016, 17:18

Re: Midrange PIC a interrupt on change

Příspěvek od fulda »

Milops3 píše:Ten signal na gp2 je jaky ? specifikace ?
Je to normální DCC signál.
Jestli chceš zjednodušenou specifikaci, tak jednička je 50μs high následovaná 50μs low, nula je 100μs high následovaný 100μs low.
Detailní popis kódování bitů a stavba paketů.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
Uživatelský avatar
fulda
Příspěvky: 1359
Registrován: 04 led 2016, 17:18

Re: Midrange PIC a interrupt on change

Příspěvek od fulda »

DavidO píše:Je to opravdu problém ztraceného - přeskočeného bitu při přenosu? Nemůže to být špatnou úrovní signálu (třeba rušením)?
Řeším jen jeden okrajový případ. Potřebuju v případě, že signál není zarušen a je více méně v ideálním stavu, tak přečíst každej paket. V případě provozního rušení pak stačí opakování podle charakteru rušení.

Problém je, že pokud čtu signál pomocí INT (GP2), tak je čtení v pohodě, ale zrovna tady mi schází jedna noha a tak bych rád četl pomocí GP3(MCLR) a změnu detekoval s použitím toho IoC. A to mi nefunguje tak, jak bych si představoval.

Jinak řeším problém, kdy já jsem klientem existující sběrnice a snažím se projít certifikací. Při normálním provozu je to OK, ale při okrajových podmínkách certifikace váznu.
DavidO píše:I když vlastně, možná to jsou rady k ničemu, jestli to jsou vláčky, tak s vysíláním asi nic změnit nejde a je potřeba všechno ošetřit až na mašince. Nedal by se tam aspoň těsně před ten PIC předřadit nějaký tvarovač signálu?
Přesně tak, jsou to vláčky. A je to snaha o zmenšení dekodéru. Pokud bych chtěl přidat hardware, tak přidám nějaké PWM na generování signálu pro servo.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
DavidO
Příspěvky: 1133
Registrován: 01 kvě 2013, 21:27

Re: Midrange PIC a interrupt on change

Příspěvek od DavidO »

Aha, jasně, trochu jsem na chvíli zapomněl, co vlastně děláš ;)
fulda píše:Problém je, že pokud čtu signál pomocí INT (GP2), tak je čtení v pohodě, ale zrovna tady mi schází jedna noha a tak bych rád četl pomocí GP3(MCLR) a změnu detekoval s použitím toho IoC. A to mi nefunguje tak, jak bych si představoval.
Tj. získat jeden výstupní pin navíc a vstup přesunout na jiný, který není výstupní, jo?
Je mi trochu divné, že to funguje jinak, než na tom GP2, blokové schéma té vstupní části GP2 je stejné jako u GP3 (včetně IoC). Nemohlo se stát, že by přidáním další funkčnosti už prostě nezbýval strojový čas?
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Odpovědět