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

Jak zaprojektować prosty kalkulator z funkcjami +, -, *, /, √?

greenboy 10 Gru 2004 19:55 1791 9
REKLAMA
  • #1 1050301
    greenboy
    Poziom 2  
    Posty: 3
    Witam wszystkich!

    Na wstępie chciałbym powiedzieć, iż jestem osobą totalnie nie znająca się na elektronice a poniższe pytanie zadaje celem poszerzenia horyzontów. Więc wybaczcie jeśli wystąpi błędne rozumowanie, złe nazewnictwo czy coś w ten deseń.

    Chciałbym się dowiedzieć jak zaprojektować kalkulator. Taki zwykły, bez dodatkowych funkcji, tylko +, -, /, * i ewentualnie pierwiastkowanie. Co jest potrzebne do konstrukcji? Jaki procesor, jaki lcd etc.

    Jeśli ktoś zechce się podzielić ze mną swoimi informacjami to z góry dziękuję!
  • REKLAMA
  • #2 1050314
    Xitami
    Poziom 29  
    Posty: 1130
    Pomógł: 118
    Ocena: 31
    Powiedz jeszcze czemu Cię to interesuje, serio, to ważne pytanie.
  • REKLAMA
  • #3 1050371
    greenboy
    Poziom 2  
    Posty: 3
    Moje zainteresowanie tym tematem bierze się z czystej ciekawości świata. Jakiś czas temu rozmawiałem z ciekawym człowiekiem, który w bardzo ciekawy sposób opowiadał mi o różnych elektronicznych urządzeniach. Takich, które ułatwiają czy może raczej urozmaicają człowiekowi życie takich właśnie jak kalkulator, termometr elektroniczny, urządzenie do sterowania światłem w domu etc. Niestety była to zupełnie przypadkowa znajomość i nie mam do niego żadnych namiarów, a tak to bym jego pomęczył :)
    Generalnie chciałbym spróbować zrozumieć jak działają niektóre rzeczy, jakie występują zależności. Jak próbowałem coś znaleść w necie to wszystko to dla mnie jest zbyt skomplikowane. Po prostu jestem laikiem w tym temacie i nawet nie mam podstaw. Studiuję zupełnie nie pokrewne rzeczy bo zarządzanie i marketing i tam wystarczy przeczytać książkę raz lub dwa i nie ma rzeczy niezrozumiałych :)
  • #4 1050490
    Xitami
    Poziom 29  
    Posty: 1130
    Pomógł: 118
    Ocena: 31
    Nie szukaj jakichś tam szczegółów. Poszukaj o maszynie Turinga i twirdzeniu Gudla (kto wie jak to się pisze?), a najlepiej, „Nowy umysł cesarza”, Penrosa chyba.
    A co do „podstawowego” pytania, JAK?
    Tysiąc dróg, procesor? Dowolny!, LCD? Wystarczy że będzie działał ;)
    Bardzo fajnym procesorem jest „Pentium” to które siedzi na drugim końcu Twojej klawiatury! Ktoś powie, „Pentium do kalkulatora?” i co z tego, no bo czemu nie?
    No bo jakie kryteria?
  • #5 1050511
    brzoskwin
    Poziom 15  
    Posty: 102
    Pomógł: 16
    Ocena: 7
    Pisze sie Gödla :D
    I twierdzenie Gödla:
    Jeżeli S jest zawierającym w sobie arytmetykę liczb naturalnych i S jest niesprzeczny (spójny), to S jest niezupełny, tzn. istnieją zdania w S, których prawdziwości nie da się udowodnić na podstawie przyjętych aksjomatów.

    II twierdzenie Gödla:
    Jeżeli S jest niesprzeczny, to niesprzeczność S jest niedowiedlna w S.
  • REKLAMA
  • #6 1050546
    Xitami
    Poziom 29  
    Posty: 1130
    Pomógł: 118
    Ocena: 31
    Dzięki Brzoskwin.
    Napisałem źle, a ktoś wiedział o czym piszę, fajnie.
    Twierdzenie wygląda „akademicko” i „uczenie” ale ma niesamowite konsekwencje.
  • #7 1050600
    greenboy
    Poziom 2  
    Posty: 3
    Herr Xitami, gratuluje poczucia humoru i oczywiscie dziękuję za niezwykle życiowe rady. Myślę jednak, że twierdzenia Gödla zostawię sobie na później. Myślałem raczej o małym kalkulatorze, więc pentium odpada....
  • REKLAMA
  • Pomocny post
    #8 1050789
    qmpel
    Poziom 16  
    Posty: 122
    Pomógł: 24
    Ocena: 6
    Hey !!

    hehe nieźle Panowie :)
    Co do kalkulatora to jakoś na pierwszy rzut, jako człowiek, który nie zna się w ogóle na elektronice, to dosyć zawiły problem, zacznij od jakichś dzwonków, alarmów, liczników itp. :)
    No ale poważnie, tak jak Xitami pisał jest duuużo dróg do zrealizowania tego tematu, od układów logicznych do procków (tych małych '51 i dużych P4). Za pomocą "czystej elektroniki scalakowej" dodawanie i odejmowanie da się zrealizować na sumatorach (nie pamietam na pamięć numerków), a liczby wpisywać poprzez licznik binarny. Z mnożeniem i dzieleniem jest trudniej, normalnie na kartce robi się to tak jak ze zwykłymi liczbami ale z realizacją elektroniczna (bez procka na scalaczkach) jest gorzej, no ale jak bardzo to tego nie napiszę, bo nie pamiętam i nie mam gdzie zajrzeć :)
    ...a tak w ogóle to nie mam sił pisać, bo mnie kaszel męczy :(

    Pozdrawiam !!
  • #9 1051861
    Xitami
    Poziom 29  
    Posty: 1130
    Pomógł: 118
    Ocena: 31
    No to szukasz tematu do kawiarnianej pogawędki, czy schematu i kodu?
    Procesorek taki powinien po pierwsze być w stanie sterować w sumie sporym wyświetlaczem, i myślę że to właśnie powinno decydować o wyborze, swój głos oddaję na „motylka” z Atmela.
  • Pomocny post
    #10 1053633
    Paweł Es.
    VIP Zasłużony dla elektroda
    Posty: 6981
    Pomógł: 1236
    Ocena: 693
    No to właściwie się każdy nada do tego celu.

    Najprościej jest zapisać liczby w układzie dziesiętnym: jedna komórka pamięci jedna cyfra. Dodatkowa komórka do pamiętania znaku i jeszcze jedna do pamiętania położenia przecinka. Muszą być takie dwa zestawy dla obu wprowadzanych liczb.

    Przed dodawaniem i odejmowaniem przesuwasz jedną liczbę tak by przecinki były w tym samym miejscu (odrzucasz te cyfry po przecinku, które wychodzą poza zakres). Można też liczyć z dokładnością o jeden większą niż jest to pokazywane na wyświetlaczu wtedy dodajemy na większej ilości cyfr po przecinku i zaokrąglamy ostatnią cyfrę.

    Mnożenie można realizować przez wielokrotne dodawanie. Aby zmniejszyć liczbę dodawań dokonujemy przesunięcia pozycyjnego mnożnej (podobnie jak przy mnożeniu na papierze). Czyli maksymalna ilość dodawań to 9*N gdzie N ilość pozycji mnożnika.

    Do następnych operacji używa się metody iteracyjnej Newtona-Raphsona na szukanie rozwiązania równania f(x)=0, gdzie kolejne przybliżenie dane jest wzorem

    x[i+1]=x[i]-f(x[i])/f'(x[i])

    gdzie f' pierwsza pochodna funkcji.

    Dzielenie polega na iteracyjnym przybliżaniu ułamka 1/x
    Zwykle pierwsze przybliżenie jest stablicowane (decydują np. dwie najstarsze cyfry x) dla zmniejszenia ilości iteracji.

    dzielenie przekształcamy do postaci iloczynowej

    a=y/x=y*1/x

    liczymy iteracyjnie 1/x i wynik mnożymy przez y.

    Pierwiastek liczymy iteracyjnie ze wzoru (metoda Newtona-Raphsona)


    $$y[n+1]=0.5*(\frac{a}{y[n]}+y[n])$$

    gdzie

    a - liczba pierwiastkowana
    y[n] - poprzednie przybliżenie
    y[n+1] - nowe przybliżenie

    Obliczenia prowadzimy do momentu gdy przestaną się zmieniać cyfry na założonej ilości miejsc po przecinku czyli ujmując to wzorem:

    |y[n+1]-y[n]|<eps

    gdzie
    | | - moduł liczby
    eps - założona dokładność np. 0.0000001

    Największym problemem jest znalezienie pierwszego przybliżenia (różne firmy robią to w różny sposób, metoda zależy także od sposobu reprezentacji wewnętrznej liczb w kalkulatorze).

    Można np. przedstawić liczbę w postaci

    x=x0*100^N czyli pierwiastek będzie √x=√x0*10^N

    1. Normalizujemy liczbę do znanego zakresu 0..1 (dzieląc wielokrotnie przez 100 i zliczając ilość podzieleń = N - robimy to przesuwając przecinek o 2N pozycji w lewo).

    2. liczymy pierwsze przybliżenie z przedziałowego równania liniowego (przybliżamy wykres funkcji pierwiastek w zakresie 0..1 linią łamaną) y0=a*x0+b,
    gdzie a,b współczynniki danego odcinka łamanej.

    3. stosujemy iteracje NR np. 4 krotnie (ilość zależy od jakości przybliżenia w punkcie 2).

    4. wynik pomnożyć n-krotnie przez 10 (przez przesunięcie przecinka).

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy projektowania prostego kalkulatora z podstawowymi funkcjami arytmetycznymi: dodawaniem, odejmowaniem, mnożeniem, dzieleniem oraz pierwiastkowaniem. Wskazano, że do konstrukcji potrzebny jest procesor zdolny do sterowania wyświetlaczem LCD, przy czym jako przykład polecono mikrokontroler Atmel (tzw. "motylek"). Omówiono również realizację operacji arytmetycznych na poziomie elektronicznym: dodawanie i odejmowanie można zrealizować za pomocą sumatorów i liczników binarnych, natomiast mnożenie przez wielokrotne dodawanie z przesunięciami pozycyjnymi. Dzielenie i pierwiastkowanie można wykonać metodą iteracyjną Newtona-Raphsona. Zwrócono uwagę na sposób reprezentacji liczb w pamięci – każda cyfra w osobnej komórce, z dodatkowymi komórkami na znak i pozycję przecinka. Dyskusja podkreśla, że wybór procesora zależy od wymagań dotyczących wyświetlacza i funkcjonalności, a do prostych kalkulatorów nadają się zarówno małe mikrokontrolery, jak i bardziej zaawansowane procesory. Wspomniano także, że realizacja kalkulatora bez procesora (na układach scalonych) jest możliwa, ale bardziej skomplikowana, zwłaszcza dla mnożenia i dzielenia.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA