Forum: Mikrocontroller und Digitale Elektronik Attiny 4313 zu 'klein'


von Kurt (Gast)


Lesenswert?

.

Frage: gibt es einen pinkompatiblen "ATtiny 4313" Nachfolger mit mehr 
Speicher?

(ich mache gerade das Programm dafür grösser und nun kommt die 
Fehlermeldung "out of...")


 Kurt

von Malte _. (malte) Benutzerseite


Lesenswert?

Nein, scheint nicht der Fall zu sein.
http://www.atmel.com/products/microcontrollers/avr/tinyavr.aspx
Auf Product finder klicken, Package zur Spalte hinzufügen und suchen.

Tip:
1. Nimm einen Controller mit "erwarteter benötigter Flash größe" * 2.
2. Und dann nimm nur einen wo du die Möglichkeit hast den Wert durch 
einen Pin kompatiblen Controller noch mal zu verdoppeln.
3. Durch einbinden von Libs wächst der Speicherbedarf am Anfang 
besonders schnell.

von (prx) A. K. (prx)


Lesenswert?

Oder: Suche wo der Klops sitzt und Unnötiges einsparen.
Hast ja nicht einmal genannt, welcher Speicher knapp ist.

: Bearbeitet durch User
von Kurt (Gast)


Lesenswert?

A. K. schrieb:
> Oder: Suche wo der Klops sitzt und Unnötiges einsparen.
> Hast ja nicht einmal genannt, welcher Speicher knapp ist.

Ich versuche mich in BASCOM.
Flash wird zu 70% verwendet.
Die Fehlermeldung, dass das RAM nicht reicht, kommt wenn ich die 
gewünschten Strings deklariere.

Heisst: erstmal alles was nicht sein muss rauslöschen und dann schauen 
wie das mit Mehrfachverwendung einiger/weniger String's gehen könnte.

 Kurt

von M. K. (sylaina)


Lesenswert?

Kurt schrieb:
> Die Fehlermeldung, dass das RAM nicht reicht, kommt wenn ich die
> gewünschten Strings deklariere.

Sind das konstante String? Wenn ja, lasse sie im Flash liegen und hole 
sie nicht ins RAM mit rüber. Das kann enorm viel Speicherplatz sparen. 
Wie das in Bascom ausschaut weiß ich nicht, ich bin nur mit C auf den 
AVRs unterwegs.

von Paul B. (paul_baumann)


Lesenswert?

Kurt schrieb:
> Ich versuche mich in BASCOM.
> Flash wird zu 70% verwendet.

Hast Du eine Testversion von Bascom? Dann liegt es daran, denn dort ist 
die Programmgröße limitiert.

MfG Paul

von Bernd T. (bastelmensch)


Lesenswert?

Paul B. schrieb:
> Kurt schrieb:
>> Ich versuche mich in BASCOM.
>> Flash wird zu 70% verwendet.
>
> Hast Du eine Testversion von Bascom? Dann liegt es daran, denn dort ist
> die Programmgröße limitiert.

Der Flash hat nichts damit zu tun das die Meldung kommt das die RAM 
Größe nicht ausreicht.
Ausserdem läßt die Demo eine Codegröße von 4K zu und mehr Flash hat der 
4313 nicht. ;-)

@Kurt: beim 4313 hast Du 256Byte SRAM zur Verfügung.
Wie groß sind denn Deine Strings?
Du kannst nicht die ganzen 256Byte für Variablen und Strings benutzen. 
Der Stack braucht z.B. auch noch Platz.
Bei Bascom kannst Du einstellen wie viel vom SRAM für den Stack und die 
Variablen verwendet werden sollen.
Dazu musst Dir Dir natürlich gedanken machen wie tief Du in 
Unterroutinen springst und den Stackverbrauch im Fall eines Interrupts 
(Thema Registerinhalt zwischenspeichern) aussieht.
Bascom geht da per default recht großzügig mit um und speichert viele 
Register auf dem Stack wenn ein Interrupt kommt. Kann man aber 
unterdrücken und die benötigten Register per Inline-Assembler quasi von 
Hand "retten".

Wenn das alles nichts bringt, dann hast Du Pinkompatibel keine Chance.

Ein ATMEGA88/168 ist mit 1K SRAM wesentlich besser ausgestattet und beim 
ATMEGA328 hast Du 2K SRAM allerdings haben die eben ein größeres Gehäuse 
und mehr Pins.

von Sebastian S. (amateur)


Lesenswert?

Nein!
Im Bereich 8 Bit, 20 Pin und 20 MHz gibt es nur sehr wenige Chips.
Der ATTiny816 sowie die 861er haben 8 KByte Flash.
Keine Ahnung ob die Pinkompatibel sind.

Keine Ahnung ob die obigen Spezifikationen überhaupt richtig sind.

