Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[atmega16] czujnik optyczny MOBOT-ps20

LuQe01 16 Sty 2010 18:57 1683 3
  • #1 16 Sty 2010 18:57
    LuQe01
    Poziom 2  

    Witam,
    piszę pierwszy raz więc proszę ograniczyć krytykę do minimum ;)

    - tworzę właśnie czujnik odległości na podstawie elementów dostarczonych przez firmę
    Wobit jest to nowy układ, " MOBOT - Ps20 " zbudowany jest z czujnika optycznego HSDL-9100 oraz przetwornika a/c APDS-9700 oba elementy firmy AVAGO.

    Program piszę już od jakiegoś czasu ale cały czas mam jakieś problemy, otóż mobot ma 5 wyjść gdzie :
    1- gnd
    2- Aout ( wyjście analogowe )
    3- Vcc
    4- Lon ( włączenie fotodiody )
    5- Dout (wyjście cyfrowe )

    Zdecydowałem się na podłączenie Atmegi16 pod wyjście analogowe ( edit: "cyfrowe " ) ze względu na to że mam już gotowy program do obsługi A/C, niestety program ten pisałem pod czujnik siły ff100 gdzie spradza się w 100 % po przeróbkach niestety na optyczny już nie działa pomimo nadania Ledon stałej logicznej "1" .

    Code:


    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    #include <avr/delay.h>



    unsigned int pomiar;      // Zmienna do przechowywania wyniku pomiaru
    unsigned char i;         // Ilośc pomiarów
    unsigned int wynik;         // Zmienna do liczenia średniej z wyników pomiaru



    void Inicjalizacja(void)
    {
       DDRA=0x00;      // Port jako wejścia
       PORTA=0x00;      // Port C wejścia bez podciągania
       
       DDRD=0xFF;      // Port jako wyjścia
       PORTD=0xFF;      // Wyjścia w stanie wysokim
       
       DDRB= 0xFF;
       PORTB= 0x00;
                // Wybranie wewnętrznego żródła napięcia odniesienia   
       ADMUX |= _BV(REFS1);      
       ADMUX |= _BV(REFS1);
                //   Wybranie sposobu zapisu wyniku z wyrównaniem do lewej (osiem starszych bitów wyniku w rejestrze ADCH)
       ADMUX |= _BV(ADLAR);      
                // Zezwolenie na konwersję   
       ADCSRA |= _BV(ADEN);      
                // Wybranie częstotliwości dla taktowania przetwornika  (1/8 częstotliwosci zegara kontrolera)
       ADCSRA |= _BV(ADPS0);   
       ADCSRA |= _BV(ADPS1);   
    }


    int main(void)




    {
       Inicjalizacja();                          // Inicjalizacja kontrolera
       
          
          
          
          while (1)
          
          {
             wynik=0;
             i=9;
             
             while(i)
             {   
                ADCSRA |= _BV(ADSC);                     // Rozpoczęcie przetwarzania
                while(bit_is_set(ADCSRA,ADSC))             // Oczekiwanie na zakończenie przetwarzania
                {};   
                pomiar=ADCH;                          // Zapisanie starszych 8 bitów wyniku konwersji do
                                        // zmiennej "pomiar"
                wynik=wynik+pomiar;                // Sumowanie wyników pomiarów dokonywanych w serii
                i--;
                                      // wprowadzić wartość opóźnienia ok 500ms.
             }
             wynik=wynik/9;                      // Wyliczenie średniej
             PORTD=~wynik;                   // Wyświetlenie średniej z wyników pomiarów
             
             _delay_us(10);
             
          }
       
       
    }



    kod jest zlepkiem materiałów z kilku stron które znalazłem ale mimo to nie rozumiem czemu diody " wariują " zamiast podać właściwą wartość w hex-ie, nie wiem czy czasem nie ma to związku z częstotliwością oraz opóźnieniami ? wszelka pomoc bardzo mile widziana !

    0 3
  • #3 17 Sty 2010 01:27
    LuQe01
    Poziom 2  

    faktycznie mała pomyłka układ jest w 100 podłączony pod wyjście analogowe :)

    problem już udało mi się rozwiązać mój błąd polegał na puszczeniu stałej logicznej "1" na wejściu Led zamiast tego należało wprowadzić sygnał pulsacyjny co 100 us i długości ok 20 us układ działa już poprawnie jeżeli będzie ktoś miał jakieś pytania chętnie odpowiem :)

    - dzięki za zainteresowanie :)

    0
  • #4 27 Lut 2011 19:26
    konrad_321
    Poziom 9  

    Jakie dobrałeś nastawy PWM??

    0