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" .
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 !
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" .
#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 !