Forum: Mikrocontroller und Digitale Elektronik Atmega8 Speicher zu klein


von Martin G. (Firma: Privat) (brainy)


Lesenswert?

Moin Forum,

bin neu hier im Forum und hoffe Ihr könnt mir weiterhelfen.
Also....
Mir hat jemand eine Schaltung gebaut auf welcher ein Atmega8 verbaut 
ist.
Nun habe ich das Problem das ich die 8kb Grenze erreicht habe und mein 
Programm ist noch nicht ganz fertig :-)
Kann ich den Atmega8 einfach auslöten und einen Atmega16 einbauen??
Oder kann ich den Speicher erweitern ?

Vielen Vielen dank für Eure Hilfe.

So long

Brainy

von Peter II (Gast)


Lesenswert?

oder Programm verkleinern.

von nb (Gast)


Lesenswert?

naja, der Atmega16 ist ja nicht zum ATmega8 pinkompatibel, der hat noch 
nichtmal das selber Gehaeuse. Ich wuerde daher eher zu einem 
Atmega168(16kB) oder Atmega328(32kB) raten. Soweit ich weiss sind die 
alle pinkompatibel, ggf. einfach in der Parametric Search bei Atmel 
nachsehen ;-)

von Thorsten T. (Gast)


Lesenswert?

Wobei aber die Register teilweise unterschiedlich sind, d.h. das 
Programm muss vermutlich angepasst werden.

von Dominik S. (dasd)


Lesenswert?

Ohne dich da jetzt irgendwie angreifen zu wollen oder ähnliches...

Ich weiß ja nicht wie viel Erfahrung du im der Programmierung von µCs 
hast, aber kann es vielleicht sein, dass du entweder ziemlichen 
Spaghetticode produzierst oder anderweitg Platz verschwendest?

Ich weiß ja auch nicht wie umfangreich dein Projekt ist, aber in die 
8kb bekommt man schon das ein oder andere rein :)

Sag doch mal was du da baust / programmierst...

von Martin G. (Firma: Privat) (brainy)


Lesenswert?

Moin Moin,

erstmal vielen Dank für die vielen und raschen Antworten.
Ich habe einen Kameradolly gebaut der mit einem Schrittmotor gesteuert 
wird.

Hauptsächlich steuert der Atmega den Schrittmotor und die den Auslöser.

Im Programm kann man verschiedene Punkte auswählen.
Automatisch  Manuell  Links  Rechts  Endschalter / Umkehr bei 
Endschalter / Geschwindigkeit wird mit Poti gesteuert.

Alle "Menüpunkte" werden im Display angezeigt. Und alles 
Idiotensicher..... Welcher Taster macht was.

Ich könnte wohl viel Platz im Programm sparen wenn ich die 
Variablenbezeichung abkürzt.

Also nicht mehr Anzeigewert1 sondern AZW1.

War halt am Anfang etwas übersichtlicher.

Danke nochmals. Aber bevor ich einen Atmega einbaue der nicht 100% 
kompatibel ist lass ich es so und verkleiner das Programm.

Vielen Dank

So long

Brainy

von Lutz (Gast)


Lesenswert?

Ansonsten lassen sich auch 512 Byte ins EEPROM auslagern; gerade für 
"langsame" Displaytexte geeignet.

von Εrnst B. (ernst)


Lesenswert?

Martin Goerke schrieb:
> Ich könnte wohl viel Platz im Programm sparen wenn ich die
> Variablenbezeichung abkürzt.
>
> Also nicht mehr Anzeigewert1 sondern AZW1.

Das Spart keinen Platz. Nachdem der Compiler an deinem Code war, sind 
die Variablennamen alle Weg, die kommen nicht in den Atmega...


Befürchtung: Schätzt du deine Programmgröße an der Dateigröße deines 
.c-Sourcecodes ein?

von Martin G. (Firma: Privat) (brainy)


Lesenswert?

Ins EEprom auslager.....???

Das hört sich gut an. Aber wie stell ich das an. Bin noch nicht so lange 
am Bascom programmieren.

Danke

So long

BRainy

