měřič pulsů s 12F675

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Fafejt

měřič pulsů s 12F675

#1 Příspěvek od Fafejt »

Ahoj lidi,potřeboval bych poradit.Pustil jsem se do stavby hlídače poklesu otáček hřídele.Na ní je výstupek,kterej indukční snímač vyhodnotí jako impuls.Hřídel má konstantní rychlost otáčení tj. 300ot/min.Potřeboval bych to tak,když rychlost poklesne o 50%,tak aby sepnulo(rozepnulo) relé.Představu mám takovou,že by ten impuls vyvolal náběžnou hranou přerušení.... a dál bych potřeboval poradit jak to principiálně řešit.Oscilator bych nechal interní tj.4MHz.
Uživatelský avatar
Pawalo
Příspěvky: 87
Registrován: 06 říj 2005, 00:00
Bydliště: Tábor
Kontaktovat uživatele:

#2 Příspěvek od Pawalo »

Zdravim,,,

řešil bych to asi tak že bych zapnul časovač kterej by mě po 1 minutě vyvolával přerušení. a mezi tim bych počítal otáčky pomocí přerušení na někerym pinu, po té minutě co se mi vyvolá přerušení od časovače bych zjistil kolik se těch otáček napočítalo. když by to pokleslo pod uřčitou hranici tak sepnu rele.
Fafejt

#3 Příspěvek od Fafejt »

to asi nebude to pravý vořechový,protože po minutě se přepálí klínový řemeny.Je potřeba měřit čas mezi jednotlivými impulsy(otáčkami). Jak by se to řešilo softwarově? Při každém impulsu resetovat timer ?
Uživatelský avatar
Pawalo
Příspěvky: 87
Registrován: 06 říj 2005, 00:00
Bydliště: Tábor
Kontaktovat uživatele:

#4 Příspěvek od Pawalo »

to bych asi pak řešil tak že bych počkal až se všechno rozeběhne na těch 300ot/min (jestli je možné) a pak bych od jednoho pulsu zapnum časovač a při druhym pulsu bych ho vypnu a vyčet hodnotu a přepočet bych tu hodnotu na čas a zjistil jak dlouho trvala otáčka a od toho času bych vyhodnotil jestli rele sepnout nebo ne,, při třetim pulsu zase zapnout a při čtvrtym vypnout a přepočítat, atd,,,,
Uživatelský avatar
Pawalo
Příspěvky: 87
Registrován: 06 říj 2005, 00:00
Bydliště: Tábor
Kontaktovat uživatele:

#5 Příspěvek od Pawalo »

teďkom když nad tim přemýšlim tak by to šlo i tim nulovánim časovače jak ste psal,,, když otáčka trvá cca 3,3ms tak časocač nastavit aby po řekněme 4ms vyvolal přerušení. při normálnim běhu by se časovač nuloval po 3,3ms akdyž dojde ke spomalení tak by to přesáhlo přes 4ms a tim by se vyvolalo přerušení a tam by jste si ošetřil sepnutí relátka. bylo by dobře toto přerušení počítat a až třeba po 5 přerušení sepnout relátko. tim se vyřeží problém s tim když se sem tam třeba jeden pulz vytratí nebo tak. sloužilo by to pro kontrolu, jestli ta hřídel opravdu zpomalila,,
Uživatelský avatar
Atlan
Příspěvky: 4514
Registrován: 10 kvě 2004, 00:00
Bydliště: Košice

#6 Příspěvek od Atlan »

co tak inpulzami nabijat kondik a merat napatie na nom. Pouzitim komparatora vyhodnotit pokles otacok :)

To len tak na okraj :)

Alebo spustit casovac a ak pretecie tak bol prekroceny cas otacky tj rychlost sa zmensila. :D
Fafejt

#7 Příspěvek od Fafejt »

S tím timerem to bude ono.Jako globální proměnnou bych dal count:integer; ,při přerušení od timeru bych Inc(count); Při přerušení od vstupu impulsu bych nuloval counter (count:=0;).V hlavní smyčce bych čekal až count bude větčí než nějaká hodnota obsloužil program a sepnul rele
Nevím jak nastavit oředděličku timeru aby měly tu správnou frekvenci.
Když nastane přerušení např. hlavní smyčka bude vykonávat nějaký kód,nejprve se vykoná ta část kódu v přerušení ? Vrátí se to zpět do místa kódu hlavní smyčky ze kterého to vyskočilo ? (jsem začátečník)
Uživatelský avatar
rnbw
Příspěvky: 37419
Registrován: 21 bře 2006, 00:00
Bydliště: Bratislava

#8 Příspěvek od rnbw »

A nie je to lepsie spravit bez procesora? Nejaky casovac, ktory po vyprsani vypne motor a kazdou otackou (resp. viackrat za otacku - podla potreby) ho resetovat.
Uživatelský avatar
Pawalo
Příspěvky: 87
Registrován: 06 říj 2005, 00:00
Bydliště: Tábor
Kontaktovat uživatele:

#9 Příspěvek od Pawalo »

