www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Grundsätzliche Frage zum Rechnen in avrasm


Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Gibt es nicht einen ic der ausschliesslich rechnet also im Prinzip ein 
Tachenrechner-Modul? 8 oder 16 bit Zahl rein , Funktion wählen (auch die 
"luxuriösen Dinge wie Arkustangens o.ä.) und dann als 8 oder 16 bit zahl 
wieder raus. Womöglich sogar mehrere Rechenoperationen hintereinander 
und dann erst die Ausgabe?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Attila schrieb:
> Gibt es nicht einen ic der ausschliesslich rechnet also
> im Prinzip ein Tachenrechner-Modul
Ja, ein Taschenrechnermodul

Attila schrieb:
> 8 oder 16 bit Zahl rein
Wie soll den die 8 oder 16 bit Zahl "rein"?

Attila schrieb:
> Funktion wählen
Wer oder was wählt den da wie die Funktion? Zufall?

Attila schrieb:
> 8 oder 16 bit zahl
> wieder raus
Bei diesem Wetter jagt man ja nichtmal den Hund vor die Tür, und warum 
sollen die armen 8 oder 16 bit Zahlen dann raus und wohin genau 
eigentlich?

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meinst du

a) eine ALU :
http://www.wazimmer.de/infogk12_material-Dateien/M...
kann aber nur Addieren, Subtrahieren und logische Operationen.

b) µC
kan man frei programmieren.

c) FPGA
auch programmierbar, aber schneller.

Volker

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Läubi!

Also hier in Namibia ist das Wetter wunderbar und die Hunde draussen ;-)

Ein aus der Luft gegriffenes Beispiel:

sin45 mal 120 = 85 (gerundet)

Ich stelle mir das dann so vor:

-Die Zahl 45 als 8 bit and den Port legen
-Die Rechenoperation wählen, so wie man Buchstaben bei einem Display 
wählt. (00000001 könnte z.B. für + stehen usw) hier: sinus

-beliebig viele weitere Rechenvorgänge durchführen (hier: mal 120)
- dann das Ergebnis (85) am Port wieder einlesen.

Ist das zu naiv gedacht? Oder gibt es so ein modul?

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Volker: Danke! Sehr interessant!

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Und was hat das Ganze mit AVRASM zu tun?

MfG Spess

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt Mathematische Coprozessoren und Gleitkommaeinheiten, die das 
können.

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Spess: Ich habe mir im Forum das Thema sinus und cosinus angesehen und 
den Eindruck bekommen, korrigiere mich bitte falls ich falsch liege, 
dass damit ein Atmega8 am Limit ist und dann nicht viel mehr als eben 
sinus und cosinus machen kann.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Z.B. der gut alte Intel 80287 kann einen Teil von dem, was du 
angesprochen hast.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Attila schrieb:
> dass damit ein Atmega8 am Limit ist und dann nicht viel mehr als eben
> sinus und cosinus machen kann.

Das ist ein Irrglaube.
Jede CPU kann alles rechnen, was Du programmierst, es gibt kein Limit.
In Taschenrechnern machen das oft sogar nur 4-Bitter.

Limits ergeben sich nur indirekt, z.B. wenn die Genauigkeit so hoch sein 
soll, daß die Variablen nicht mehr in den SRAM des MC passen.

Oder wenn die Rechnung länger dauert als gefordert.
Der Mensch ist dabei kein Maßstab, der MC rechnet die Sinusse 1000-mal 
schneller aus, als Du sie ablesen kannst.


Peter

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter: ich meinte damit das der qC dann eben rechnet und nicht mehr 
soviel "Platz" für anderes hat wie z:b AD Wandlung,steuern und regeln, 
usw allein schon weil , so wie ich es verstanden habe, kaum register 
übrig bleiben.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>...so wie ich es verstanden habe, kaum register übrig bleiben.

Du hast 32 Register. Und die werden nicht weniger.
Ausserden hast du noch RAM. Dort kann man auch Werte Speichern.

MfG Spess

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Psst. Ich hätte da nen Geheimtip, wenn Du einfach nur rechnen willst:

Programmiere in C, das sind fertige Math-Libs mit bei.


