Forum: Mikrocontroller und Digitale Elektronik Speicherbedarfsermittlung


von Heiko Hasse (Gast)


Lesenswert?

Hallo Leute,
wie kann ich vor dem Kauf eines Controllers, den Speicherbedarf für
mein Programm abschätzen.Gibt es vielleicht eine Formel zur groben
Bedarfsschätzung. Es macht schon einen Preisunterschied, ob ich einen
Controller 8k oder 16k kaufe.
Vielen Dank im voraus
Heiko

von Profi (Gast)


Lesenswert?

Abschätzen: kommt auf Deine Erfahrung an.

Du musst halt mal äußern, was der uC alles machen muss.
Und ob Du in C oder Asm programmieren willst.
Und ob Du Floating-Point brauchst.
Und ob Du Text, Bildchen, Tables ... speichern willst.
Und ob man solche auch in einen externen Speicher auslagern kann.
Und und und.

von Peter D. (peda)


Lesenswert?

Je nach Programmiererfahrung und Programmierstil und vor allem je nach
Programmplanung kann der Speicherbedarf für die gleiche Aufgabe um bis
zu 1:1000 differieren.

Manche bekommen etwas nur mit Mühe in einen Mega128, während andere
dafür im Tiny15 noch freie Bytes übrig haben.

Mit anderen Worten, das muß jeder für sich selber abschätzen.


Peter

von Heiko Hasse (Gast)


Lesenswert?

Also,
ich habe ein LCD (110 Segmente)2x HD44780, ich brauche 2 a/d Wandler,
ein d/a Wandler,es läuft wohl auf C hinaus (integer), 4 Tasten.
Aufs Kb soll es nicht ankommen, eher eine Richtgrösse.

von Peter D. (peda)


Lesenswert?

Das ist ja nur die Hardware, dafür brauchst Du überhaupt keinen
Speicherplatz, sondern nur einen Lötkolben.

Speicherplatz brauchst Du für die Aufgabe, die Du im Chip lösen
willst.


Peter

von Malte Marwedel (Gast)


Lesenswert?

Meine persönliche Erfahrung ist, dass wenn man die Wahl zwischen zwei
unterschiendlich großen Controllern hat, man besser den größeren
verwenden sollte. Auf jedenfall sollte man sich die Möglichkeit offen
lassen bei Bedarf einen pinkompatiblen Cotroller mit mehr Speicher in
die Schaltung stecken zu können!
Für die Routine zum Ansteuern eines HD44780 habe ich ungefähr 500 Byte
gebraucht, die Texte die das LCD anzeigen sollte nicht mitgerechnet. Es
kann also sein, dass du mit 2KB hin kommst oder du mit nem 16KB
Controller Platzprobleme bekommt, je nach Programmierziel und
Stiel/Erfahrung.

von Benedikt (Gast)


Lesenswert?

>Für die Routine zum Ansteuern eines HD44780 habe ich ungefähr 500 Byte
>gebraucht, die Texte die das LCD anzeigen sollte nicht mitgerechnet.

500Bytes für LCD Routine ?
Mein kompletter Frequenzzähler mit Bereichsumschaltung hat gerade mal
900Bytes, und das obwohl er auf Geschwindigkeit optimiert ist. Wenn ich
die Binär->Dezimal Routine als Schleife machen würde (im Moment wird
jede Dezimalstelle einzeln berechnet), dann würde ich nochmal einigen
sparen. Dann wäre die LCD Routine kaum größer als etwa 200Bytes.

Wenn man sowas wie printf verwendet, dann wunder micht das nicht...
Danach hatte mein Programm 2kByte und mit Fließkomma waren es 5kByte.

von Heiko (Gast)


Lesenswert?

Vielen Dank Leute,
das sind doch mal ein paar klare Aussagen mit denen was
anfangen kann.
MfG. Heiko

von Peter D. (peda)


Lesenswert?

"500Bytes für LCD Routine"

Ein sehr schönes Beispiel, wie unterschiedlich der Bedarf sein kann.

Ich habe 43 Worte (86 Byte) benötigt.
Ist allerdings in Assembler (siehe Codesammlung) und LCD über 3 Drähte
angeschlossen (mit 74HC164).


Peter

von harry (Gast)


Lesenswert?

hi,

...ob ich einen Controller 8k oder 16k kaufe.

es geht also um den flash-speicher, der das programm aufnehmen muss.
die grösse muss man nicht abschätzen, programm schreiben, compilieren,
vom hex-file die grösse angucken, das muss in's flash.
bei bascom guckst du in den report, steht drin 'will fit into rom' -
oder halt eben nicht.

gruss, harry

von Hagen (Gast)


Lesenswert?

Die Differenz von handmade Assembler zu C Compilern kann gewaltig sein.
Meine GLCD Library zur Ansteuerung des Nokia Farbdisplays benötigte in
C ca. 5.2Kb aber in handmade Assembler, schneller und mit mehr Features
nur 1.5Kb. Diese Routinen enthalten dann Ellipsen, Rechtecke, Linien,
Clipping, komprimierte Mehrfarben Fonts usw.

Gruß Hagen

von Malte Marwedel (Gast)


Lesenswert?

