all4you Napisano Sierpień 21, 2011 Udostępnij Napisano Sierpień 21, 2011 Witam Dopiero zaczynam przygodę z mikokontrolerami, zakupiłem ZL9ARM + LPC2138, w przykładowym programie mogę zmierzyć napięcie za pomocą ADC i wyswietlić go na LCD, natomiast mam pytanie jak zmierzyć 2-ie wartości napięcia jednocześnie, np.drugie napięcie na porcie 0.29 Mam taki kod do pomiaru pojedynczego napięcia int main (void) { unsigned int val; PINSEL1 &= !(BIT26 | BIT27 | BIT28 | BIT29); PINSEL1 |= BIT24; // P0.28 = AD0.1 AD0CR = 0x002E0402; // AC: 10 bit AD0.1 @ 3MHz LCD_init(); while (1) { AD0CR |= 0x01000000; // start konwersji AC do { val = AD0DR; // odczytaj wynik konwersji } while ((val & 0x80000000) == 0); // czekaj na koniec konwersji AC AD0CR &= ~0x01000000; // koniec konwersji AC val = (val >> 6) & 0x03FF; LCDTextXY(0,1, "AIN0 = 0x"); LCD_Hex((val >> 8) & 0x0F); // 1 cyfra LCD_Hex((val >> 4) & 0x0F); // 2 cyfra LCD_Hex(val & 0x0F); // 3 cyfra } }
MirekCz Sierpień 21, 2011 Udostępnij Sierpień 21, 2011 Nie znam tego procesora, ale wiele ARMów ma 2 ADC. Jak tak to musisz jednocześnie odpalić AD0 i AD1 (najlepiej z pomocą jakiegoś przerwania/timera).
lukpep Sierpień 21, 2011 Udostępnij Sierpień 21, 2011 jak bardzo "jednoczesnie" ADC jest wielokanalowy wiec jezeli roznica w czasie pomiaru rzedu kilkunastu-kilkudziesieciu ns Cie satysfakcjonuje to nie ma problemu Jezeli faktycznie rownoczesnie to 2 ADC konieczne.
MirekCz Sierpień 21, 2011 Udostępnij Sierpień 21, 2011 Wybacz, ale który ADC w mikrokontrolerze zrobi pomiar w kilkadziesiąt ns? Standardowo najszybsze jakie znam robią pomiary z prędkością 1MHz, czyli 1000ns=1us...
all4you Sierpień 22, 2011 Autor tematu Udostępnij Sierpień 22, 2011 nie chodizło mi o dosłownie "równocześnie 2 napięcia" rozumiem że musi być jakaś różnica czasowa, chodzi mi o to jak w kodzie włączyć np 2 kanał na porcie 0.29
MirekCz Sierpień 22, 2011 Udostępnij Sierpień 22, 2011 Tak jak pisałem jak masz w mikrokontrolerze 2 ADC to nie musi być różnicy czasowej. Nie znam tego mikrokontrolera, ale z tego co widzę to w rejestrze AD0CR ustawiasz który kanał ma być kanałem wejściowym ( AD0CR = 0x002E0402; // AC: 10 bit AD0.1 @ 3MHz ). Zmień odpowiednio rejestr AD0CR i wywołaj kolejną konwersję (patrz dokumentacja).
all4you Sierpień 22, 2011 Autor tematu Udostępnij Sierpień 22, 2011 ok poszukam, jeszcze jedno pytanie, o co chodzi w linijkach PINSEL1 &= !(BIT26 | BIT27 | BIT28 | BIT29); PINSEL1 |= BIT24; // P0.28 = AD0.1 nie bardzo to rozumiem
MirekCz Sierpień 22, 2011 Udostępnij Sierpień 22, 2011 Ustawiasz bity 26/27/28/29 na zero a bit24 na 1 nie zmieniając ustawienia innych bitów w pinsel1. Prawdopodobnie ustawiasz które piny to wejście, a który to wyjście (strzelam, tak jak mówiłem nie znam mikrokontrolera, ale nazwa PINSEL1 na tego typu rzecz jest trochę dziwna).
sailo Sierpień 22, 2011 Udostępnij Sierpień 22, 2011 Rejestr PINSEL służy do wyboru alternatywnych funkcji portu. Taką jest właśnie wejście ADC. PINSEL0 to młodsza cześć, PINSEL1 starsza. PINSEL1 |= BIT24; // P0.28 = AD0.1 Oznacza podłączenie wejścia ADC 0.1 do pinu P0.28. Jeśli chcesz używać drugiego kanału, musisz przede wszystkim najpierw podłączyć go do danego pinu. PINSEL1 |= BIT26; // P0.29 = AD0.2
all4you Sierpień 22, 2011 Autor tematu Udostępnij Sierpień 22, 2011 czyli rozumiem, żeby teraz zmierzyć "coś" na porcie 0.29 muszę PINSEL1 &= !(BIT24 | BIT25 | BIT28 | BIT29); PINSEL1 |= BIT26; // P0.29 = AD0.1 natomiast AD0CR = 0x002E0402; // AC: 10 bit AD0.1 @ 3MHz i reszta kodu pozostaje bez zmian? [ Dodano: 23-08-2011, 10:37 ] mam włączyłem AD1CR PINSEL0 |= (BIT16 | BIT17); // P0.8 = AD1.1 PINSEL1 |= BIT24; // P0.28 = AD0.1 AD0CR = 0x002E0402; // AC: 10 bit AD0.1 @ 3MHz AD1CR = 0x002E0402; // AC: 10 bit AD1.1 @ 3MHz takie niby nic, a jednak dla początkującego to 2 dni szukania wielkie dzięki za pomoc
Pomocna odpowiedź
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ę »