Peter

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Attila schrieb:
> Ist das zu naiv gedacht? Oder gibt es so ein modul?
Naja aber genau solche Sachen (einlesen, verarbeiten, ausgeben) macht 
eben ein µC... Und wenn du Sinus etc. haben möchtest und der Chip das 
nicht in HW kann, dann muß man das durch Software nachbilden. Das sit ja 
der Witz an einem "Programmgesteuertem Automaten" aka µC, das obwohl er 
Hardwaremäßig nur ein eingeschränktes Set von Operationen beherscht, man 
den Rest per Software nachbilden kann (es sei den der Controller selbst 
hat nicht alle nötigen Grundoperationen).

Und das Problem ist halt eben gerade das man Einlesen, Lokig wann soll 
was geschehen, Ausgabe etc. haben muss, sodass sich ein Extra "chip" 
schon garnicht mehr lohnt.

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ? "C" kann sowas? Interessant! Also alles noch mal von vorne schätze 
ich mal. Aber vielen Dank für die Antworten!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim Rechnen unter Assembler gibt es noch ne weitere Hürde.
Assembler verstehen in der Regel keine Float-Zahlen.
Also auch, wenn Du ne float Lib hast, mußt Du ja irgendwie Zahlen 
erstmal hinschreiben können.
Du brauchst also ein extra Programm, welches eine Float-Zahl in 32Bit 
wandelt.

Oder Du machst es von hinten durch die Brust ins Auge.
Du schreibst die Zahl als String hin und läßt dann zur Laufzeit den 
String einlesen.

Assembler und Rechnen passen also nicht sonderlich gut zusammen.


Peter

Autor: Attila (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oje! Ich verstehe kaum was Peter sagt! Ok: Was muss jemand machen der 
nie was mit microcntrollern zu tun hatte. Jetzt aber es in einem Jahr 
geschaft hat was mit UART, RS232, TWI, PWM und ein Display auf die Reihe 
zu bekommen. Jetzt möchte ich Rechnen, im Moment konkret: Gegeben 2 
Koordinaten. Berechne den Kurs zwischen diesen beiden Punkten. Da am 
Ende irgendwas zwischen 0 und 360 Grad rauskommt bin ich mit 8 bit 
schonmal nicht ausreichend "bestückt". Wie geht es weiter? "C" lernen? 
Auf andere qC umsteigen UND eine andere Sprache lernen?
Was raten die Profis?

Autor: Udo Schmitt (urschmitt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Attila schrieb:
> Wie geht es weiter? "C" lernen?
> Auf andere qC umsteigen UND eine andere Sprache lernen?

Wenn es ein Sinus ist und dabei bleibt, dann im Netz nach einer Lösung 
mit Tabellen-loockup suchen.
Wenn es doch öfter mal Berechnungen mit Gleitkommazahlen braucht auf C 
umsteigen.
Und verstehen was Ganz und Fliesskommazahlen sind und wo die Grenzen 
dieser Zahlendarstellungen liegen.
Viel Spass

Autor: Mark Leyer (m2k10) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grundsätzlich kann ein µP nur logische Verknüpfungen zwischen einzelnen 
bits 'berechnen'. Die geschickte Zusammenstellung dieser Verknüpfungen 
führt dazu, dass ein µP Grundrechenoperationen auf Binärzählen 
durchführen kann. Die geschickte Kombination dieser Operationen führt 
schließlich dazu, dass auch komplexe mathematische Aufgaben berechnet 
werden können.

Mit Assmebler hast du direkten Zugriff auf die Grundrechenoperationen, 
musst dafür aber alle komplexeren selbst aus diesen zusammenstellen 
(bzw. Copy/Paste, wenn's schon jemand anderes gemacht hat). Bei C (oder 
anderen Sprachen) übernimmt der Compiler diese Aufgabe, indem er bspw. 
sin(xy) durch vorgefertigten Assemblercode zur Sinus-Berechnung ersetzt. 
Bei einer ALU ist das (platt ausgedrückt) einfach in Hardware gegossen 
um's schneller zu machen.

Prozessoren unterscheiden sich dahingehend, wieviele Operationen 
parallel (8-, 16-, usw. bit) pro Zeit durchgeführt werden und welche 
Operationen in Hardware vorhanden sind. Theoretisch kann man auf einem 
AVR auch mit 1024-bit-FLOAT-Zahlen rechnen, dauert halt nur.

Wenn dich das 'Wie' interessiert, also bspw. wie man einen Sinus aus 
einem Riesenhaufen von Binäroperationen berechnet, nehm Assembler(und 
viel Zeit), wenn nur die Ergebnisse wichtig sind, irgendwas anderes.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.