Also nachdem die Angaben für den benötigten Speicher für die Ansteuerung
eines HD44780 doch ziemlich verschieden sind, wollte ich es nochmal
genau wissen, und hab mir das Assembler Listing meines Programms
angesehen:
222 Byte für das Senden eines Bytes ans LCD
+48 Byte für eine nötige Delay Routine
+198 Byte für die Initialisierung
Die Ansteuerung erfolgt im 4 Bit Modus, leider darf die Routine erstmal
eine ganze Reihe von Bits vertauschen, da die Pinbelegung AVR->LCD
ausschließlich auf Hinsicht des benötigten Platinen Platzes gewählt
wurde.
Die Initialisierung lädt zusätzlich noch das Sonderzeichen "ß" als
sebstdefiniertes Zeichen ins LCD und zeigt am Ende "Hello" auf dem
LCD an.
Eine Routine Binär->Dezimal hat mein Prog nicht, inzwischen (6 Monate
mehr Erfahrung) wüsste ich aber die eine oder andere Stelle, an der ich
optimieren könnte.

von Benedikt (Gast)


Lesenswert?

222 Byte für das Senden eines Bytes ans LCD ?

Ich frag micht echt wie ineffektiv der Code sein kann, bei mir sieht
das so aus. Um daraus 222Bytes zu machen, Respekt !

clr RW
mov c, Daten
RS=c
mov P1, a
setb En
clr En
For r0 = #0
nop
nop
next
ret

von Mark Hämmerling (Gast)


Lesenswert?

Salut,

@Heiko:
Egal, was die Werbung Dir einreden will... Geiz ist nicht geil. ;)
Ich hab das jetzt nicht genau rauslesen können. Aber so wie ich das
verstehe, fängst Du mit µCs an und fragst deshalb.
Ich seh das wie Malte. Lieber einen größeren (u.U. auch physisch -
wegen der I/O-Pins) nehmen. Ich selbst mag den Mega16 bzw. seinen
pinkompatiblen Bruder Mega32 sehr gern. Der M32 kostet bei
http://kessler-elektronik.de gerade mal 5,98 Euro. Wenn Du nicht gerade
größere Stückzahlen davon verbauen willst, dann hol Dir so einen oder
den Mega16 (den kannst Du bei mehr Bedarf dann problemlos durch einen
Mega32 ersetzen).
In meinen Augen macht es überhaupt keinen Sinn, im Hobbybereich (evtl.
bei Dir ja auch der Fall) bei einstelligen Stückzahlen/Monat auf jeden
Cent zu achten und sich ewig Gedanken zu machen, worauf man wegen zu
wenig I/O-Pins verzichten muß.
Man sollte nicht anfangen, den Code deswegen weniger effizient zu
schreiben. Aber es gibt eine gewisse Sicherheit zu wissen, daß man noch
viele Features nachrüsten könnte, ohne die Hardware komplett umstellen
zu müssen. Das finde ich motivierender als den ständigen Gedanken, daß
mich jedes neue Feature näher an die Grenzen des Controllers führt. Und
schließlich schont es auch die Nerven wenn man es sich leisten kann, in
C statt ASM zu programmieren. :) Vorausgesetzt natürlich die Anwendung
ist nicht zu zeitkritisch.

Alles in allem, denke ich, ist die DIL40-Klasse für Deine Zwecke schon
gerechtfertigt. Ist auch alles nur meine persönliche Meinung. Ich kann
die Minimalisten verstehen - ich nehm auch nicht gern mehr als nötig.
Ich kann aber auch die verstehen, die wegen der wirklich günstigen
Preise gleich eine Klasse höher zugreifen - so ein Controller macht
seinen Job ja vielleicht auch nur ein paar Wochen in einem Prototypen -
dann kann er für das nächste (vielleicht viel größere) Projekt auch noch
herhalten. :)

Viele Grüße und viel Spaß,
Mark

von martinwisi (Gast)


Lesenswert?

Hallo

Also ich bin der gleichen Meinung wie Mark.
Beschäftige mich zwar hauptsächlich mit PICs aber da is es das Selbe.
Ich verwende eigentlich nur die 18F Serie, warum sollte ich auch die
16F verwenden. Für 3€ weniger tu ich mir das herumschlagen mit paging,
wenigen Befehlen und vielem mehr einfach nicht an.
In der Entwurfsphase verwende ich eigentlich fast immer DIL40 Chips. Da
bleibt dann meist ein Port übrig wo man ein paar Leds anschließen kann
die man dann prima zum debuggen verwenden kann wenn man im Code
(schreibe nur ASM) ein paar "Markers" einbaut. So kann man
feststellen wo der Mikrocontroller hängen bleibt...
Dann beim Aufbau verwend ich schon mal 28 oder 18 Pin Gehäuse auch in
SMD, einfach weil es deutlich kleiner ist und wenn das Programm schon
final ist muss man die Teile eh nicht mehr umprogrammieren ;-)

Ach ja 300 Bytes für LCD und ein paar Funktionen ist ok! Ram braucht
man max. 10Bytes.

MfG Martin

von Heiko Hasse (Gast)


Lesenswert?

@ mark,
Danke erstmal,
ich denke das sollte an grober Theorie reichen, jetzt gehts mal
zur Umsetzung. Falls es in C nicht klappt, werde ich wohl zu Assembler
greifen (ist verdammt lange her).
MfG Heiko

von Ralf Altmann (Gast)


Lesenswert?

@Hagen:

Du schreibst, dass du Routinen hast, die Ellipsen usw. auf einen GLCD
darstellen. Ich möchte das gleiche mit einem monochromen Display
machen. Woher hast du deine Routinen bzw. Informationen darüber?

Gruß Ralf

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.