von Εrnst B. (ernst)


Lesenswert?

Ahso, Bascom... Nächstes Mal am besten gleich dazusagen, spart 
"inkompatible" Antworten.

von Martin G. (Firma: Privat) (brainy)


Lesenswert?

Nein, das Kompilierte Programm ist 8KB groß.
Darum bleibt die Steuerung wohl auch bei enem bestimmten Punkt stehen, 
weil der Rest fehlt ?

So long

von Εrnst B. (ernst)


Lesenswert?

Kenn mich mit Bascom nicht wirklich aus, aber da sollte der Wechsel 
Atmega8 -> Atmega 168 oder 328 doch problemlos sein, oder?

Aber: Ist bei der kostenlosen Bascom-Version nicht sowieso die max. 
Programmgröße Limitiert?

von Martin G. (Firma: Privat) (brainy)


Lesenswert?

Stimmt auf etwas über 4kb aber mein kompiliertes Programm hat dann 
trotzdem mehr als 8 KB.
Irgendwie komisch ?!?!?!?!?

von Lutz (Gast)


Lesenswert?

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#EEPROM

Bei Bascom kann ich leider auch nicht weiterhelfen.

von diskman (Gast)


Lesenswert?

Tach auch,

Martin Goerke schrieb:
>Nein, das Kompilierte Programm ist 8KB groß.
>Darum bleibt die Steuerung wohl auch bei enem bestimmten Punkt stehen,
>weil der Rest fehlt ?

Das kann ich mir beim besten Willen nicht vorstellen. Während des 
Proggens kann man prüfen ob Kompilat und gespeichertes Programm 
identisch sind. Sollte das Prog nicht komplett auf dem IC sein --> 
Fehlermeldung. Meine Vermutung: Während der Laufzeit wird Speicher für 
Operationen benötigt der nicht mehr vorhanden/verfügbar ist, der 
klassische Buffer Overflow.




Gruß diskman

von Marvin M. (Gast)


Lesenswert?

Hallo,

welches Programmfile ist 8K groß? Das .hex? Da wäre Faktor 2,x völlig 
normal, weil der Code als Ascii-Hex gespeichert wird.
Gibt der Bascom-Compiler denn keine Warnung aus, wenn das Codelimit 
erreicht ist?

von spess53 (Gast)


Lesenswert?

Hi

>Stimmt auf etwas über 4kb aber mein kompiliertes Programm hat dann
>trotzdem mehr als 8 KB.
>Irgendwie komisch ?!?!?!?!?

Wenn du das Hex-File meinst, das ist ca. 2,3x grösser als der 
eigentliche Code.

MfG Spess

von Floh (Gast)


Lesenswert?

Wie wärs mit Programm herzeigen?
Alles andere ist Raterei.

von Martin G. (Firma: Privat) (brainy)


Angehängte Dateien:

Lesenswert?

Ok, dann hier mal mein Programm. Aber NICHT lachen :-)

Das Programm habe ich angehängt, ist aber noch nicht fertig. Da im Teil 
"Fahren" was nicht stimmt.

In dem Teil hier bliebt die Steuerung stehen.

...
Fahren:
Do

Gosub Berechnen

Loop
...

Die Steuerung spring hier her und dann parkt sie.
Wenn ich hier noch Do einen Goto einfüge sprint er dorthin.
Ansonsten wars das.

Danke für Eure Hilfe.

So long

Brainy

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

die variable Strecke "Dim Strecke As Single" wird in deinem Programm 
offenbar nicht verwendet, jedoch bedingt die Verwendung des Typs Single 
den Einbau einer Gleitkommabibliothek - und die wird ordentlich Platz 
brauchen.

Sascha

von Martin G. (Firma: Privat) (brainy)


Lesenswert?

Hallo,
danke für den Tip.
Ich habe eben grad den Fehler gefunden.
Es Reicht nicht in "Fahren" nur ein Gosub zu Berechnen ich muss den Wert 
auch anzeigen lassen.

Jetzt geht es weiter.

Achso..... beim Flashen zeig er 2904 von 8902 an, sollte also reichen.

So long

Brainy

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.