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


von Attila (Gast)


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?

von Läubi .. (laeubi) Benutzerseite


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?

von Volker Z. (vza)


Lesenswert?

Meinst du

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

b) µC
kan man frei programmieren.

c) FPGA
auch programmierbar, aber schneller.

Volker

von Attila (Gast)


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?

von Attila (Gast)


Lesenswert?

@Volker: Danke! Sehr interessant!

von spess53 (Gast)


Lesenswert?

Hi

Und was hat das Ganze mit AVRASM zu tun?

MfG Spess

von Ralf (Gast)


Lesenswert?

Es gibt Mathematische Coprozessoren und Gleitkommaeinheiten, die das 
können.

von Attila (Gast)


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.

von Ralf (Gast)


Lesenswert?

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

von Peter D. (peda)


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

von Attila (Gast)


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.

von spess53 (Gast)


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

von Peter D. (peda)


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

von Läubi .. (laeubi) Benutzerseite


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.

von Attila (Gast)


Lesenswert?

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

von Peter D. (peda)


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

von Attila (Gast)


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?

von Udo S. (urschmitt)


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

von Mark L. (m2k10) Benutzerseite


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.