radek_w Posted May 28, 2009 Share Posted May 28, 2009 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 More sharing options...
remzibi Posted May 28, 2009 Share Posted May 28, 2009 Podaj impuls na jakies przerwanie i w nim sprawdzaj stan a potem w zaleznosci startuj i stopuj timer - oczywiscie jakos go tam preskaluj w zalezniosci jak uzywasz proca . Link to comment Share on other sites More sharing options...
-==PEGAZ==- Posted May 28, 2009 Share Posted May 28, 2009 ja kiedyś "zrobiłem" taki rc switch: http://forumrc.alexba.eu/ipw-web/bulletin/bb/viewtopic.php?t=1363 Co prawda to nie do końca na temat, ale to akurat szybki i prosty układ, który możemy obciążyć nawet dość dużym prądem. Link to comment Share on other sites More sharing options...
camkey Posted May 28, 2009 Share Posted May 28, 2009 Tu masz gotowy przyklad: http://der-frickler.net/modellbau/avr/beeper Link to comment Share on other sites More sharing options...
mieczotronix Posted May 28, 2009 Share Posted May 28, 2009 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 More sharing options...
mifau Posted January 30, 2010 Share Posted January 30, 2010 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 More sharing options...
elektronik-adam Posted January 18, 2012 Share Posted January 18, 2012 Odkopie trochę temat możecie mi wyjaśnić jakby taki kod miał wyglądać w bascomie na attiny 2313? Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.