Skocz do zawartości

[C] Programowanie Sharpa w minisumo


Pomocna odpowiedź

Napisano

Mam podłączone czujniki Sharpa na wejściach ADC, czy program powinien być napisany tak, że po zauważeniu przeciwnika następuje przerwanie od ADC czy normalnie zrobić to pętlą if? Jeśli przez przerwanie ADC to proszę o jakieś porady jak to zrobić bo nigdy tego nie robiłem, czytam datasheet ale nie wiele mi to rozjaśnia całą sytuację 😕

Jeżeli się nie mylę to przerwanie od ADC występuje w momencie zakończenia konwersji. Niezależnie od tego jaki jest wynik tej konwersji. W przerwaniu musiałbyś sprawdzić odczyt i go zinterpretować. Więc niewiele się to różni od ciągłego oczekiwania w pętli.

A może by tak podpiąć Sharpy do komparatora analogowego???

W przypadku Atmega8 wejścia komparatora to AIN0 i AIN1, mam rację? Jeśli tak to nie mogą tam być sharpy bo w tym miejscu mam podpięty mostek. Więc nie ma większej różnicy w czasie czy wszystko napiszę pętlą if czy sharpy będą wywoływać przerwanie?

Chodzi o to, że musisz ciągle wykonywać pomiar ADC i analizować wynik, bo nie wiesz kiedy pojawi się przeciwnik. Szarpy nie mogą wyzwalać przerwania, bo niby jak???

Gdybyś podłączył czujnik do komparatora analogowego, to on sam ciągle by analizował napięcie i w momencie pojawienia się przeciwnika zgłosił by przerwanie.

Mam czujnik sharp analogowy, podłączony pod ADC0 jak w kodzie napisać zeby dawal sygnal kiedy zobaczy przeszkode? Nie interesuje mnie pomiar odległości tylko samo sygnalizowanie ze widzi przeszkode? Napisałem coś takiego do obługi tego sharpa ale nie wiem co dalej, i czy to jest w ogóle dobrze

#include <avr/io.h>
#include <avr/interrupt.h>
int tablica[];
int c=0;
int a=0;
int wynik=0;

ISR(ADC_vect)
{
// nie wiem co tutaj powinno być
}


int main(void)
{
/*########## ADC- sharp ################*/
ADMUX |= (1<<REFS0);// Vref na 5V;  100nF do masy
ADCSRA |= (1<<ADEN); //włączamy przetwornik
ADCSRA |= (1<<ADPS1) | (1<<ADPS2) | (1<<ADPS0); //preskaler=128 
ADCSRA |= (1<<ADIE); //przerwanie adc


   while(1)
   {
      // nie wiem co tutaj powinno być

   }
}

__________

Komentarz dodany przez: Sabre

Scaliłem z poprzednim tematem. Nie rozumiem po co śmieciłeś nowym.

Skoro nie potrafisz napisać podstawowego programu to zacznij od jakiejś książki albo od kursu z forum.

Bo z tamtego nic sie nie dowiedziałem, podłączyłem sharpa pod wejście ADC, jest to sharp analogowy, czy to co napisałem jest dobrze, i jak napisać to oczekiwanie na przeciwnika i w momencie pojawienia się żeby wystąpiło przerwanie?

Musisz sprawdzić jaki wynik odczytasz z ADC przy odległości jaka cię interesuje. Potem w pętli sprawdzasz czy wynik jest mniejszy i jeżeli jest to robot wykonuje akcję.

To wszystko.

Jak nie wiesz jak coś takiego napisać to może lepiej kup sobie jakiś termometr analogowy i spróbuj najpierw odczytać temperaturę ? Idea ta sama...

Ale po co mam kupować termometr skoro tutaj wygląda to bardzo podobnie 🙂 Proszę tylko o jakieś porady, może kawałki kodu jak takie coś zrobić

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...