Unter:
http://www.atmel.com/

und
Atmel MCU Selector

kommst Du zum
Product Selector: Microcontrollers (MCUs)

In der obersten Zeile kannst Du, so die Teile vorhanden sind, relativ 
feinfühlig Deinen gewünschten Prozessor "einstellen".

Do it your self

von Paul B. (paul_baumann)


Lesenswert?

Bernd T. schrieb:
> Ausserdem läßt die Demo eine Codegröße von 4K zu und mehr Flash hat der
> 4313 nicht. ;-)

Die alten Versionen ließen nur 2Kbyte zu, aber Du weiß ja sicher, welche 
Version er nutzt.

Kurt schrieb:
> (ich mache gerade das Programm dafür grösser und nun kommt die
> Fehlermeldung "out of...")

Out of was? Es gibt die Meldungen:
21
Out of IRAM space

22
Out of SRAM space

23
Out of XRAM space

24
Out of EPROM space

MfG Paul

von c-hater (Gast)


Lesenswert?

Paul B. schrieb:

> Out of was? Es gibt die Meldungen:
> 21
> Out of IRAM space
>
> 22
> Out of SRAM space
>
> 23
> Out of XRAM space
>
> 24
> Out of EPROM space

Sieht aus, als wäre der Compiler komplett in's Abseits gerauscht. Sollte 
natürlich nicht passieren, aber Compiler haben's echt wirklich echt 
schwer. Sie müssen die gesamte Gülle verdauen, die der "Programmierer" 
einfüllt...

Wenn das Fehlerbild im konkreten Fall nicht die Folge irgendwelcher 
künstlichen Restriktionen ist, die nur zum Zweck der Profitmaximierung 
existieren, dann ist es immerhin noch ein schwerer Fehler im Compiler. 
In beiden Fällen gilt:

Schicke BASCOM endlich dorthin, wohin es seit mindestens 10 Jahren 
sowieso hingehört: In's gnädige Reich der Technikgeschichte. Da genießt 
solche Scheiße den Schutz der Verblichenen, man darf nicht mehr schlecht 
über sie reden, selbst wenn sie nachweislich ziemlicher Mist waren...

von Schreiber (Gast)


Lesenswert?

c-hater schrieb:
> Schicke BASCOM endlich dorthin, wohin es seit mindestens 10 Jahren
> sowieso hingehört: In's gnädige Reich der Technikgeschichte. Da genießt
> solche Scheiße den Schutz der Verblichenen, man darf nicht mehr schlecht
> über sie reden, selbst wenn sie nachweislich ziemlicher Mist waren...

Bei sachgerechter Programmierung kommt man damit schnell zu einem guten 
Ergebniss. Man muss nur nachdenken und nicht alles hinrotzen, auch wenn 
Basic dazu verleitet

von Paul B. (paul_baumann)


Lesenswert?

c-hater schrieb:
> Schicke BASCOM endlich dorthin, wohin es seit mindestens 10 Jahren
> sowieso hingehört: In's gnädige Reich der Technikgeschichte.

Respekt! Du hast also ein weiteres Aufgabengebiet übernommen: Neben dem 
Hassen von "C" nun auch noch das Hassen von "Bascom". Ich wette: Du 
trinkst am Liebsten "Hasseröder".
;)
SCNR
Paul

von MWS (Gast)


Lesenswert?

c-hater schrieb:
> Paul B. schrieb:
>
>> Out of was? Es gibt die Meldungen:
>> 21
>> Out of IRAM space
>>
>> 22
>> Out of SRAM space
>>
>> 23
>> Out of XRAM space
>>
>> 24
>> Out of EPROM space
>
> Sieht aus, als wäre der Compiler komplett in's Abseits gerauscht. Sollte
> natürlich nicht passieren, aber Compiler haben's echt wirklich echt
> schwer. Sie müssen die gesamte Gülle verdauen, die der "Programmierer"
> einfüllt...

Sieht aus, als hätte der Welt genialster Programmierer eine Aufzählung 
von verschiedenen möglichen Fehlermeldungen des Compilers als aktuelle 
Compilerausgabe betrachtet.

Du hast Dir ja 'nen Namen hier im Forum gemacht, die Klappe maximal weit 
aufzureißen, aber wie wär's denn vor dem Lospoltern die kleine graue 
Masse oberhalb des Halses zu benutzen?

Abgesehen davon, hätte der TE Code eingestellt, könnte man ihm was 
raten, so wird's dagegen nur eine mehr oder weniger lockere 
Unterhaltung.

von pegel (Gast)


Lesenswert?

Wenn es nur darum geht vorgefertigte Strings irgend wo hin zu schaufeln,
wie wäre es mit einem externen EEPROM?

von M. K. (sylaina)


