logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Co zawierają stałe A0, A1, A2? Piny analogowe jako tablica.

strikexp 15 Sty 2016 21:09 1500 11
REKLAMA
  • #1 15338194
    strikexp
    Poziom 27  
    Posty: 2379
    Pomógł: 101
    Ocena: 103
    Potrzebuję użyć tablicy z której po indeksie będę sobie wybierał konkretny pin analogowy w Arduino.
    Przykład:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Co zawierają stałe A0, A1,A2 itp ? Bo coś mi nie wychodzi.
  • REKLAMA
  • #2 15338350
    Konto nie istnieje
    Konto nie istnieje  
  • #3 15338382
    strikexp
    Poziom 27  
    Posty: 2379
    Pomógł: 101
    Ocena: 103
    Chcę sobie jedynie wybrać z tablicy odpowiedni pin zamiast robić jakieś duże instrukcje IF.

    Normalnie odwołuje sie do pinów analogowych właśnie przez "A0" itp. Ale doczytałem i już wiem że instrukcja analogRead przyjmuje jako argument ( a nie parametr, sorki) liczbę 1 bitową, z numerem portu analogowego.
    Czyli to co podałem w przykładzie będzie działać prawidłowo.
  • #4 15338622
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #5 15338675
    strikexp
    Poziom 27  
    Posty: 2379
    Pomógł: 101
    Ocena: 103
    Przecież w dziale Arduino napisałem :D Trzeba dokładniej czytać hehe
  • #6 15357072
    markolsrz
    Poziom 12  
    Posty: 40
    Pomógł: 3
    Ocena: 4
    To są wartości całkowite i można je dokładnie tak samo używać.
    Możesz zwyczajnie wpisać A0,A1... do swojej tablicy.
    Masz tu przykład:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    oczywiście uint8_t to to samo co byte
    Należy tylko pamiętać, że dla poszczególnych modeli Arduino wartości ukryte pod poszczególnymi oznaczeniami mogą być różne.
  • #7 15357225
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #8 15357996
    markolsrz
    Poziom 12  
    Posty: 40
    Pomógł: 3
    Ocena: 4
    Przerobiłem program tak by dokonywał po 3 kolejne pomiary na tym samym pinie i jakoś nie widzę różnic większych niż 2 między wynikami (a i taka jest rzadka).
    To jest wielkość dopuszczalna (według dokumentacji ATmegi328).
    Pierwszy pomiar nie odstaje od pozostałych.
    Rozdział 24.5 dokumentacji ATmegi328, odnoszący się do tego problemu, stwierdza, że błąd pojawi się w pierwszym pomiarze po zmianie napięcia odniesienia VREF.
    Po zmianie wejścia nie ma takiego problemu.
    To jest inny parametr, choć ustawiany w tym samym rejestrze.
  • REKLAMA
  • Pomocny post
    #9 15358709
    Konto nie istnieje
    Konto nie istnieje  
  • #10 15369289
    markolsrz
    Poziom 12  
    Posty: 40
    Pomógł: 3
    Ocena: 4
    W dokumencie AVR126 z twojego linku jest szereg zaleceń mających poprawić dokładność wyniku.
    To o czym piszesz (odrzucenie pierwszego wyniku po zmianie konfiguracji ADC) jest na pozycji trzeciej od końca.
    Znacznie poniżej np. przestawienia układu w tryb "ADC Noise Reduction", czego analogRead nie robi.
    Do dokumentacji ATmegi328 przepisali tylko informację o zmianie ustawienia VREF, pewnie ze względu na możliwość dołączenia stabilizującego kondensatora który trzeba naładować/rozładować.
    Przy taktowaniu z jakim pracuje przetwornik ADC w typowym Arduino opartym na ATmedze328 (system 8 lub 16MHz, przetwornik 125kHz) błąd nie jest widoczny w wynikach.
    A jak ktoś obawia się, że błąd będzie dla niego zbyt duży, to może powtórzyć pomiar.
    Nie pisz więc że wynik będzie zły tylko dlatego, że nie spełniono któregoś z zaleceń dotyczących poprawy dokładności.
  • #11 15369347
    Konto nie istnieje
    Konto nie istnieje  
  • #12 15374713
    markolsrz
    Poziom 12  
    Posty: 40
    Pomógł: 3
    Ocena: 4
    Jeżeli podłączysz tak niewydolne źródło sygnału to sensowność jakiegokolwiek pojedynczego pomiaru jest wątpliwa, bo przetwornik ADC będzie długo reagował na każdą zmianę sygnału, a nie tylko na samo przełączenie (ładowanie wspomnianych 14pF w przetworniku (nie na pinie) i pojemności pasożytniczych przez opory obwodu wejściowego).
    Stąd zalecenie by impedancja źródła nie przekraczała 10kΩ.
    Zalecają też dodać kondensator między pinem a masą (analogRead z bibliotek Arduino mierzy tylko napięcie bezwzględne, bez wzmocnienia nawet w tych modelach gdzie ADC może więcej (stan na 2016-01-27)).
    Nieodpowiedni obwód wejściowy może zrujnować każdy pomiar.

    Ja swoje testy robiłem na Arduino Nano i źródle mającym impedancję przekraczającą 20kΩ, przełączenie wywoływało pomijalne błędy.

    Jakie było twoje źródło sygnału?
    Z czego wynikają te okresy bez zmian?
    Po przełączeniu masz spadek o 24, 4 jednakowe wyniki, spadek o 25 i znów 2 jednakowe.

Podsumowanie tematu

✨ W dyskusji poruszono temat użycia stałych A0, A1, A2 w kontekście odczytu wartości z pinów analogowych w Arduino. Użytkownik chciał stworzyć tablicę pinów, aby uprościć kod, unikając złożonych instrukcji warunkowych. Odpowiedzi wskazują, że stałe A0, A1, A2 są wartościami całkowitymi, które można używać w tablicach. Podkreślono, że przy pomiarach analogowych ważne jest, aby nie polegać na pierwszym pomiarze po zmianie pinu, ponieważ może on być niedokładny. Wskazano również na znaczenie impedancji źródła sygnału oraz zalecenia dotyczące poprawy dokładności pomiarów ADC.
Wygenerowane przez model językowy.
REKLAMA