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?
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?
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?
@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.
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
@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.
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
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.
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
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?
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
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.