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

[BASCOM] Pierwiastkowanie na ATtiny2313

nunch 28 Maj 2011 15:08 2053 6
REKLAMA
  • #1 9552897
    nunch
    Poziom 12  
    Przeprowadzam doświadczenie wynaczenia przyśpieszenia Ziemskiego za pomocą wahadła.

    Moja koncepcja wygląda następująca:
    Zawieszam wahadło o dlugości l = ok.20cm
    W tle widnieje wyświetlacz LCD 16x2, na którym pojawi się stoper liczący czas 10 pełnych wychyleń.
    Wychylenie będzie zliczone poprzez naciśnięcie przycisku. Po 10 naciśnięciu stoper automatycznie się zatrzyma,a procesor obliczy dane w następujący sposób, aby pasowały do wzoru:

    G = 4ρ²*√l/T²


    1) T = naciśnięcia / zatrzymany czas(+ od razu wynik podniesiemy do kwadratu)
    2) Wymnożyć to co jest przed pierwiastkiem,a później przemnożyć przez to co jest pod pierwiastkiem.
    3) Wynik zostaje wyświetlony na LCD

    Tylko cały problem polega na tym,że nie wiem jak spierwiastkować wynik.
    W innych językach służy do tego polecenie SQRT(x),ale tutaj nie działa. Czy w bascomie jest to w ogóle możliwe?
    Opisałem szczegółowo plan, bo być może ktoś będzie miał inny dobry pomysł.
    Pozdrawiam ;)
  • REKLAMA
  • #2 9552968
    piotrva
    VIP Zasłużony dla elektroda
    1. nie rozumiem planu, chcesz po prostu zrobić stoper liczący czas n amplitud? przycisk ma być naciskany ręcznie?
    2. w bascomie jest przecież funkcja sqr(), nie wiem w czym problem
    3. temat do poprawki - brak uwzględniania języka
  • REKLAMA
  • #3 9553032
    nunch
    Poziom 12  
    Ad.1 - Tak. Coś w tym stylu.
    Ad.2 - Fakt, pomyliłem sqr z sqrt,ale i tak nie działa. Przy kompilacji "Flash used" jest 125%. Czy w ogóle na ATtiny2313 da się wykonać takie obliczenie?

    Wklejam przykładowy kod(ten od 125%):
    Kod: text
    Zaloguj się, aby zobaczyć kod


    EDIT:
    Kolega podał mi zły wzór, bo w rzeczywistości nie występuje tam pierwiastkowanie,ale ciekaw jestem na przyszłość jak wykonywać takie operacje z pierwiastkowaniem, bo przyda mi się to przy pisaniu innych programów do obliczania

    Zauważyłem,że taki skok zużycia pamięci następuje przy LCD M czyli jej wyświetleniu,ale dlaczego skoro wynik zawiera tylko jedną cyfrę?
  • #4 9553168
    piotrva
    VIP Zasłużony dla elektroda
    bo następuje wtedy konwersja liczby double na ciąg znaków :D Uroki bascom'a
  • REKLAMA
  • #5 9553402
    Przemo1268
    Poziom 20  
    Możesz wykorzystać metodę Babilońską

    Tutaj masz przykład w C:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #6 9553430
    mirekk36
    Poziom 42  
    nunch napisał:
    Przy kompilacji "Flash used" jest 125%. Czy w ogóle na ATtiny2313 da się wykonać takie obliczenie?


    No i prawidłowe zużycie FLASH ;)

    Postaw sobie pytanie inaczej - czy w ogóle jest sens na na takich operacji na tak małych mikrokontrolerach ? Czy w ogóle jest sens to robić w Bascomie ?

    Jak chcesz dużo takich obliczeń i w Bascomie to zacznij od procka typu ATmega128 - może wtedy starczy ci pamięci FLASH :(
  • #7 9554819
    nunch
    Poziom 12  
    Racja. Do tego typu obliczeń są potrzebne większe procki.

    Wracając do tematu licznika.

    Stworzyłem już kod, który odlicza czas i zlicza naciśnięcia(maksymalne wychylenia). Nie mogę dojść do sposobu jakim mam obliczyć resztę.
    Nadal ufam,że jeszcze na ATtiny uda mi się to zrobić :)

    Wzór G = k * l/T^2

    gdzie k tam stały współczynnik 39,44
    l - długość, zakładam 0,2m
    Okres wyliczamy z czasu podzielonego przez 10,a następnie podniesionego do kwadratu tylko ja zrobiłem stoper na takiej zasadzie,że zmienna Sek przechowuje liczbe sekund a zmienna 100ms części dziesiętne sekundy.

    Zastanawiałem się jak połączyć te 2 stringi na zasadzie Sek.100ms.
    W PHP tak się robiło,ale tutaj w ogóle jest możliwe coś takiego?
    No albo zrobić jedną zmienną przechowującą sekundy i co 100ms dodawać do niej po 0,1 ?

    Nie zostało mi już wiele do końca,ale jednak tutaj zaczęły się największe schody. Proszę o pomoc, jakieś uwagi..

    KOD:
    Kod: text
    Zaloguj się, aby zobaczyć kod
REKLAMA