jak přesne nastavit dělící poměr vám asi moc neporadim, to sem dycky některý nastavim a pak při krokování programu sem to nechal počítat a až mi nastalo přerušení tak sem se kouknul kolik času trvalo než přerušení nastalo :)

a když nastane nějaký příznak pro přerušení tak se dokončí poslední vykonávaná instrukce, uloží se návratová adresa a provede se skok na adresu 0004h kde začíná vektor prerušení. až si obsloužíte přerušení tak vymažete příznak a zadáte budto return pro návrat na návratovou adresu ale pak si v programu musíte někde zapnout globální přerušení a nebo se vrátit pomocí retfie což je jakoby return na poslední návratovou adresu akorát že se automaticky povolí globální přerušení.
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#10 Příspěvek od ZdenekHQ »

Atlan píše:co tak inpulzami nabijat kondik a merat napatie na nom. Pouzitim komparatora vyhodnotit pokles otacok :)

To len tak na okraj :)

Alebo spustit casovac a ak pretecie tak bol prekroceny cas otacky tj rychlost sa zmensila. :D


Taky by se k tomu přes procesor dalo připojit PC, nejlépe čtyři jádra a JehoVisty a nějakou malou 100MB aplikací to hlídat a všechno odesílat do Mrkvosoftu.... :lol:

Ten procesor se nabízí, prográmek je triviální, ale klasickej převodník f/U a komparátor má taky svoje výhody...
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Fafejt

#11 Příspěvek od Fafejt »

Dobrej nápad,třeba 18F4550 -připojit k PC přes USB ,ale ne JehoVisty (jsem odpůrce).Jdem zásadně pro procesor a to z důvodu dlouhodobý spolehlivosti a přesnosti.
Pro někoho je to triviální záležitost,někdo na to kouká jak divoký prase.Pro mě je to horší,protože mi chybí část znalostí a hlavně zkušenosti s programováním MCU.

Zkusím se s tím nějak poprat...
Uživatelský avatar
Banda
Příspěvky: 1170
Registrován: 22 bře 2005, 00:00
Bydliště: OV

#12 Příspěvek od Banda »

Fafejt píše:Zkusím se s tím nějak poprat...


Však už jsi to vyřešil. Buď budeš měřit čas mezi impulzy nebo budeš měřit počet impulzů za čas. Od toho se právě odvodilo Časovač/Čítač.
Jak nastavit předděličku najdeš v datasheetu. Pokud budeš mít zálohované důležité registry Status, Wreg, apod., tak se netřeba bát,
že by při návratu z přerušení program selhal. To je celkem jednoduchý program. Ani by nebylo třeba nějakého přerušení.
Fafejt

#13 Příspěvek od Fafejt »

Banda píše:Však už jsi to vyřešil. Buď budeš měřit čas mezi impulzy nebo budeš měřit počet impulzů za čas. Od toho se právě odvodilo Časovač/Čítač.
Jak nastavit předděličku najdeš v datasheetu. Pokud budeš mít zálohované důležité registry Status, Wreg, apod., tak se netřeba bát,
že by při návratu z přerušení program selhal. To je celkem jednoduchý program. Ani by nebylo třeba nějakého přerušení.

Možná teoreticky,ale to je málo.Neni mi jasný,proč ukládat ty důležitý registry.Má to vliv na správnej návrat při přerušení ? Chystám se to psát v MikroPascalu.Impulsy od indukčního snímače jsou dost úzký ,nevím jestli by to program stíhal v hlavní smyčce -proto to ext. přerušení.
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#14 Příspěvek od Chenzee »

Záloha důležitých registrů je nutná proto, že v přerušení používáš ty samé registry akorát v podstatě pro jiný program. Tedy při vykonávání přerušení se tyto registry nastavují (mění svůj obsah) dle aktuálních operací a po návratu z přerušení bys měl v místě, kde nastalo přerušení jiné hodnoty těchto registrů. Např. budeš mít operaci sečtení dvou hodnot, po načtení první hodnoty se vyvolá přerušení, to se obslouží ale protože ve W se ti změnila hodnota, po návratu nebude sčítaní dvou hodnot, které potřebuješ ale úplně jiné hodnoty = nekorektní chování programu, zabloudění atd. Týká se to W,STATUS, (PCLATH pokud je to kontrolér kde toto musíš nastavovat, což 12F není :wink: )

CH.
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#15 Příspěvek od ZdenekHQ »

Když to píšeš ručně, v každým přerušení na začátku "odložíš" registry používané v obsluze přerušení do zásobníku a na konci si je zase "vyzvedneš" v přesně opačném pořadí, než jsi je ukládal. V jednapadesátkovým asm je na to fce PUSH a POP, u PIC bude nějaká obdoba.

Pokud si je ze zásobníku nevyzvedneš všechny tak, jak jsi je tam uložil, vrátí se ti program někam jinam, než bys to čekal a budeš (někdy hodiny) přemýšlet, proč se to zbláznilo...

Překladače z vyšších jazyků to většinou dělají automaticky, až na to, že zálohují kde co....
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“