Skocz do zawartości

[KEIL] [LPC2138] Jak mierzyć 2 napięcia jednocześnie?


all4you

Pomocna odpowiedź

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

}
}
Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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).

Link do komentarza
Share on other sites

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).

Link do komentarza
Share on other sites

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 
Link do komentarza
Share on other sites

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 🙂

Link do komentarza
Share on other sites

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.