Stačí 18F452 obsluhovať prerušenia pri dekódovaní RDS RT?

POtrebujem dekodovat RT text z RDS. jeden bit trva 832us co je dost kratko… jedna instrukcia procesora trva 100ns. O co ide chcem to dat na prerusenie. to znamena ze ked vzniikne prerusennie na obsluhu mi tteba najmenej 100us (viac menej neviem zatial presne) tj zostava mi par 700us. A vsak obsluha displeja zozerie nejake 2ms a viac. otazka znie ak chcem aby RDS malo prijoritu nebude mi nekde visied displej …ze ho sekne a uz prestane zobrazovat ked by doslo k nejakemu prerusenie v nevhodnom case (tj ked dochadzalo k komunikacii s LCD) dalej ma byt prerusenie od RTC, IR, a klavesnice… to uz ale by bolo nadprerusenim od RDS.

Co vy nato ako to riesit ? nemusim sxa bat?

:arrow_right: administrator: přesunuto z "Elektronika s mikrokontroléry, procesory"

:arrow_right: administrator: přejmenováno z "Budu problemi s prerusenim na PIC 18f452"

Nie je zle skontrolovat si po sebe text, skor nez ho odosles. Casto to podstatne zlepsuje citatelnost textu.

Pokial by ti prerusenie trvalo 100us pri takte 10MIPS, tak by to znamenalo, ze v preruseni stravis cca 1000 cyklov - a vtedy robis nieco zle. Prerusenia maju trvat kratko, nemaju sa v nom volat funkcie, resp. len s dobrym uvazenim, ak vies co robis. Typicke prerusenie je take, kde trebars prijmes nejaky bajt od nejakeho rozhrania, ulozis ho do bufferu a ides prec. Par instrukcii.
Co sa tyka casu na obsluhu displeja - nenapisal si aky je to displej. Displejov je mnoho roznych druhov. Ak je to napriklad nieco s HD44780, tak pri preruseni nemas problem - proste sa na nejaku dobu (jednotky, desiatky us) zmrazi komunikacia s displejom a potom sa pokracuje. Ak su prerusenia urobene normalne, tak clovek nezaregistruje nijaky problem.

Nepises ani aku klavesnicu mas, na co potrebujes prerusenia od RTC a v akom intervale.

displej je KS108 rtc bude vyrabat prerusenie kazdu 1sec (aspon teraz este uvidim) klavesnica …su to vlastne len 5 tlacidla zktorych kazde vyrobi prerusenie.

Proste musim v tom preruseni od RDS spracovat bit, a vypocitat ci sedi z kontrolnym slovom a to nieco trva (este na tom popracujem lebo aj mne sa vidi dlho)

Ja by som to robil inak.
Prerusenie by som povolil iba na to RDS-ko, lebo chodi pomerne casto. Displej a klavesnicu by som riesil v hlavnej slucke - nastavil by som si timer a pri jeho preteceni (checkovat TMRxIF flag) by som urobil co treba s displejom a klavesnicou. V ziadnom pripade nezapinaj prerusenie pre jednotlive tlacidla, pretoze:
1, tlacidla generuju nesktocny bordel pri spinani, prekmity. Tieto prekmity ti spustia prerusenie mnohokrat po sebe a moze sa stat, ze tymito opakujicimi sa preruseniami si zahltis MCU a nezostane cas na RDS.
2, vobec nepotrebujes checkovat tlacidla tak rychlo. Ja vo svojich aplikaciach snimam stav tlacidiel kazdych cca 20-30ms. To je cca raz za stvrt miliona instrukcii pre PIC18. Nepresnosti v casovani absolutne nevadia. Aj keby sa cas kontroly menil o povedzme 50%, tak sa to nijak zasadne neprejavi. Toto bez problemov zvladnes v hlavnej slucke a nepotrebujes na to prerusenie.
Takisto prerusenie na RTC je strasny luxus. Proste ho citaj v hlavnej slucke ked zostane cas. Ak to mas rozumne napisane, tak to bude aj viackrat za sekundu, toto mozes dokonca este obmedzit na zriedkavejsie citanie.

Takze moja rada - nepouzivaj prerusenia na uplne vsetko. Na 8-bitovych systemoch je to strasny luxus a prinasa to problemy.
Bez nich (resp. ak ich pouzijes tam kde ich skutocne treba) to bude jednoduchsie, lahsie na pisanie a ozivovanie.

tlacidla musia mat prerusenie lebo vykreslenie displeja trva 80ms…alebo 24ms.

Zatial dakujem budem to musiet vyskusat a zredukovat casy… hlavne sa rozhodnem podla toho ako uspesne bude RDS tj aby ancitavalo co najmenej chyb res bolo stale v synchronizacii (okrem pripadov IR prijmu a vykonavania inych veci v programe …este uvidim ako to pojde)

Pokial obsluha displeja trva 80ms, co moze byt, tak to urob tak, ze si nastavis nejake prerusenie na povezme 25ms, das mu nizsiu prioritu nez tomu, co riesi RDS a v tomto preruseni si budes kontorlovat stav tlacidiel - len ich nedavaj priamo na prerusenie. Tlacidlo pri stlaceni moze vygenerovat desiatky prekmitov a tie ti spolahlivo mozu zahltit MCU zatialco sa bude snazit spracovat prerusenie od RDS.
Ak uz zavesit tlacidlo na externe prerusenie, tak jedine po patricnom odstraneni zakmitov, napriklad pomocou MKO alebo odpor+kondik plus nejake hradlo so schmittovym vstupom. Ale to je uz jednoduchsie urobit to softwarovo, ako som pisal.

Tak teda sa do toho vrhni a daj vediet ako si dopadol.

ja to v podstate mam hotove…len ze to rds zabera vela casu a bezi v hlavnej slucke… hlavna pririta prerusenia je na IR cidle a Low int je na tlacidlach… RTC sa nacitava v hlavnej slucke to som obmedzil musi par krat prebehnut cele slucka az tak nacita cas s RTC

a nacitavanie RDS trva troska dlhsie nevadilo by mi to keby na slovensku dodrziavali normy…lenze tu dodrzuje len Fun radio momentalne…

cize chcem obmedzit to aby sa stale vyhladaval zaciatok rds prenosu lebo to zbytocne stale zdrzuje…

nic hodim si to na male PICko a budem to riesit tam aku min cas bude potrebovat na najdenie zaciatku RDS prenosu… a ci ostane synchrone a ak odlho …potom sa uvidi ci dojde k zmenam aj na 18f452ke

No prave ma nieco napadlo… co by mohlo usetrit cas,a ziskala by sa rychlost… uvidime…