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