radek_w Opublikowano 28 Maja 2009 Udostępnij Opublikowano 28 Maja 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 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
remzibi Opublikowano 28 Maja 2009 Udostępnij Opublikowano 28 Maja 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 . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
-==PEGAZ==- Opublikowano 28 Maja 2009 Udostępnij Opublikowano 28 Maja 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. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
camkey Opublikowano 28 Maja 2009 Udostępnij Opublikowano 28 Maja 2009 Tu masz gotowy przyklad: http://der-frickler.net/modellbau/avr/beeper Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mieczotronix Opublikowano 28 Maja 2009 Udostępnij Opublikowano 28 Maja 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. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
mifau Opublikowano 30 Stycznia 2010 Udostępnij Opublikowano 30 Stycznia 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 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
elektronik-adam Opublikowano 18 Stycznia 2012 Udostępnij Opublikowano 18 Stycznia 2012 Odkopie trochę temat możecie mi wyjaśnić jakby taki kod miał wyglądać w bascomie na attiny 2313? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Zarchiwizowany
Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.