Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 8 lut 2025, o 08:57


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 25 sty 2013, o 22:45 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

Mam problem z którym walczę już chwilę i nie mogę sobie poradzić. Chciałbym to skończyć i zająć się innym projektem ale coś mnie tu wodzi za nos. Zerknijcie proszę na poniższy kod i niech mi ktoś wyjaśni co jest nie tak.
Chciałbym dokonywać pomiaru przetwornikiem ADC na czterech kanałach po kolei. Usiłuję owe kanały przełączać cyklicznie, ale cały czas wynik dostaję tylko z jednego kanału (ostatniego 3). W momencie gdy na stałe wpiszę np:
Kod:
pomiar(2);
to jest ok czyli mam pomiar z kanału 3. Niestety gdy chcę to zmieniać w "trakcie" trwania programu to coś jest nie tak. Fragment kodu poniżej.
Kod:
/

int main (void)
{
   ADMUX |= (1<<REFS0);//napięcie odniesienia jako Vcc
   ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS2); //ADEN: ADC Enable (uruchomienie przetwornika)
   ADMUX |= (1<<ADLAR);//przesunięcie wyniku do lewej odczyt czyli 8 bitów

   while(1)
   {
      uint8_t kanal;
      pomiar(kanal);
      Wartosc_zmierzona = ADCH;// max 256 bitów
      USART_Transmit(Wartosc_zmierzona);
      _delay_ms(1000);
      kanal ++;
      if (kanal>3) kanal = 0;
   }
}

uint8_t pomiar (uint8_t kanal)
{
   ADMUX |= (ADMUX & 0xF8) | kanal;
   ADCSRA |= (1<<ADSC);//start konwersja
   while (ADCSRA & (1<<ADSC));
   return ADCH;
}

Co znowu spitoliłem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2013, o 23:38 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27354
Lokalizacja: Szczecin
Pomógł: 1042

hmmm już tyle razy o tym pisałem :( .... czy tak ciężko zaglądać tutaj ? :(

http://atnel.pl/uaktualnienia-programow-do-dvd.html

zobacz przecież masz wszystko opisane, a dokładniej mówiąc to na tym forum nawet - spójrz proszę:

post13633.html#p13633

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2013, o 23:52 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

Przepraszam, już zaglądam. Nie chciałem wyjść na lenia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2013, o 00:00 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27354
Lokalizacja: Szczecin
Pomógł: 1042

Tom277 napisał(a):
Przepraszam, już zaglądam. Nie chciałem wyjść na lenia.


Nie nie tak tego nie odbieram - to moja wina że wkradł mi się ten błąd do książki .... tylko szkoda mi że na tą stronę z aktualizacjami tak mało ludzi zagląda ....

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2013, o 00:24 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

Mirku na tej stronie jestem od niedawna i trochę jeszcze jestem zagubiony, może taka moja przypadłość, może nie wszytko jest takie oczywiste dla mnie. Jest takie stare porzekadło "że jeszcze się taki nie urodził który by wszystkim dogodził". Przeprosiłem bo zależy mi na tym żeby ktoś nie pomyślał, że jedyny wysiłek jaki włożyłem to zadanie pytania i teraz sobie wygodnie poczekam niech inni się wykażą. Dziękuję za naprowadzenie i cieszę się, że nie zostałem negatywnie odebrany.
Widząc jak ciężko idzie mi nauka programowania pocieszeniem są Ci na których można liczyć, którym się chce.
Pozdrawiam serdecznie wszystkich którym się chcę.
Tak na marginesie to strona twojego bloga nie jest dla mnie taka przejrzysta, nie wszystko jest łatwo znaleźć. To takie moje osobiste spostrzeżenie. Wcale nie musi być trafne.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2013, o 11:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

uint8_t kanal=0;

Wywal do main z tego while :) to będzie chyba działało...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2013, o 11:59 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27354
Lokalizacja: Szczecin
Pomógł: 1042

xbary napisał(a):
uint8_t kanal=0;

Wywal do main z tego while :) to będzie chyba działało...


xbary --> no to jest BARDZO NIESZCZĘŚLIWY pomysł :( ...... weź jednak sobie rzuć tutaj okiem

post13633.html#p13633

bo przecież MASZ WYRAŹNIE powiedziane w czym problem

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2013, o 12:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

No tak napisałem że chyba,
bo deklarowanie w pętli zmiennej i o wartości nie ustalonej też może mieć wpływ na to...

a ten chochlik książkowy jest mi znany :)


właśnie sprawdziłem pętle co napisał Tom277 i indeksuje dobrze zmienną kanal... widocznie przydała się tu nadgorliwość kompilatora :) czyli można i tak i tak.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2013, o 12:27 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27354
Lokalizacja: Szczecin
Pomógł: 1042

xbary napisał(a):
No tak napisałem że chyba,
bo deklarowanie w pętli zmiennej i o wartości nie ustalonej też może mieć wpływ na to...

No tak - tu MASZ RACJĘ - nie zwróciłem na to uwagi ;)

xbary napisał(a):
właśnie sprawdziłem pętle co napisał Tom277 i indeksuje dobrze zmienną kanal... widocznie przydała się tu nadgorliwość kompilatora :) czyli można i tak i tak.


nie nie - to nie nadgorliwość kompilatora - tylko - tak jak pisałeś wyżej - za pierwszym lub jakąś tam ilością pierwszych pomiarów zmienna kanał teoretycznie mogłaby mieć jakąś nieokreśloną (za dużą wartość) wartość, więc i wynik pierwszego pomiaru może być zły - tyle że pętla leci i kolejne pomiary gdy kanał wpadnie w swoje granice sterowane IF'em poniżej to zacznie być dalej ok

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2013, o 18:16 
Offline
Użytkownik

Dołączył(a): 08 wrz 2012
Posty: 505
Pomógł: 6

Drobne zmiana
Kod:
ADMUX |= (ADMUX & 0xF8) | kanal;
na
Kod:
ADMUX = (ADMUX & 0xF8) | kanal;
po naprowadzeniu przez Mirka rozwiązuje problem. Co do zmiennej o nieustalonej wartości to faktycznie po jednym przebiegu wszystko się stabilizuję, to akurat wiedziałem :) .



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO