Jump to content

Pomiar czasu trwania impulsu - ATTiny13


radek_w

Recommended Posts

Witam.

 

Chciałbym zmajstrować sobie mały układzik, który włączałby jakąś funkcję ( np. oświetlenie modelu ) po przełączeniu przełącznika w nadajniku.

Tak sobie wymyśliłem że wspomniany w tytule AtTiny13 mógłby pracować jako dekoder impulsów z odbiornika i generator impulsów do diód LED.

 

Wiem, pierwszym krokiem jest dokonanie pomiaru długości trwania impulsów wysyłanych przez odbiornik ... jednak nie potrafię tego w prawidłowy sposób zrobić :-(

 

Próbowałem w BASCOMIE użyć funkcji pulsein ale coś nie działa.

Może ktoś coś podpowie ?

 

 

Pozdrawiam

Radek

Link to comment
Share on other sites

Generalnie tak, jak koledzy piszą. Z tym, że nie trzeba zatrzymywać timera, wystarczy zapamiętać jego wartość. "Większe" AVR-y, niż attiny13 (np. 2313) mają wejścia Input Capture, w których wartość licznika jest przepisywana do specjalnego rejestru w chwili zmiany stanu na odpowiednim wejściu. Tym się mierzy impulsy bardzo dokładnie.

 

Można się pokusić o więcej. Ja dorobiłem 6 przycisków do aparatury, które wysyłam w jednym kanale, jako 7-mio pozycyjny przełącznik (7 położeń serwa) i napisałem kod na attiny 2313, który może sterować 6-ma rzeczami. Docelowo: oświetleniem, w innej inkarnacji aparatem, albo jakimś komputerem pokładowym. Albo opcjami OSD. Łotewer.

Przycisków równie dobrze mogło by być 8, ale nie wiedziałem gdzie miałbym jeszcze dziury w nadajniku wiercić, a 6 to i tak w końcu dużo.

Właśnie zamieściłem w tym wątku filmik z działania tego dekodera.

Tam jest opisane przeróbka Optica, ale układ się nada w sumie do każdego nadajnika.

Link to comment
Share on other sites

  • 8 months later...

Tez udalo mi sie kiedys wyprodukowac taki RC switch, ale oparlem go ATTINY25

 

Tutaj opis wyprowadzen scalaka i hex do pobrania: http://mifau.com/wp/?p=8

 

Przykladowy kod zrodlowy dla procesora (pierwsza wersja kodu dla switcha)

 

 

 

/*
RC-SWITCH
Michal Maciakowski
2009

ATTINY25 @ 8MHz
*/


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

const char VERSION[] = "RC-SWITCH Michal Maciakowski 2009 v1.1";


#define sbi(port,pin)   port |=   _BV(pin)	//stan wysoki
#define cbi(port,pin)   port &= ~(_BV(pin)) //stan niski

#define _PORT_IN 		PINB
#define _PORT_OUT 		PORTB
#define _PIN_WE			PB2
#define _PIN_STAN1 		PB5	
#define _PIN_STAN2 		PB3	
#define _PIN_STAN3 		PB4
#define _PIN_ALARM 		PB0
#define _PIN_ALARM2 	PB1		// NEG(ALARM+STAN3)


volatile uint32_t licznik = 0;
volatile uint8_t licznik_ok = 0;

ISR(TIMER0_OVF_vect) {
licznik++;
}


ISR(INT0_vect) {
GIMSK  = 0b00000000; //wylaczamy int0

if (bit_is_set(_PORT_IN,_PIN_WE)){//stan wysoki - rozpoczynamy pomiar
	TCNT0 = 0;	
	licznik = 0;
}else{

	if ((licznik>25)&&(licznik<80)){ //wstepne zawezenie pomiaru

		if (licznik_ok>4){   //5 poprawnych odczytow pod rzad
			cbi(_PORT_OUT,_PIN_ALARM); //wylaczenie alarmu
			sbi(_PORT_OUT,_PIN_ALARM2);

			if (licznik>54){
				sbi(_PORT_OUT,_PIN_STAN3);
				cbi(_PORT_OUT,_PIN_ALARM2);
			}
			else cbi(_PORT_OUT,_PIN_STAN3);

			if ((licznik>=42)&&(licznik<=54)) sbi(_PORT_OUT,_PIN_STAN2);
			else cbi(_PORT_OUT,_PIN_STAN2);	

			if (licznik<42)	sbi(_PORT_OUT,_PIN_STAN1);
			else cbi(_PORT_OUT,_PIN_STAN1);	

			licznik_ok=0;
		}
		licznik_ok++;
	}else{ //bledny sygnal
		 licznik_ok=0;
		 sbi(_PORT_OUT,_PIN_ALARM); //wlaczenie alarmu
		 cbi(_PORT_OUT,_PIN_ALARM2);
	}

}

GIMSK  = 0b01000000; //wlaczamy int0
}



int main(){
//konfiguracja portow
_PORT_OUT = 0b00000000; //
	DDRB  = 0b00111011; //

//konfiguracja timera
TCCR0B = 0b00000001; //timer 0

//konfiguracja zewnatrznych przerwac
MCUCR = 0b00000001;	//int0 wywolany dowolna zmiana stanu
GIMSK  = 0b01000000; //int0
GIFR = 	 0b01000000;

sbi(TIMSK,TOIE0);	//wlaczenie timera

sei();

sbi(_PORT_OUT,_PIN_STAN2); //defaultowy stan kanalu

//defaultowo alarm jest wlaczony
sbi(_PORT_OUT,_PIN_ALARM);
cbi(_PORT_OUT,_PIN_ALARM2);

while(1){
	if (licznik>4000) { //zabezpieczenie w przypadku braku sygnalu RC
		sbi(_PORT_OUT,_PIN_ALARM);
		cbi(_PORT_OUT,_PIN_ALARM2);
		licznik=0;
	}

}

}

 

 

Ciekawa implementacja RC switcha byl przelacznik video na potrzeby FPV: http://rc-cam.info/viewtopic.php?t=746

Link to comment
Share on other sites

  • 1 year later...

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.