Jazyk C51 a detekce sestupné hrany – Mikrokontroléry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jazyk C51 a detekce sestupné hrany – Mikrokontroléry – Fórum – Programujte.comJazyk C51 a detekce sestupné hrany – Mikrokontroléry – Fórum – Programujte.com

 

marpit0
Stálý člen
21. 7. 2011   #1
-
0
-

Ahoj, řeším teď jeden menší problém. Potřebuji pomocí ATMELU detekovat sestupnou hranu na pinu. Aktuálně to řeším dosti složitým způsobem na principu, že pokud je vstup v jedničce, tak ve smyčce očekávám příchod nuly a pak podmínkou pokračuji dál v programu. Tento princip se mi však moc nezdá a rád bych jej zjednodušil.
Hledal jsem po internetu, ale jaksi jsem nenašel, co potřebuji (možná jsem hledal špatně). Prosím tedy o radu. Díky M

PS: Mimochodem po dlouhé době jsem zde zavítal a byl jsem zaskočen novým vzhledem webu a musel jsem se ujistit, že jsem opravdu správně   . No nic proti změně, ale ten starší se mi líbil více. 

Nahlásit jako SPAM
IP: 94.113.183.–
MarPit
KIIV
~ Moderátor
+43
God of flame
21. 7. 2011   #2
-
0
-

#1 marpit
kdybys to mel na INT pinu tak ti to i vygeneruje preruseni (jsou tam dva rezimy - detekce urovne - tj. 0 a detekce sestupny hrany) ale neni to moc vhodne pro tlacitka kvuli zakmitum ... tlacitka se musi proste vzorkovat po par milisekundach a kdyz je treba 5 vzorku po 2ms stejnych tak se provede akce

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
marpit0
Stálý člen
21. 7. 2011   #3
-
0
-

#2 KIIV
Vyhodnocovat budu signál z optických čidel (optické čidlo -> komparátor -> uPC). Přes INT mě to napadlo taky, ale potřebuju takto vyhodnocovat 4 signály a procesor co mám k dispozici má jen 2 externí přerušení. 

Nahlásit jako SPAM
IP: 94.113.183.–
MarPit
KIIV
~ Moderátor
+43
God of flame
21. 7. 2011   #4
-
0
-

#3 marpit
a jaky rozliseni potrebujes? slo by nejspis pouzit jedno preruseni od timeru - nastavit ho treba na 500 mikrosekund a detekovat jen rozdil mezi predchozim a soucasnym - nastavit si nekam flagy (klidne xorem) a pak to v hlavnim programu zpracovat

pripadne jde udelat i externi obvod - napadl 4bitovej latch a 4bitovej komparator - pri preruseni vygenerovat puls aby se do bufferu nahrala nova hodnota a tak dale

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
marpit0
Stálý člen
21. 7. 2011   #5
-
0
-

#4 KIIV
Tak nakonec to řeším takto, zkus se na to prosím podívat, zda to půjde, ještě nemám doma programátor, tak nemůžu zkusit. 

#include <REGX52.H>

#define START1 P1_0
#define START2 P1_1
#define STOP1  P1_2
#define STOP2  P1_3

void main()
{
	P0 = 0;

	while(1)
	{
		if(START1=1)
		{
			zapniPrejezd();	    //zapne přejezd
			while(STOP1=0)  {}; //čeká na najetí vlaku na STOP senzor
			while(STOP1=1)  {}; //senzor byl vlakem již opuštěn - posledním vozem
			vypniPrejezd();     //vypne přejezd
			while(START2=0) {}; //čeká na najetí vlaku na START2
			while(START2=1) {}; //čeká na průjezd posledního vozu vlaku
		}
		
		if(START2=1)
		{
			zapniPrejezd();
			while(STOP2=0)  {};
			while(STOP2=1)  {};
			vypniPrejezd();
			while(START1=0) {};
			while(START1=1) {};
		}	
	}
}
Nahlásit jako SPAM
IP: 94.113.183.–
MarPit
KIIV
~ Moderátor
+43
God of flame
21. 7. 2011   #6
-
0
-

obavam se ze ti to moc nepobezi

vsude pouzivas prirazeni misto porovnani

taky bych mel trochu strach ze kdyz budes v jednom prejezdu, tak nebude fungovat ten druhej...

pak START1/2 budou pravdepodobne neustale v log 1 a jen se prerusi na log 0? Za predpokladu ze udelas spravne podminky tak to stejne bude zasekany uvnitr porad

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
marpit0
Stálý člen
21. 7. 2011   #7
-
0
-

#6 KIIV
Jo máš pravdu najedno rovnítko jsem zapoměl.

O to právě jde, aby ten druhý byl vyřazený (senzor). Na koleji to budeš mít takto: 

-------START1-----------------STOP2----|      |---STOP1----------------START2-------------

Nahlásit jako SPAM
IP: 94.113.183.–
MarPit
DragonSoul
~ Anonymní uživatel
14 příspěvků
24. 7. 2011   #8
-
0
-

#1 marpit
Ahoj. 

Bohuzel C51 neovladam, ale nastinim princip, urcite si to tam naprogramujes.

Pro detekci sestupne hrany na AtMega8 lze pouzit preruseni od pinu INT0 a INT1 odpovidajici pinum PD2 a PD3.

Pro INT0 a sestupnou hranu je nutne nastavit ISC01 na 1 a ISC00 na 0 v registru MCUCR. Dale je potreba vlozit vektor preruseni pro INT0 do programu a tam obslouzis, co se ma stat kdyz se detekuje sestupna hrana.

V hlavnim programu je potreba nastavit INT0 v GICR a povolit preruseni. Dale nekonecnou smycku.

Nahlásit jako SPAM
IP: 84.42.151.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

Pozor ostre hrany!!! — založil olgo

Detekce QT — založil Standalf

Detekce JS — založil cheeester

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý