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



Teraz jest 19 kwi 2024, o 01:24


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 1 sie 2013, o 17:51 
Offline
Użytkownik

Dołączył(a): 02 gru 2011
Posty: 87
Pomógł: 0

Witam właśnie jestem po obejrzeniu poradników ADC.

Napisałem program który (na początek ma za zadanie) pomierzyć jak najszybciej dwa kanały w których zmienia się napięcie stałe.

Mam nadzieje że mam dobra koncepcję:

W skrócie moje podejście do problemu:

1. Ustaw ADC (tryb pojedynczej konwersji, przerwanie od ADC, ustawienie wejść, prescalera, nap. rev itd)

2. Start ADC (kanał 1)

3. koniec konwersji -> przerwanie, zapisz wynik do zmiennej1 / sumuj następne wyniki, zlicz licznik próbkowania [50 pomiarów]

4. przełącz na kanał 2 -- > Start ADC (kanał2)

5. koniec konwersji -> przerwanie, zapisz wynik do zmiennej2 / sumuj następne wyniki, zlicz licznik próbkowania [50 pomiarów]

6. leć na początek Start ADC (kanał1) i tak 50 razy na przemian.


7. Gdy 50 pomiarów zrealizowane przejdź do funkcji obliczającej --> licz wartość średnią dla: kanał1, kanał2 (suma pomiarów ADC ze zmiennej * Vref) / (1024 *50 -- ilość pomiarów)

8. Wyświetl (na początek) wartość dziesiętne po uarcie.

----------------------------------------------------------------------------------------------

W czym mam problem sam nie wiem, napisałem sobie kod programu ale jak to początkujący pewnie zrobiłem jakiś głupi błąd i nie wiem gdzie.

Program po wgraniu (atmega 16) wyświetla:

Atmega16_nowa

Wartosc ADC1 = 0
Wartosc ADC2 = 0

... i nic się nie dzieje jak kręcę potkiem :/

Obrazek


Musze dodać, że poprzedni program, który pisałem (wg. poradników 3-4 ADC) działa mi prawidłowo.
(czyli płyta prototypowa, procek, zasilanie, konfiguracja przejściówki USB/rs232 idt jest ok)


Pozdrawiam i z góry dziękuje za naprowadzenie na dobra drogę.

Pozdrawiam

aothunterpl

poniżej przedstawiam opracowany kod kod:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.






Kod wklejamy przy pomocy syntax=c - Różowy J.

Ok dzięki źle mi się wstawiło ;]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sie 2013, o 19:33 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Twój program napotykając na pętle for będzie nie czekając na jakiekolwiek przerwania czy zakończenie konwersji rozpoczynał ją na nowo i przełączał kanał.
To raczej należy w funkcji ADC_init rozpocząć pierwszą konwersję i w przerwaniu przełączać kanał oraz po wykonaniu 100 pomiarów ustawić flagę/zmienną na 1, która poinformuje program główny, że można przejść dalej. Zamiast pętli for powinno być:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

PS.
Tak się nie wywołuje funkcji:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

tylko wystarczy sama nazwa z argumentem.
Nie potrzeba tak kombinować:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

należy zrobić tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

To źle zadziała:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sie 2013, o 00:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 gru 2012
Posty: 729
Lokalizacja: Białystok
Pomógł: 12

Co do przełączania kanałów to jakiś czas temu probowalem zrobic automatycznie zmienianie kanalow adc :D .
Polegało to na tym że : stworzylem tablice a w niej piny adc... tab(3) = { 1, 2, 3 }. Walnalem petle for(...) a w niej zmienna ktora sie dodawala. W Mirkowej bilbilotece jest funkcja pomiar(kanal). Dalem pomiar (kanal(tab[i]) ) w petli for. No i wynik dawalem do tablicy kolejnej choc moglem to inaczej zrobic. Powinno dzialac :). Moga byc male bledy bo pisze z pamieci ale mysle ze jakos Ci pomoglo ;)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sie 2013, o 22:41 
Offline
Użytkownik

Dołączył(a): 02 gru 2011
Posty: 87
Pomógł: 0

Witam dzięki za odpowiedzi no tak parę baboli narobiłem miałem trochu przerwy od C a teraz ostro do przodu jest motywacja trzeba prace mgr skończyć :)

Poprawiłem co nieco w chwili obecnej przygotowałem program wg wcześniejszych założeń realizujący pomiar na 2 kanałach a potem zwracający wartości uśrednione (bez przeliczenia na V) - bo jeszcze będą zaraz dalsze kombinacje.

Wersja 1 testowa programu, napisana bez obsługi przerwań, ale już działa prawidłowo.

- najważniejszy cel > naprzemienny pomiar z 2 kanałów (64 pomiary dla każdego) + wyliczenie średniej

Myślę, że spróbuje w miarę rozbudowy na przerwaniach + timery ewentualnie.

Proszę o sugestie co do optymalizacji kodu / lub innego podejścia do tematu tak aby pomiar nie mulił procka i był wykonywany bardzo szybko.

Poniżej działający kodzik:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Obrazek





Pozdrawiam.



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: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 7 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