Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Atmega i czujnik optyczny wspólna masa

9xxx 10 Sep 2010 15:58 5285 11
Altium Designer Computer Controls
  • #1
    9xxx
    Level 10  
    Witam,

    Posiadam czujnik optyczny pracujący na napięciu 12V i prądzie 150mA. Posiada on trzy wyprowadzenia (plus, minus oraz wygnał wyjściowy). Chcę podłączyć go do mikroprocesora Atmega16 pod jeden z pinów. Problem polega na tym, że jak podłączam bezpośrednio to nie ma żadnego sygnału. Problemem są jak sądzę oddzielne masy czujnika oraz procesora (procesor zasilam z programatora - poprzez port USB). Czy jest możliwość połączenia mas procesora oraz czujnika? Czy należy zastosować jakiś opornik? Nie chciałbym uszkodzić układów dlatego wolę zapytać osób bardziej obeznanych w temacie.
  • Altium Designer Computer Controls
  • #2
    danrok
    Level 13  
    Skoro zasilasz układ z portu USB, to tam z niego poprawadzone jest zasilanie,
    oraz masa, która jest podłączona do procesora. Wystarczy że przeciągniesz
    równolegle masę do swojego czujnika. Możesz pokazać jak to podłączyłeś w tym
    momencie i jak skonfigurowałeś porty w programie?

    Pozdrawiam!
  • Altium Designer Computer Controls
  • #3
    landy13
    Level 31  
    danrok wrote:
    Wystarczy że przeciągniesz równolegle masę do swojego czujnika.

    Niekoniecznie wystarczy. Jeżeli czujnik jest zasilany 12V, to może i na wyjściu mieć 12V.
  • #4
    9xxx
    Level 10  
    danrok wiem, że z usb jest wyprowadzane zasilanie i masa tylko, że to około 5V jeśli się nie mylę i nie wiem czy mogę właśnie masę procesora połączyć bezpośrednio z masą czujnika który jest zasilany z 12V (z zasilacza - drugiego źródła zasilania). Właśnie pytanie brzmi czy jest możliwość połączyć obie masy jeśli źródła zasilania są różne? Czy nie spowoduje to w jakiś sposób uszkodzenia któregoś z elementów?

    Nie mam obecnie protela żeby zrobić schemat, mogę zrobić w paincie ale to właściwie nie ma sensu bo ja po prostu podłączyłem wyjście czujnika na pin procesora. Wcześniej sprawdziłem czy wszystko jest tak jak powinno podłączając przycisk do tego pinu i układ działał, ale po podłączeniu czujnika zamiast przycisku nic się nie dzieje.
  • Helpful post
    #5
    landy13
    Level 31  
    Masy można, a nawet należy połączyć razem. Problem może być z podłączeniem sygnału wyjściowego. Musisz się dowiedzieć jaki poziom napięcia ma ten sygnał (dokumentacja, pomiar oscyloskopem). Jeśli jest to więcej niż zasilanie procesora to zastosuj coś z tego tematu.
  • #6
    danrok
    Level 13  
    landy13 wrote:
    danrok wrote:
    Wystarczy że przeciągniesz równolegle masę do swojego czujnika.

    Niekoniecznie wystarczy. Jeżeli czujnik jest zasilany 12V, to może i na wyjściu mieć 12V.


    Pisałem jedynie o masie, nie o zasilaniu +12V.
  • #7
    landy13
    Level 31  
    danrok wrote:

    Pisałem jedynie o masie, nie o zasilaniu +12V.

    Rada niekompletna jest gorsza niż żadna. Zgadnij co by się stało gdyby zgodnie z Twoją radą "połączył jedynie masy" a sygnał zostawił jak do tej pory?
  • Helpful post
    #8
    nsvinc
    Level 35  
    Łączenie masy cudzego zasilacza i masy USB "na pałę" nie jest zdrowe dla kompa, a już w szczególności dla hosta w kompie. Lipny zasilacz raczy
    zmieniać potencjał masy pcta po podłączeniu ich ze sobą - pecet tego
    nie lubi. Nie raz zdarzyło mi się wywalenie całego hosta na amen, i
    żeby ponownie znalazł mi klawiaturę i mysz musiałem restartować kompa.
    Sporo zależy od jakości "obcego" zasilacza, no i od faktu czy jest
    on galwanicznie odizolowany od sieci
    .
    Brak izolacji galwanicznej powoduje przeważnie podanie na masę peceta
    N-ki, a to się kończy tymczasową lub stałą śmiercią elektroniki na płycie głównej ( lub dla lepszych modeli płyt - zwiechami).

    12V na pinie procesora zasilanego 5V z USB skonczy się podanie 12V na linię zasilania USB - zacznie przewodzić zabezpieczająca dioda w strukturze scalaka.
    Wtedy hosty głupieją - i regułą jest, że pomaga tylko restart. Czasami nawet on może nie pomóc i host is dead.

    Podłączanie czegokolwiek do układów zasilanych z USB musi być
    dobrze przemyślane. Niektóre hosty są tak czułe, że nawet zasiew na masie USB powoduje dziwne zachowanie hosta...
    Długie i wiszące przewody masy z układu podłączonego na USB będą powodować szopki. Do samo dotyczy dodatniej linii zasilania. Regułą jest, że nie wolno
    siać ani pozwalać na zasiew zasilania pobieranego z USB!
  • #10
    9xxx
    Level 10  
    Dzięki za rady, ale niestety nadal mam problem i spróbuję to dokłądniej opisać. A więc problem polega na obsłudze wejścia mikrokontrolera Atmega 16 za pomocą czujnika optycznego typu SCOH (typ nadajnika to SCOH100E natomiast odbiornika to SCOH10062). Czujnik ten powinien być zasilany napięciem 24 V DC, pobiera prąd 150mA, niestety z braku takiego zasilacza zastosowałem zasilacz o napięciu 12V DC i prądzie 400mA. Mimo zmniejszenia napięcia czujnik pracuje prawidłowo. Problem pojawia się w momencie próby podłączenia go do mikrokontrolera. Chodzi o to, że chcę, aby czujnik sygnalizował pojawienie się przeszkody między odbiornikiem a nadajnikiem. Sygnalizacja ma się odbyć poprzez zapalenie sekwencji diod na wyjściach mikrokontrolera Atmega 16.
    Poniżej zamieszczam schemat połączeń.

    Atmega i czujnik optyczny wspólna masa

    Nie wiem czy nie dałem za małego rezystora, ale prawdę mówiąc próbowałem również z rezystorem o wartości 40K i nic się nie działo. Skorzystałem też z połączenia A z linku podrzuconego przez landy13 (ale nie zastosowałem diody zenera - może w tym problem?).

    Program wygląda następująco.

    Code:
    #include <avr/io.h>
    
    #include <util/delay.h>

    int main (void)

    {
    DDRD=0xFF;
    DDRA=0x00;
    PORTD=0x1;
    DDRC=0xFF;

    while(1)
    {
    if(PINA & 0x1)
    {
    PORTD=0x1; //1000000
    PORTC=0x1;
    _delay_ms(100);
    PORTD=0x3; //1100000
    PORTC=0x3;
    _delay_ms(100);
    PORTD=0x2; //0100000
    PORTC=0x2;
    _delay_ms(100);
    PORTD=0x6; //0110000
    PORTC=0x6;
    _delay_ms(100);
    PORTD=0x4; //0010000
    PORTC=0x4;
    _delay_ms(100);
    PORTD=0xC; //0011000
    PORTC=0xC;
    _delay_ms(100);
    PORTD=0x8; //0001000
    PORTC=0x8;
    _delay_ms(100);
    }
    if(!(PINA & 0x1))
    {
    PORTD=0x00;
    PORTC=0X00;
    }
    }
     }


    Nie jest jakiś specjalnie skomplikowany. Stosując przycisk zamiast czujnika, wszystko działa prawidłowo.

    Problem polega na tym, że po podłączeniu czujnika do wejścia procesora nic się nie dzieje (tak jak by czujnika tam w ogóle nie było). Może ktoś wie co robię źle?
  • Helpful post
    #11
    prezeswal
    VIP Meritorious for electroda.pl
    Witam.
    Jeśli wyjście odbiornika jest typu "PNP NO" (tylko taką informację znalazłem w sieci), to na schemacie brakuje - moim zdaniem - rezystora R2 ("wymuszanie" stanu niskiego na wejściu PA0).

    Atmega i czujnik optyczny wspólna masa
    Pozdrawiam.
  • #12
    9xxx
    Level 10  
    Dzięki za pomoc, zadziałało :)