Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Szukam schematu prostego pilota na drabince rezystorowej

DawiDD 14 Sty 2016 08:16 1074 27
  • #1 14 Sty 2016 08:16
    DawiDD
    Poziom 28  

    Witam
    Potrzebuje wykorzystać przyciski od radia przy kierownicy w aucie. Jest tam 5 przycisków na 2 przewodach, każdy przycisk z rezystorem od ok 300om do 3 kom. Szukam jakiegoś schematu układu, który by mi rozpoznał jaki przycisk jest wciśnięty i podał sygnał ma 1 z 5 linii.
    Będę wdzięczny za pomoc
    pozdrawiam

    0 27
  • #3 14 Sty 2016 09:49
    atom1477
    Poziom 43  

    Najprościej to dać jakiś mały mikrokontroler, np. Attiny13.
    I on by mierzył napięcie na pinie ADC i na tej podstawie wysterowywał odpowiednie linie wyjściowe IO.
    Od razu mówię: tutaj nie byłby ważny schemat tylko program.

    0
  • #4 14 Sty 2016 09:59
    DawiDD
    Poziom 28  

    Nie do końca o to mi chodzi. Potrzebuje jakiegoś prostego układu, który będzie działał autonomicznie, bez komputera, programowania itd. Program ma odczytywać 5 wartości oporników i w zależności od oporu, podawać stan wysoki na wyjściu jednego z piecie kanałów. Im układ będzie prostszy tym lepiej

    0
  • #5 14 Sty 2016 10:17
    atom1477
    Poziom 43  

    Attiny będzie działała bez komputera. A programowanie będzie tylko jednorazowe (przy produkcji).
    Nie rozumiem o co Ci chodzi skoro dalej sam piszesz że "Program ma odczytywać 5 wartości oporników". Czyli jak rozumiem dopuszczasz możliwość programowania układu. Jednocześnie wcześniej nie dopuszczając takiej możliwości.
    Więc bez szklanej kuli niestety nie zrozumiem o co Ci chodzi. Musisz dokładniej wyjaśnić.

    EDIT. A układ który proponuję (na procesorze) był by najprostszy. Wersja bez procesora wymagała by z 5-ciu komparatorów + układ logiczny do eliminowania stanów pośrednich podczas wciskania przycisków (Wtedy napięcie przechodzi przez stany pośrednie zanim się ustabilizuje na docelowej pozycji.) albo wciśnięcia kilku na raz (Wtedy napięcie nie odpowiada żadnemu z przycisków, albo co gorsza odpowiada jakiemuś innemu. Żeby to wyeliminować potrzebny jest automat rejestrujący sekwencję poprzednich wciśnięć klawiszy. Powodzenia w implementowaniu takiego automatu sprzętowo.).

    0
  • #7 14 Sty 2016 10:49
    DawiDD
    Poziom 28  

    Pisząc " program ma odczytywać 5 wartości oporników" miałem na myśli układ który będzie rozpoznawał 5 rożnych stałych wartości rezystorów (pilot przy kierownicy jest zrealizowany na 5 przyciskach z 5 rożnymi rezystorami).
    Patrząc na zamieszczony schemat wychodzi, że z pilota musiałyby iść 3 przewody, a u mnie lecą tylko 2

    0
  • #8 14 Sty 2016 11:08
    dondu
    Moderator Mikrokontrolery Projektowanie

    Układ rezystorów i przycisków jest więc nieco inny, ale zasada pomiaru będzie taka sama.
    Możesz sprawdzić omomierzem na tych dwóch przewodach, jaką rezystancję podaje w zależności od przyciśniętego przycisku?

    Mikrokontroler jest więc najlepszym rozwiązaniem.

    0
  • #9 14 Sty 2016 13:29
    DawiDD
    Poziom 28  

    Opór mam od 300 om od 3 kom - chociaż rezystory mogę dowolnie pozmienia,ć bo pilot już oryginalnie nie będzie sterował radiem.
    A może są jakieś gotowe takie projekty do kupienia, albo żeby z czegoś przerobić? Nigdy nie miałem do czynienia z programowaniem i jeśli ma to być na mikrokontrolerze to wolałbym wykorzystać już jakiś gotowy projekt

    0
  • #10 14 Sty 2016 13:53
    atom1477
    Poziom 43  

    DawiDD napisał:
    A może są jakieś gotowe takie projekty do kupienia, albo żeby z czegoś przerobić? Nigdy nie miałem do czynienia z programowaniem i jeśli ma to być na mikrokontrolerze to wolałbym wykorzystać już jakiś gotowy projekt

    Tylko że taka przeróbka musiała by polegać właśnie na zmianie softu i przeprogramowaniu. Czyli nic nie zyskujesz w tej kwestii. Raczej tracisz bo do gotowego układu niekoniecznie będzie dostępny gotowy soft do edytowania.
    Zyskasz jedynie gotową zmontowaną płytkę, ale jak rozumiem ona Ci nic nie daje bo i tak zakładałeś samodzielne zrobienie tego cuda.
    Skoro masz możliwość przerabiania klawiatury to dlaczego po prostu nie podłączysz każdego przycisku niezależnie?

    0
  • #11 14 Sty 2016 13:57
    DawiDD
    Poziom 28  

    Podłączenie osobnymi przewodami było by najlepszym wyjściem, ale jestem ograniczony ilością ścieżek w taśmie kierowniczej

    0
  • #12 14 Sty 2016 14:29
    atom1477
    Poziom 43  

    Pozostaje jeszcze kwestia czym te przyciski mają sterować. Bo coś mi się zdaje że jakimś układem programowalnym. W takim przypadku dodawanie kolejnego układu programowalnego jest bez sensu (dekodowanie mógł by robić ten główny układ).

    0
  • #13 14 Sty 2016 14:39
    DawiDD
    Poziom 28  

    Na początek ma sterować tylko vol+ i vol- w dac'u. Pozostałe 3 przyciski jeszcze nie są zaplanowane, ale na pewno beda

    1
  • #14 14 Sty 2016 14:47
    kkknc
    Poziom 41  

    Wymień radio na takie z obsługą kierownicy. Prościej się nie da.

    0
  • #16 14 Sty 2016 15:56
    kkknc
    Poziom 41  

    Podłącz się bezpośrednio. Powinno zadziałać mimo rezystorów. Masz przecież 3 kable i ten układ też wymaga 3 do sterowania głośnością.

    0
  • #17 14 Sty 2016 15:58
    DawiDD
    Poziom 28  

    Tak tylko jeden z nich to masa, a tu na schemacie przyciski nie są dopięte do masy

    0
  • #18 14 Sty 2016 16:17
    kkknc
    Poziom 41  

    To odepnij jak masz możliwość. Zawsze możesz też dać przekażniki. Wtedy jeden rząd przycisków będzie ci sterował jedną funkcją a drugi drugą.
    Daj schemat kierownicy.

    0
  • #20 15 Sty 2016 10:41
    atom1477
    Poziom 43  

    DawiDD napisał:
    - Zakładają że bym wykonał taki układ to jak wyprowadzić 5 wyjść sterujących?

    Tu nie ma co wyprowadzać. Wyjściami będą po prostu piny IO mikrokontrolera.

    DawiDD napisał:
    - Co trzeba by zmienić w tym programie który jest w artykule?

    Jedynie progi napięć ADC dla każdego przycisku. No i wywalić obsługę wyświetlacza LCD i zamiast niej dać wysterowywanie ponów OI.

    0
  • #21 17 Sty 2016 18:13
    DawiDD
    Poziom 28  

    @atom1477 czy jesteś w stanie zrobić mi gotowca ten program ? Ja nic z tego nie rozumiem jak ustawia się progi napiec itd

    0
  • #22 17 Sty 2016 21:03
    atom1477
    Poziom 43  

    W stanie: tak.
    Tylko że ten dział forum to od pomocy jest.
    I wiadomo jak się to potoczy dalej. Nawet ja dostaniesz gotowca, to pewnie procka nie zaprogramujesz bo nie masz programatora.

    0
  • #23 17 Sty 2016 21:27
    dondu
    Moderator Mikrokontrolery Projektowanie

    DawiDD napisał:
    Ja nic z tego nie rozumiem jak ustawia się progi napiec itd

    Przecież w artykule jest dostępny kalkulator, który progi wylicza:

    Szukam schematu prostego pilota na drabince rezystorowej
    wraz z opisem pod nim:

    Cytat:
    Jak posługiwać się tabelką z wynikami obliczeń?

    Opis według numeracji kolumn:

    1. Zawiera oznaczenia przycisków zgodne ze schematem powyżej. Jest ich tyle ile zażądałeś, lecz nie więcej niż 50.

    2. Zawiera napięcia "idealne", które chcemy osiągnąć na wyjściu dzielnika (podłączonego do wejścia ADC) w zależności, który przycisk naciśniesz. Napięcia te policzone są tak, aby zachować równomierne odstępy i liniowość.

    3. Zawiera wyliczone wartości rezystorów poszczególnych przycisków, z możliwie największą dokładnością ("idealne"), które pozwalają nam osiągnąć napięcia idealne (wyliczone w kolumnie 2. Niestety w większości przypadków takie rezystory nie są produkowane. Należy więc przyjąć zbliżone do nich z wybranego szeregu.

    4. Zawiera wartości rezystorów poszczególnych przycisków, które powinieneś użyć, by osiągnąć najbardziej zbliżony wynik do napięć idealnych wyliczonych w kolumnie 2. Rezystory wybrane są z rezystorów szeregu, który ustawiłeś w parametrach kalkulatora.

    5. Takie napięcia faktycznie otrzymasz po zastosowaniu rezystorów podanych w kolumnie nr 4. Zauważ, że napięcia te niewiele różnią się od napięć idealnych z kolumny 2. I o to chodziło :-)

    6. Kolumny 6, 7 i 8 zawierają wyniki pomiarów ADC (w zależności od zastosowanej rozdzielczości), które powinieneś otrzymać pod warunkiem, że całą drabinkę zbudujesz z rezystorów podanych w kolumnie 4. Na czerwonym tle podane są progi decyzji, o których przeczytasz w dalszej części niniejszego artykułu. Dane te ułatwią Ci napisanie programu wykrywającego poszczególne klawisze.


    Progi ustawia się je w tym fragmencie programu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Czego więc nie rozumiesz?

    0
  • #24 18 Sty 2016 06:45
    DawiDD
    Poziom 28  

    Programator bym kupił arduino wiec tu nie ma problemu.
    Tak jak pisałem na początku, nigdy nie miałem styczności z programowanie stąd moja niewiedza i jeśli nie dostane gotowca, do którego i tak pewnie będę miał pytanie, to sobie nie poradzę.

    0
  • #25 18 Sty 2016 11:45
    atom1477
    Poziom 43  

    Gotowcem jest to co Ci podaje dondu.

    0
  • #26 18 Sty 2016 21:18
    DawiDD
    Poziom 28  

    czyli ma to wyglądać tak:


    Klawiatura na ADC z drabinką rezystorów i przycisków.
    Program testujący pomiary ADC dla poszczególnych przycisków.
    Program przygotowany dla zegara mikrokontrolera: 1MHz
    z wykorzystaniem bibliotek LCD: http://radzio.dxp.pl/
    */

    #include <avr/io.h>
    #include <stdio.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    #include "HD44780.h"

    char wynik[17]; //bufor LCD
    volatile unsigned char ADC_pomiar; //zmienna przechowująca ostatni wynik
    //pomiaru ADC


    //----- PRZERWANIE Z ADC -----------------------------------------

    ISR(ADC_vect)
    {
    //obsługa przerwania po zakończeniu pomiaru ADC
    ADC_pomiar = ADCH; //zapamiętaj pomiar w zmiennej
    }


    //---- PROGRAM GŁÓWNY -----------------------------------------------

    int main(void)
    {

    //===== LCD ======================
    _delay_ms(50); //opóźnienie wymagane przez niektóre wyświetlacze.
    LCD_Initalize(); //inicjalizuj LCD

    //Napis startowy
    LCD_GoTo(0, 0);
    LCD_WriteText("Test klawiatury");
    LCD_GoTo(0, 1);
    LCD_WriteText("na ADC.");

    _delay_ms(2000);

    LCD_Clear();
    LCD_GoTo(0, 0);
    LCD_WriteText("ADC pomiar: ");

    //===== inicjalizacja ADC ======================
    //napięcie referencyjne AVcc + zewnętrzny kondensator 100nF na Aref
    //kanał ADC0 na pinie PC0 (domyślny)
    //ADC w trybie Free Running Mode
    //preskaler 128, by przy 1MHz częstotliwość ADC była jak najmniejsza
    //co da nam czas trwania jednego pomiaru około 1,66ms
    //przerwanie po skończeniu pomiaru
    //wynik wyrównaj do lewej, ponieważ będziemy korzystać tylko
    //z 8 najstarszych bitów

    #define VREF 5.0 //napięcie referencyjne ADC 5V

    ADMUX = (1<<REFS0) //napięcie odniesienia z AVcc + kondensator na AREF
    | (1<<ADLAR); //wynik wyrównaj do lewej

    ADCSRA = (1<<ADEN) //ADEN=1 włączenie przetwornika ADC)
    | (1<<ADSC) //start pierwszego pomiaru
    | (1<<ADFR) //włącz Free Running Mode
    | (1<<ADIE) //włącz przerwania z ADC
    | (1<<ADPS0) //ustawienie preskalera na 128
    | (1<<ADPS1)
    | (1<<ADPS2);

    sei(); //włącz przerwania globalne

    while(1){ //pętla główna
    LCD_GoTo(0, 1);
    sprintf(wynik,"%d ", ADC_pomiar); //konwersja na łańcuch znakowy
    LCD_WriteText(wynik); //Wyświetlenie pomiaru

    LCD_GoTo(6, 1);
    sprintf(wynik,"%.2fV", ADC_pomiar * VREF/255); //konwersja napięcia
    LCD_WriteText(wynik); //Wyświetlenie napięcia

    _delay_ms(250); //opóźnienie
    }
    }

    //ustalamy, który przycisk jest naciśnięty, porównując pomiar
    //z progami decyzji obliczonymi przez kalkulator na blogu
    if (ADC_pomiar > 234 ) stan_aktualny = PRZY_S1; //naciśnięty S1
    else if(ADC_pomiar > 191 ) stan_aktualny = PRZY_S2; //naciśnięty S2
    else if(ADC_pomiar > 148 ) stan_aktualny = PRZY_S3; //naciśnięty S3
    else if(ADC_pomiar > 107 ) stan_aktualny = PRZY_S4; //naciśnięty S4
    else if(ADC_pomiar > 66 ) stan_aktualny = PRZY_S5; //naciśnięty S5
    else if(ADC_pomiar > 22 ) stan_aktualny = PRZY_S6; //naciśnięty S6
    else stan_aktualny = PRZY_ZADEN; //żaden przycisk nie jest naciśnięty

    ?

    0
  • #27 18 Sty 2016 22:16
    dondu
    Moderator Mikrokontrolery Projektowanie

    Po pierwsze skopiowałeś tylko fragment programu.
    Po drugie coś w nim zmieniłeś? Czy mamy sami szukać?
    Po trzecie, co nie działa jak oczekujesz?

    Nie zrobimy tego za Ciebie. Musisz sam czytać, próbować zrozumieć, pytać o szczegóły których nie rozumiesz ... masz gotowiec, z wyjaśnieniami, opisami, komentarzami, fragmentami dokumentacji ...

    Zacznij działać:
    1. Wykorzystaj artykuł i zrób i przetestuj dokładnie to co w nim jest.
    2. Zacznij modyfikować i próbuj.
    3. W razie problemów pytaj.

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo