Witam,
No to zapinamy pasy bezpieczeństwa i jedziemy dalej Panie i Panowie z przetwornikami ADC. Dzisiaj szef kuchni poleca dwa dania dnia: "Free Running Mode - Soute", oraz lekko grilowany zewnętrzny przetwornik 18-bitowy (czyli potwór rozmiarów pikusia) MCP3421 ;) ale za to bardzo smaczny ;) Będzie się działo. Niestety poradnik to godzina i 40 minut ... więc tylko dla widzów o mocnych nerwach. Ale myślę, że śmiało mogę polecić. To będzie już przedostatnia część. I mam nadzieję, że sporo nowych rzeczy się wyjaśni. Nie obędzie się bez drobniejszych gaf z mojej strony - boć to wszystko na żywca leci, a nawet jednej dużej gafy - no ale jakoś udało mi się z niej wybrnąć na koniec i mam nadzieję bez uszczerbku dla widza. Nie przedłużam już, jak zwykle zapraszam na materiał HD, na moim kanale www.youtube.com/mirekk36
Oczywiście poniżej kod źródłowy do całego ćwiczenia, który można pobrać:
;)
Nie jestem malkontentem tylko mowie że, pod koniec 23 minuty połączone są scieżki z dwóch kamer i mowa szanownego Mirka jest "niewygodna" ale to tylko to chcialem powiedzieć i bardzo podziękować z ten poradnik jak zwykle sie przyda :) dziekujemy Panie Mirku
OdpowiedzUsuńO żesz kurka wodna :( sorki ... przepraszam .... że też tego nie zauważyłem. Babol przy montażu. Ale chyba w miarę słychać w tym fragmencie (ujęciu) głos wyraźnie prawda ? czy od nowa renderować całość ?
UsuńBardzo dziękuję za tą uwagę ... tylko strasznie ciężko teraz to poprawić ot tak sobie.
Panie Mirku, nie ma sie co przejmować dobrze jest :) trzeba tylko nie co sluchawki wyciszyć zeby tylko jeden głos było słychac :) BezNerwów :)
UsuńNie , no zdenerwowany to jestem na siebie, że to mi umknęło ... eeeeeeś ;)kurka wodna
UsuńBabole się zdarzają każdemu, kto nie pracuje ten nie popełnia błędów :) najgorzej teraz to naprawić pewnie pliki ważą niemało. DLA MNIE I TAK SUPER :*
UsuńPanie Mirku ogladam film i pisze do pana na gorąco :) niech Pan sie nie przejmuje ale od minuty okolo 00:23:45 nie włączyła nam Pan widoku z monitora, i mowiąc nie wiem co sobie Pan tam na nim skrobie :)
OdpowiedzUsuńNo no - całe ujęcie jedno jest skopane - pisałem wyżej - sorki. :(
UsuńA ja mam takie pytanie. Czy zmiana preskalera przetwornika ADC ma wpływ na częstotliwość występowania przerwania od ADC w trybie Free Running Mode?
OdpowiedzUsuńNo to chyba oczywiste, im wyższa częstotliwość i im krótszy czas konwersji tym szybciej będą się dokonywać pomiary ....
UsuńAle dlatego tym bardziej warto się zastanowić 10x zanim się podejmie decyzje o korzystaniu w ogóle z trybu FreeRuning bo można sobie "przedobrzyć"
Nie zauważyłem na filmiku wpisu "ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // preskaler" i stąd miałem wątpliwość. Teraz o Free Running Mode wiem już chyba wszystko co trzeba.
UsuńDziękuję i pozdrawiam
A jeszcze zapytam gdzie i za ile można nabyć MCP3421 ?
UsuńPanie Mirku,
OdpowiedzUsuńMam ogromną prośbę do Pana na poradniku nie widać jak korzystać z I2C. Może w nastepnym odcinku przypomniałby Pan jeszcze raz jak Pan z tego korzysta, jak podłączać sie do tej szyny i "adresować" itd. itp.
Ale jak mówiłem i zawsze powtarzam, to są poradniki do książek. I akurat WSZYSTKO na ten temat można znaleźć właśnie w książce:
Usuń"Mikrokontrolery AVR Język C Podstawy programowania"
http://atnel.pl/mikrokontrolery-avr-jezyk-c.html
tutaj za dużo miejsca zajęłoby mi od nowa omawianie wszystkiego na temat I2C :( przykro mi
a ja chyba w tme.pl kupiłem ;)
UsuńWitam,
OdpowiedzUsuń"Ustawimy sobie to razem na wizji" 00:27:30 a zaczyna się wcześniej z 2 minuty i aż do 33 minuty nie ma obrazu a w zasadzie to właściwego obrazu tylko zdjęcie z tła to między innymi ten fragment z podwójnym dźwiękiem, tłumaczysz a nie widać co.
Pozdrawiam
O KURKA wodna - już wcześniej ktoś mi mówił że tam coś nie tak z dźwiękiem ale jest jeszcze gorzej :( Okazało się, że włączył się widok na cały ekran nie z tej kamery co trzeba bo ja w międzyczasie sporo pokazuję na ekranie i tak jak piszesz nie widać tego :(
UsuńCałego filmu już nie poprawię ale na szczęście dopadłem CAŁY ten uszkodzony fragment i go zrenderowałem ponownie. Można już go obejrzeć na youtube.
http://www.youtube.com/watch?v=L2Cp_7QohkI
A w miejscu uszkodzonego jest INFORMACJA i link do POPRAWKI.
BARDZO DZIĘKUJĘ za to zgłoszenie. No i przepraszam za kłopt.
Chciałbym zapytać czy jedną z końcówek kondensatorów filtrujących części dotyczącej samego przetwornika ADC w atmega (np. od AREF, AVCC, filtrowania napięcia VCC z dławikiem), lepiej podłączyć do masy cyfrowej GND czy do masy analogowej AGND? Masę analogową prowadzę osobno od nóżki procesora do punktu GND stabilizatora napięcia, gdzie spotyka się dopiero z masą cyfrową.
OdpowiedzUsuńZDECYDOWANIE jeśli już jest prowadzona masa analogowa to wiadomo że kondki filtrujące też do tej masy analogowej a nie cyfrowej
UsuńDziękuję za szybką odpowiedź:-)
OdpowiedzUsuńCzy można wykonywać pomiar wartości ADC z kilku kanałów ale w trybie pracy przetwornika "na żądanie"? W poradniku omówił Pan taką możliwość ale w trybie "Free runing mode" z użyciem przerwania od ADC. W procedurze obsługi tego przerwania realizowana jest zmiana kanału. A tak bez przerwań w trybie na żądanie da się?
OdpowiedzUsuńA jak myśli kolega po co jest funkcja pomiar( kanał ) ???
Usuńno już tego wydawało mi się, że nie trzeba wyjaśniać ;) ... no jakby nie można było na żądanie mierzyć z dowolnej ilości kanałów. Poza tym pokazuję to przecież dokładnie w kodzie
Nie no wiem, że jest funkcja pomiar (kanal). Z tym, że zastanawiam się jak jej użyć do tego celu. To znaczy trzeba ją po prostu wywołać jedna po drugiej zmieniając tylko nr kanalu w funkcji? Np. coś takiego po uprzedniej inicjalizacji ADC (używam atmegi16):
OdpowiedzUsuńuint16_t wynik1 = pomiar(PA0);
uint16_t wynik2 = pomiar(PA1);
.......
i wyświetlenie samej wartości ADC bez szczególnego formatowania:
uart_putint(wynik1,10);
uart_putint(wynik2,10);
Czy w ogólnym zarysie to wystarczy? Czy musi być jakiś _delay między kolejnymi wywołaniami funkcji pomiar?
No jeszcze raz powiem ;) a jakże miałoby być inaczej niż tak jak napisałeś wyżej i niż tak jak ja to pokazuję w poradniku, zresztą nie tylko ja - wszędzie w internecie masz podobnie to pokazane.
UsuńDelaye pomiędzy pomiarami ? a po co ? coś kolega nie zrozumiał do końca jak działa ta funkcja w środku ... no przecież tam jest pętla oczekująca na dokonanie pomiaru więc po co jakieś delaye ? one mogą być ale to już z innych powodów - zależnych od potrzeb projektu ale nie z powodu ADC
Proszę mi dać wiarę, że wiem jak działa funkcja pomiar. jest tam warunek na zakończenie pomiaru. Z tym, że jeżeli nie stosuję _delay między kolejnymi wywołaniami funkcji z poszczególnymi kanałami (np. dwoma PA0 i PA1) to na terminalu widzę dwie jednakowe wartości ADC. PA0 mam podłączone do GND a PA1 do VCC. Wtedy widzę w terminalu
OdpowiedzUsuń1023 1023
a czasami wpada wartość dla GND:
0 0
Jeżeli oddzielę te funkcje delayem np 200us to wtedy w terminalu widzę wartości prawidłowe ale w nie zrozumiałej dla mnie kolejności. Tam gdzie powinno być GND dla PA0 widzę wartość 1023 dla Vcc a w drugiej kolumnie dla PA1 widzę wartość 0 co odpowiadać powinno GND.Zapewniam, że do procka poszczególne kanały są odpowiednio podłączone jeżeli chodzi o podanie napięcia VCC czy GND. Poniżej kod w głównej pętli while do powyższego opisu.
while(1){
wynik1 = ADC_Pomiar(PA0);
//_delay_us(200); //delay o którym mowa
wynik2 = ADC_Pomiar(PA1);
tr_cls(1);
tr_locate(2,2);
tr_attr( BOLD, YELLOW, BLACK );
uart_putint(wynik1,10);
tr_locate(2,20);
tr_attr( BOLD, CYAN, BLACK );
uart_putint(wynik2,10);
_delay_ms(200);
}
Funkcja pomiar(kanal) wygląda taK:
uint16_t ADC_Pomiar(uint8_t kanal){
ADMUX = (ADMUX & 0xF8) | kanal;
ADCSRA |= (1<<ADSC);
//oczekiwanie na koniec pomiaru i wynik w postaci 16 bitowej
while( !(ADCSRA & (1<<ADSC)) );
return ADCW;
Wszystko już gra. Doszedłem. Błąd był właśnie w warunku oczekiwania na zakończenie pomiaru w funkcji pomiar(kanal).
OdpowiedzUsuńZamiast
while( !(ADCSRA & (1<<ADSC)) );
powinno być
while( ADCSRA & (1<<ADSC) );
Dziękuję i pozdrawiam
No tak powinno być:
Usuńwhile( ADCSRA & (1<<ADSC) );
;) dokładnie tak jest w kodzie z poradnika
Zgadza się Panie Mirku:) Tak jest w kodzie. Powiem Panu, że obserwuję forum i jego użytkowników. Widzę ich stopień zaawansowania w programowaniu AVR w C i jestem pod wrażeniem tej wiedzy. Zdaję sobie sprawę, że moje pytania mogą wydawać się śmieszne bo to sama esencja programowania. Jestem początkującym pasjonatem mikrokontrolerów i zdaję sobie sprawę jak wiele muszę się jeszcze nauczyć. Zaczynam również dostrzegać plusy używania języka C. Wcześniej próbowałem programować w Bascomie jednakże przestałem ponieważ faktycznie choćby organizacja kodu jest nieporównywalnie lepsza w C nie mówiąc o uniwersalności podejścia do problemu. Pomimo, że to co teraz próbuję robić to podstawy i elementarz, to jednak czuje się taką satysfakcję jeżeli samemu rozwiąże się nawet taki błachy problem:)). Jeszcze raz słowa uznania dla Pańskiego wkładu w przekazywanie wiedzy z tego zakresu, zarówno na forum, blogu czy w poradnikach. To niespotykane.
UsuńPozdrawiam,
while brutalnie blokuje nam program dopoki nie skonczy pomiaru, ja zamiast tego uzywam ifa, w elsie mam pomiarowanie, if pusty.
UsuńA można wiedzieć kiedy ukaże się ostatnia część ?? Bo na blogu nie mogę znaleźć ..:(
OdpowiedzUsuńWitam,
OdpowiedzUsuńCzy pojawi się jeszcze przetwornik MCP3421 w sklepie ATNEL? Bo wiem, że wcześniej był a od jakiegoś czasu już go nie widzę w ofercie.
Pozdrawiam
Witam, zauważyłem drobny błąd w filmiku 1:23:08 W niebieskiej tabelce pisze Pan, że do tego makra:
OdpowiedzUsuńATOMIC_BLOCK(ATOMIC_RESTORESTATE){
tmp_wynik = wynik;
}
Potrzebne jest załączenie takiej biblioteki jednak nie mogłem jej znaleźć
#include \avr/atomic.h/
Poszperałem w googlach i znalazłem że plik nagłówkowy atomic.h znajduje się w innym folderze.
#include \util/atomic.h/
Nic wielkiego ale pomyślałem że może komuś się to przyda. A tak przy okazji to świetne poradniki wiele można się z nich nauczyć a i też czasem pośmiać i przez to że nie jest tak sztywno to i chce się je oglądać :)
Pozdrawiam
PS Zamiast nawiasów kwadratowych musiałem użyć \ / bo nie chciało pokazywać zawartości nawiasów :)