Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[BASCOM] Pierwiastkowanie na ATtiny2313

28 Maj 2011 15:08 1822 6
  • 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 ;)
  • Moderator na urlopie...
    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
  • 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: basic4gl
    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ę?
  • Poziom 19  
    Możesz wykorzystać metodę Babilońską

    Tutaj masz przykład w C:
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • 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 :(
  • 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: basic4gl
    Zaloguj się, aby zobaczyć kod