Hallo Leute, ich habe mal eine frage, angenommen ich haben einen avr (zb mega16)mirt 1K SRAM: wieviel variablen (zb Typ Word mit 2 Byte) kann ich nun deklarieren in Bascom, ohne das es probleme gibt? theoretisch wären es ja 512 Variablen, aber sicherlich wird auch vom system selber SRAM benötigt. für messwerterfassungen sind ja doch eine vielzahl nötig, wenn erst auf abruf per rs232 übertragen werden soll. Gibt es da eine Faustregel? Besten Dank!
Du denkst schon richtig, 2Byte pro Word. Dazu kommt noch Stack usw. Was meinst du mit "aber sicherlich wird auch vom system selber SRAM benötigt." ??
na ich meine, was nimmt sich der avr an sram, wenn ich mit lcd's, intrrupts, timer, adc etc arbeite? oder ist 100% des verfügbaren srams für meine variablen frei?
a) der AVR macht nichts, sondern nur dass, was du ihm sagst (also programmierst). Was der Compiler macht ist eine andere Sache... b) RAM-Variablen-Stack=freier Speicher. RAM ist bekannt, Variablen auch, nur das mit dem Stack ist so eine Sache. Bei jedem Interrupt scihert der Compiler alle Register usw. in den Stack. Da können schon bis zu 100Bytes, oder bei vielen verschachtelten Routinen auch mehr zusammenkommen.
intressant, und wie sollte der stack (gibts ja ne compiler option im bascom menu) angelegt werden, wenn es so an die 800 word variablen gibt, mit einigen subroutinen?
Moin Moin, ich habe ein Programm, welches viele SINGLE Variablen verwendet und LOG10. Nach einer gewissen Zeit spinnte das Programm, im LCD stand dann nur Müll und ein RESET war die Folge. Ich habe in BASCOM HW-Stack etc alle Werte verdoppelt und nun läufts fehlerfrei. Evt Stück für Stück die Werte erhöhen, bis im Progi keine Fehler mehr auftreten. Mich würde auch auch schon interessieren, wie viel RAM der Compiler wirklich braucht, leider zeigt BASCOM das nicht an. Mein Code ist nun auch schon 900 Zeilen lang (mit Komentaren aber) und der ATMega8 zu 99% voll :) mfg Oliver
Hi Kai, warum nutzt du 16-Bit-Variablen? - weil du die Auflösung brauchst? - oder weil es in BASIC so schön bequem ist? In Assembler würde man 16-Bit-Werte nur nutzen, wenn es wirklich erforderlich ist (Auflösung). Meist reichen nämlich 8-Bit-Werte. Mfg. Franz
Üblicherweise gibts auch 2 Stacks, den Hardware-Stack, gehandelt durch den SP, genutzt bei Interrupts, Calls und ggf. push/pop-Operationen und dann noch den Datenstack, u.a. genutzt für Übergabe von Parametern an Funktionen.
Da merkt man wer wirklich Ahnung vom programmieren hat. Ohne jetzt irgendjemanden beleidigen zu wollen, aber es gibt ziemlich viele Leute (auch hier im Forum), die Null Ahnung von uC haben, aber diese in C oder BASCOM programmieren. Einfach mal überall zur Sicherheit Fließkommazahlen einbauen usw. macht ja bei Programmieren keinen Unterschied. Und wenn dann die ATmegas zu klein und langsam werden, wundern sie sich, obwohl jeder mit etwas Ahnung vom uC und von Assembler die 10 fache Geschwindigkeit rausholen könnte. Aber das macht ja Arbeit, denn dazu muss man das Datenblatt lesen... Ich habe nicht gegen Compiler, die sind einfacher, aber es ist ebenso einfacher ein Programm total zu versauen...
hi benedikt, genau so wie sprach mal ein automechaniker den ich kannte, der fand das auch total dämlich,wenn die leute für einen kupplungswechsel oder zylinderkopfdichtungswechsel zu ihm kamen. das ist doch so einfach, da brauch mann doch nur die und die und die schraube zu lösen und dann geht das. wenn die leute bißchen mehr, dann könnte und so weiter.......ich sagte zu ihm dann das,was ich auch zu dir sage: ich will benutzen, und nicht das zeug lernen. alles klar? und mit bascom kann ich halt einen mc benutzen, und das ohne den total umständlichen und komplizierten assemblerkram. oder schreibst du dein betriebssystem für deinen computer auch selbst komplett neu? oder entwickelst du für dein auto auch erstmal einen motor, bevor du damit auch nur einen km fährst. ich möchte mit meinem mc nicht den nobel-preis für software-entwicklung bekommen noch 14 tage assembler-befehle studieren um eine led zum leuchten zu bringen. wenn ich mit der zeit merke,daß ich nicht weiter komme und über den tellerrand schaue, dann frage ich.und entweder gibts darauf ne sinnvolle antwort oder keine. nur diese schlaumeier-oberschullehrer sprüche sind nicht nur destruktiv, sondern auch nicht hilfreich. @franz ich will halt viel 5stellige zahlen speichern, und da ist der variablentyp word mit 2 byte die einzige möglichkeit die ich kenne, oder du zeigst mir,wie das auch mit 1 byte geht - das wäre natürlich auch was!
@Kai Wie schon zuvor geschrieben: Ich habe niemanden spezielles gemeint, und erst recht nicht dicht. Deine Frage mit dem Speicher ist nämlich komplizierter als man anfangs denkt. Bei Assembler kann man das ganz noch einigermaßen im Kopf oder durch simples zählen der Verschachtelungen ausrechnen, bei C und BASCOM ist das ganze schon um ein vielfaches schwerer. Anfänger OK (dazu hat jeder schließlich irgendwann gehört), aber was ich garnicht mag, sind Anfänger die nach dem Testen des Demos das beim Compiler dabei war, gleich einen mp3 Player mit Festplatte usw. bauen wollen, aber nichtmal wissen welche Funktion die Leitungen WR\ und RD\ haben usw. Eine gewisse Grundlage und eine etwas Kenntnis des Mikrocontrollers gehört schon dazu.
@Kai: Einen uC zu programmieren hört sich nicht nach "benutzen" an, sondern vielmehr nach "entwickeln". Eine Gerät mit einem uC kann man "benutzten".
Hi Kai... "@franz ich will halt viel 5stellige zahlen speichern, ..." Da habe ich ja nix dagegen, dann schrei aber nicht rum, dass dein Speicher nicht reicht. Entweder viele Variable oder speicherfressende, beides wird wohl nix. Du schreibst, du willst nur "benutzen". Ok, solange sich das auf die Technik bezieht. Wenn du aber meinst, du kannst die Forum-Teilnehmer "benutzen", weil du zu faul zum Lesen/Lernen bist, dann kommst du sicherlich nicht weit. Vielleicht solltest du erstmal etwas im Forum lesen (schmökern). (Ich beziehe mich hier nicht nur auf diesen Thread, sondern auch auf die anderen, in denen du schreibst, da stellst du nämlich auch Fragen, die schon zigmal durchgekaut wurden.) Mfg. Franz
@ "Vielleicht solltest du erstmal etwas im Forum lesen (schmökern). (Ich beziehe mich hier nicht nur auf diesen Thread, sondern auch auf die anderen, in denen du schreibst, da stellst du nämlich auch Fragen, die schon zigmal durchgekaut wurden.)" da hätte ich gerne mal die links dazu inkl der links, auf die du dich beziehst zur untermauerung deiner these *gg "Wenn du aber meinst, du kannst die Forum-Teilnehmer "benutzen", weil du zu faul zum Lesen/Lernen bist, dann kommst du sicherlich nicht weit." ich frage, und jedem steht es frei zu antworten oder nicht, da ist kein "benutzen" möglich, da dies unweigerlich einen umungänglichen zwang beinhaltet. es gibt auch menschen, die ohne mc-controller in der praxis-buch unter dem kopfkissen schlafen, und auch menschen, die das akzeptieren. aber zurück zum thema, du wolltest zeigen, wie 5stelligen zahlen mit weniger als 2 byte zum speichern gehen. wo war jetzt in deinem letzten posting eine erklärung dafür?
Dummerweise reichen 2 Byte nicht zur Speicherung aller 5stelligen Zahlen aus.
Hallo Kay kannst du mir erklären, wie du die Zahl 65536 mit 2 Byte darstellst? Ist ist 5-stellig, oder?
@Kai: Wenn du viele Messdaten speichern willst, für die der interne RAM nicht ausreichend, dann schließ doch einen externen SRAM an. Bis 512kB sind alle problemlos zu bekommen. Sobald bei mir der Speicher nicht ausreichend, mache ich das auch immer so. Der interne RAM hat für Variablen bisher immer, außer ich musste große Datenmengen abspeichern (Messwerte, Empfangspuffer usw.)
Hi Müssen es denn unbedingt 5-stellige (oder besser 16-Bit-) Messwerte sein? Oftmals reichen doch 8-Bit-Werte. Ist denn die Erfassung deiner Messwerte so genau, dass es sich lohnt, die hohe Auflösung auch zu speichern? Schau dir doch mal den zu erwartenden Wertebereich deiner Messwerte an (niedrigster Wert, höchster Wert) und vergleiche mal mit dem Wertevorrat deiner 16-Bit Zahl. Nutzt du den voll aus? Mfg: Franz
also bascom macht das so: 0...255 is "byte" mit 1Byte sram 0..65535 is "word" mit 2byte sram dazwischen ist nichts, also muß ich um die zahl 60000 (höchstwert) bis 250(minwert) bei 4000 (durchschnittswert) halt den variablentyp word benutzen. @benedikt 512kb ist noch zu klein 2mb wären da schon besser da ich ne menge zahlen (zeitmessung) abspeichern muß.....
also ich mach hier grad was mit nem mega162 und nem 512kb S-Ram. Das externe Speicherinterface kann aber nur 64k ansprechen und 60kb vom externen ram nutzen. hab den ram in 16 Bänke a 32kb aufgeteilt. bei 2mb solltest du dir was gutes einfallen lassen, da du ja 20 Adressleitungen bedienen musst. Bei Multiplex wird das dann bestimmt etwas langsam. seb
Hi Kai Werte von 60000, 4000, 250. Da bietet sich 16-Bit unsigned an, wenn man den Speicherplatz dazu hat. Hat man ihn nicht, also ist das Speichern möglichst vieler Werte wichtiger, dann sollte man sich erstmal fragen, ob zwischen 250 und 60000 auch alle Zwischenwerte erforderlich sind. Vergleich: Ein einfaches (billiges) Digitalmultimeter zeigt dreieinhalb Digit, also einen Ziffernbereich von -1999 über 0 bis +1999. Wenn man nun 12V abliest (12,06) streitet man sich nicht um die letzte Ziffer. Man kann sie zwar schön ablesen, da sie als eindeutig erkennbare Ziffer dargestellt wird, trotzdem verwirft man sie, weil man ja weiß, dass der Messfehler der Geräte eine genaue Interpretation nicht mehr zulässt. Ähnlich verhält es sich mit vielen anderen Sensoren/Messwerterfassern. Um z.B. die 10 Bit Auflösung (das sind "nur" 0...1023) eines AVR-Analogeingangs sauber nutzen zu können, muss schon ein gewaltiger Aufwand an Hardware (Entstörung, Platinenlayout) und Software (Sleep-Modus während der Messung, langsamer ADC-Takt) getrieben werden. Du möchtest aber 16 Bit Auflösung speichern. Ich weiß ja nicht, wo du diese Werte her nimmst (welcher Sensor?), bezweifle aber erstmal, dass die Werte so genau erfasst sind, dass sie im 16-Bit Format gespeichert werden müssen. Zugegeben, 8 Bit unsigned (0...255) ist etwas wenig Auflösung, trotzdem für viele Zwecke völlig ausreichend (die Auflösung ist 1 zu 256, die Auflösung von Prozentangaben zum Vergleich nur 1 zu 100). Wie stark wäre denn dein Messergebnis beeinträchtigt, wenn du das untere Byte ignorierst und nur das obere speicherst? Für sehr viele Zwecke reicht dieses Raster aus, es ist immerhin zweieinhalb mal so genau wie die Angabe in Prozent. Mfg. Franz
Das mit den Adressleitungen bei externem Speicher ist doch auch nicht so wild. Man kann doch I2C Speicher nehmen wenn das von der Geschwindigkeit reicht.
die geschwindigkeit ist nicht das problem. für mich eher welches bauteil wie anschließen und unter bascom ansprechen können. gibts da irgendwie was vernünftiges?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.