Lesenswert?

pegel schrieb:
> Wenn es nur darum geht vorgefertigte Strings irgend wo hin zu schaufeln,
> wie wäre es mit einem externen EEPROM?

Ist das Problem: Wir wissen nicht wo es genau klemmt. Wir wissen nur, 
dass ein Speicher anscheinend voll läuft, wir wissen aber nicht welcher. 
Von den bisherigen Aussagen des TEs ist es aber sehr unwahrscheinlich, 
dass es das EEPROM ist, wahrscheinlich ist es eher das Flash, vielleicht 
auch das SRAM.

von pegel (Gast)


Lesenswert?

Kurt schrieb:
> Die Fehlermeldung, dass das RAM nicht reicht, kommt wenn ich die
> gewünschten Strings deklariere.

Zu mindest das könnte man so vermeiden.

von M. K. (sylaina)


Lesenswert?

pegel schrieb:
> Kurt schrieb:
>> Die Fehlermeldung, dass das RAM nicht reicht, kommt wenn ich die
>> gewünschten Strings deklariere.
>
> Zu mindest das könnte man so vermeiden.

Daher fragte ich ja ob sich die Strings ändern können. Sind sie konstant 
ist EEPROM nicht unbedingt erste Wahl, dann holt man sie sich bei Bedarf 
aus dem Flash denn da sind sie ja idR auch drin.

von pegel (Gast)


Lesenswert?

M. K. schrieb:
> dann holt man sie sich bei Bedarf
> aus dem Flash denn da sind sie ja idR auch drin.

Dachte ich auch erst, der ist aber offenbar schon ohne Strings zu 70% 
gefüllt und könnte evtl. eine Entlastung vertragen.

von pegel (Gast)


Lesenswert?

Aber stimmt schon, ohne konkrete Zahlen ist alles nur raten.

von Kurt (Gast)


Lesenswert?

pegel schrieb:
> M. K. schrieb:
>> dann holt man sie sich bei Bedarf
>> aus dem Flash denn da sind sie ja idR auch drin.
>
> Dachte ich auch erst, der ist aber offenbar schon ohne Strings zu 70%
> gefüllt und könnte evtl. eine Entlastung vertragen.

Heute habe ich ein wenig aufgeräumt, nicht benötigte Befehle und 
Deklarationen rausgeschmissen. Es könnte reichen, will/muss aber noch 
mehr an Code drin haben.

Die Strings dienen als "Sammelbehälter" für zu sendende Daten.

- Senderkennung, ca. 8 Zeichen
- Sendedaten, bis zu 40 Zeichen
- Prüfsumme, 4 Zeichen

Ich sammle erstmal die Kennung und die Sendedaten in einem Sammelstring,
daraus wird dann die Prüfsumme gebildet und die vier Prüfsummenzeichen 
dann noch hinten dran gehängt.
Der String geht dann zum Sender.
Das was im EE-Prom sein kann ist die Kennung, diese macht aber auch nur 
einen Teil aus.
Wenns nicht anders geht dann erstelle ich die Prüfsumme aus kurzen 
Einzelstücken (jede zu sendende Variable extra) die ich während der 
Übertragung zum Sender erst erstelle.

Frage: wie viel Stack braucht eine UP-Hierarchie mit zwei Ebenen, also 
ein UP wird aufgerufen, dieses ruft wiederum ein UP auf.

Möglicherweise stellt hier der Compiler mehr zur Verfügung als ich 
wirklich benötige.

Noch eine: Der Übersichtlichkeit wegen habe ich die Programmabfolge in 
einzelne UP ausgelagert, bringt es was das alles möglichst ohne UP zu 
machen, also alles in einen "langen Codeschwanz" zu stecken?
(geht allerdings auf Kosten der Übersichtlichkeit)



 Kurt


.

von pegel (Gast)


Lesenswert?

Bei so grundsätzlichen Fragen erstelle ich mir ein Minimal Projekt und 
gehe das dann Schrittweise im Simulator durch.
Dabei kann man alle Register wie auch den SP beobachten und ggf 
optimieren.

von pegel (Gast)


Lesenswert?

Damit bei dem Mini Projekt nicht alles weg optimiert wird, sollte ein 
Port lesen dabei sein, dessen Wert für die weiteren Funktionen notwendig 
ist.

von Axel S. (a-za-z0-9)


Lesenswert?

M. K. schrieb:
> das Problem: Wir wissen nicht wo es genau klemmt. Wir wissen nur,
> dass ein Speicher anscheinend voll läuft, wir wissen aber nicht welcher.

So weit, so korrekt (zitiert). Dennoch ist der Hilferuf des TE auf dem 
Niveau von "Hilfe!!1!elf" Mein Souffle fällt immer zusammen, obwohl ich 
meinen Spirituskocher ..."

und jeder, der nur halbwegs Ahnung vom Thema hat, wird sofort wissen, 
daß egal was noch falsch gelaufen ist, ein Spirituskocher niemals Teil 
der Lösung, sondern immer ein Teil des Problems ist.

So. Und jetzt warte ich auf die -1 Bewertungen won all denjenigen, die 
die Analogie nicht raffen ...

von Bernd T. (bastelmensch)


Lesenswert?

Paul B. schrieb:
> Bernd T. schrieb:
>> Ausserdem läßt die Demo eine Codegröße von 4K zu und mehr Flash hat der
>> 4313 nicht. ;-)
>
> Die alten Versionen ließen nur 2Kbyte zu, aber Du weiß ja sicher, welche
> Version er nutzt.

Ja klar, die 2K Version gibt es schon seit ewigen Zeiten nicht mehr bei 
MCS zum Downloaden, sicher wird er die sich besorgt haben.

Und da 70% vom Flash benutzt werden und keine Fehlermeldung wegen der 
Code-Größe kommt ist klar das er keine 2K Demo benutzt.

Wird natürlich erst klar wenn man sein zweites Posting liest, das zum 
Zeitpunkt Deiner Antwort schon im Thread war:

> Kurt schrieb:
>> (ich mache gerade das Programm dafür grösser und nun kommt die
>> Fehlermeldung "out of...")
>
> Out of was? Es gibt die Meldungen:

Steht in seinem Posting:

Kurt schrieb:
> Flash wird zu 70% verwendet.
> Die Fehlermeldung, dass das RAM nicht reicht, kommt wenn ich die
> gewünschten Strings deklariere.

Damit ist klar das nicht der Flash das Problem ist.
Da steht eindeutig RAM.

> 21
> Out of IRAM space

Wird nur bei nur bei Tinys ohne SRAM benutzt.

> 22
> Out of SRAM space

Da sind wir richtig.

> 23
> Out of XRAM space

Schön das Du es aufzählst, aber XRAM hat ein 4313 gar nicht.

> 24
> Out of EPROM space

Auch auszuschließen, siehe oben.

----------------------------

So langsam verstehe ich auch was andere schreiben...

: Bearbeitet durch User
von Paul B. (paul_baumann)


Lesenswert?

Bernd T. schrieb:
> So langsam verstehe ich auch was andere schreiben...

Du verstehst zumindest nicht mehr al alle Anderen auch.

Ist es zuviel verlangt, eine Fehlermeldung auszuschreiben ?

Du schwafelst! Bring anhand der Aussagen des TO eine glasklare 
Beschreibeung des von ihm gemachten Fehlers! Das kannst Du nicht? Warum 
denn das? Es ist doch Deiner Aussage nach Alles sonnenklar.

-Paul-

Beitrag #5125816 wurde vom Autor gelöscht.
von Karl B. (gustav)


Angehängte Dateien:

Lesenswert?

Paul B. schrieb:
> Ist es zuviel verlangt, eine Fehlermeldung auszuschreiben ?

Hallo,
zunächst einmal muss ich den ATtina4313 in Schutz nehmen.
Jetzt wird der gewissermaßen zum Prügelknaben, nur weil der ATtiny2313 
aufgemotzt wurde.
Dabei ist nicht nur mehr Speicher da, sondern es werden auch Befehle 
akzeptiert, die der 2313-er gar nicht kannte.

Zumindest konnten 2 Befehlszeilen beim im Bild gezeigten Prog eingespart 
werden.

Wenn man nun ein Programm auch auf das Target dementsprechend optimiert, 
spart man wohl noch mehr Speicherplatz.

Voraussetzung ist natürlich ein ASM-Editor oder etwas Entsprechendes.

(Übrigens,
mit BASCOM gibt es öfter Probleme, vor allem, weil die Libraries nicht 
ständig aktualisiert wurden.)

ciao
gustav

von Paul B. (paul_baumann)


Lesenswert?

Karl B. schrieb:
> (Übrigens,
> mit BASCOM gibt es öfter Probleme, vor allem, weil die Libraries nicht
> ständig aktualisiert wurden.)

Du hast die falsche Include-Datei eingebunden, nämlich die 2313def.inc
Die ist für den At90S2313. Da mußt Du Dich nicht wundern.

Nimm die tn2313def.inc für den Attiny2313.

MfG Paul

von Karl B. (gustav)


Lesenswert?

Paul B. schrieb:
> Nimm die tn2313def.inc für den Attiny2313.

Hi,
jetzt meckert er nur SPH an, nimmt den "lpm-"Befehl
ok.

Danke für den Tip mit der korrekten def.inc

und die for compatibilities
zum Beispiel
USR  = UCSRA  ; For compatibility
etc...

ciao
gustav

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.