Ich habe ein kleines Projekt zur Temperaturregelung und dabei voll auf den Tiny13 gesetzt. Jetzt ist das Material für 4 Exemplare da und die Platinen in Arbeit. Leider passt der Code nicht auf den Tiny.. Ich programmiere in Bascom und frage mich nun ob es in Assembler passen würde. Leider habe ich so gut wie keinen Plan von Assembler.. Ich habe übrigens schon alle Variablen weggelassen und durch feste Werte ersetzt, nützt nix. Ich komme immer über 105% Flash raus. Eigentlich sollte noch ein Taster und ne LED ran und evtl noch... Was sagen die Assembler Pro's?
tinywill! schrieb: > Leider passt der Code nicht auf den Tiny kein wunder bei dem Datentype Single schmeiss das raus, dann geht es auch in Bacom oder C.
1. Der Tiny13 hat 1KB Flash, 64 Byte SRAM, 64 Byte EEProm. Wieso hast du dich nicht für den Tiny85 entschieden, mit 8KB Flash, 512 Bytes SRAM und 512 Byte EEProm ??? Übrigens ist das Pinout von Tiny13 und Tiny85 das gleiche...man kann also austauschen ohne Platine zu ändern. 2. Wieso programmierst du den Tiny nicht in C? Das ist nicht so kompliziert wie Assembler, dafür von der Speichernutzung bestimmt besser als Bascom. Vermute ich jetzt einfach mal...
tinywill! schrieb: > Die Variable 2 nimmt er nur als Single alles Singles raus, sobalt eines drin ist ist es schon zu spät. In ASM hättest du überhaupt kein Single oder vergleichbares.
Peter II schrieb: > In ASM > hättest du überhaupt kein Single oder vergleichbares. was ist mit AvrLib floating point...?
Hammel schrieb: > was ist mit AvrLib floating point... ist das denn ASM? Verwendet jemand diese lib etwas mit ASM? Schau doch mal die verwendung von dem Single an, das macht überhaupt keinen sinn. Wenn er mal testweise byte daraus macht, ist der code bestimmt nur noch 1/10 so gross.
tinywill! schrieb: > Leider habe ich so > gut wie keinen Plan von Assembler.. > Variable2 = Variable1 / 2 Aber von Variablen auch nicht. Für eine Halbierung einer Byte-Variablen braucht man keine Single.
Oh Gott, ich Hirni hab das parallel auf Atmega8 laufen und die falsche Datei kompiliert.. Beim Mega8 will Bascom das Single nicht, beim Tiny gehts. Habe das verwechselt und wieder mal zu schnell gepostet, sorry. Der Flash ist nur noch zu 58% voll, geil! Kann ich meinen Taster doch noch ranmachen.
Hammel schrieb: > @Peter: aus Asm nutzbar, frage deinen Linker.. wo ist die passende doku damit ich die labels finden kann? Wie binde ich die lib in ein ASM Projekt ein? Da habe ich keinen linker.
tinywill! schrieb: > Der Flash ist nur noch zu 58% voll, geil! Kann ich meinen Taster doch > noch ranmachen. ändere auf jeden fall den Datentyp dann hast du noch viel mehr Platz und es wird auch schneller.
Hi >Die Variable 2 nimmt er nur als Single. Alles andere war schon raus. Dann solltest du diese Zeile: >Variable2 = Variable1 / 2 mal überdenken. Bascom kann bestimmt auch Ganzzahl-Division. MfG Spess
Einfachste Variable verwenden. Statt Variable/2 einfach nach rechts schieben. Die Zeilen: 1wreset '1wire Bus Reset senden 1wwrite &HCC in ein Unterprogramm stecken. Und dein Wait-Bafehl in Assembler schreiben, das geht auch für Anfänger. Joe
Das Programm läuft doch nicht wie es soll. Mit dem wait geht es nicht, am Ausgang liegt immer voller Pegel. Wenn ich das wait weglasse macht der Ausgang was er will, mal an mal aus. Am Mega8 hatte ich vorher ein LCD und konnte die Werte kontrollieren, jetzt "sehe" ich nichts mehr. Achja, wie macht man wait in Assembler?
tinywill! schrieb: > wie macht man wait in Assembler? Möglichst gar nicht, höchstens für ganz kurze Zeiten im µs-Bereich. Denn für alles Andere gibt es Timer. Der Anfänger, der sich noch nicht an Timer herantraut, kann Warteschleifen programmieren. Das sind Zählschleifen, die einfach nur Register (Variablen) hoch oder besser herunter zählen und damit die CPU für eine genau definierte Zeit beschäftigen. Um diese Zeit zu berechnen, addiert man die von jedem Befehl benötigten Zyklen und verrechnet sie mit der Taktfrequenz. Weiß man noch nicht, welcher Befehl wieviele Zyklen dauert, dann schaut man im Datenblatt des Controllers unter "Instruction Set Summary" nach. Als Anfänger sollte man sich diese Tabelle ausdrucken und als Arbeitsblatt benutzen, ebenso wie die Tabelle "Register Summary", in der die I/O-Register und deren Bits beim Namen genannt werden. Weitere Infos gibt es sicherlich hier: http://www.mikrocontroller.net/articles/AVR-Tutorial Ich benutze dieses Tutorial zwar schon seit Jahren nicht mehr, aber ich kann mir nicht vorstellen, dass dieses Tutorial das Thema Warteschleifen nicht behandelt. ...
Hi, was für ein Bascom ist das? Ganz alte Versionen können nur Byte für wait. Ansonsten poste mal den aktuellen Code. Das obige kann nicht gehen, compiliert nichtmal weil Temp nicht deklariert ist. Wenn ich richtig sehe reichen Byte für alle Variablen. Mach das mit dem Elseif bitte anders. Ich weiß nicht was Albert sich dabei gedacht hat, das ist ein so fehlerträchtiges Kontrukt. Edit: Select case ist Dein Freund für sowas. Dein Temp wird nirgendwo benutzt, das ist immer 0. Also poste mal bitte den aktuellen Code. Gruß, Norbert
tinywill! schrieb: > ... > Der Flash ist nur noch zu 58% voll, geil! Kann ich meinen Taster doch > noch ranmachen. > Wenn das das ganze Programm ist, was DU oben im ersten Posting hinterlegt hast, dann kann ich nur dem Vorposter Hammel zum Punkt 1 zustimmen. Beitrag "Re: Bascom vs. Assembler" Hätte nicht gedacht, das BASCOM soviel Programmspeicher braucht. Das es langsam ist schon. Bin zwar nicht der Assemblerexperte, aber denke das man da sehr sehr viel weiniger Programmspeicher für das bischen Software benötigt. Bernd_Stein
Bernd Stein schrieb: > Hätte nicht gedacht, das BASCOM soviel Programmspeicher braucht. > Das es langsam ist schon. > Bin zwar nicht der Assemblerexperte, aber denke das man da sehr sehr > viel weiniger Programmspeicher für das bischen Software benötigt. Ach du Schlaumeier, es ist nicht die Schuld von Bascom wenn er nicht programmieren kann. Mit einer anderen Sprache wird es da kaum besser. Außerdem war dieses Programm noch nicht mal kompilierbar. Mit ein paar Änderungen kommt das raus: ############################################## Compiler : BASCOM-AVR LIBRARY V 2.0.7.3 Processor : ATTINY13 SRAM : 40 hex EEPROM : 40 hex ROMSIZE : 400 hex ROMIMAGE : 224 hex -> Will fit into ROM ROMIMAGE : 548 dec FLASH USED : 53 % ############################################## Schaffst du das auch?
Hi, das liegt an der Single-Rechnerei, das bläst den Code bei jedem Compiler auf. Bascom mag da vielleicht nicht das Optimum sein aber ist soo schlecht auch nicht. Ich hatte mal einen Vergleich mit einem Forumsmitglied hier gemacht (das war in einem anderen Forum) und Bascom ist da nur in wenigen Dingen verschwenderischer und langsamer als Keil gewesen und das war dann auch nur marginal. Langsam ist Bascom nur bei Ints, weil alle Register per default gesichert werden. Das kann man aber auch abschalten, wenn die ca 50 Takte weh tun. Meist ist das aber egal. Das Imageproblem von Bascom ist, daß auch absolute Anfänger damit recht schnell zu Ergebnissen kommen und dann hier absolut dämliche Fragen mit Murks-Code auftauchen. Die Sache mit den Single hier ist ein gutes Beispiel, absoluter Schwachsinn und das fällt auf Bascom zurück. Gruß, Norbert
Fox Mulder schrieb: > Mit ein paar > Änderungen kommt das raus: Mit Select case komme ich auf 10 Byte weniger.
Fox Mulder schrieb: > ... > ############################################## > Compiler : BASCOM-AVR LIBRARY V 2.0.7.3 > Processor : ATTINY13 > SRAM : 40 hex > EEPROM : 40 hex > ROMSIZE : 400 hex > > ROMIMAGE : 224 hex -> Will fit into ROM > ROMIMAGE : 548 dec > FLASH USED : 53 % > ############################################## > > Schaffst du das auch? > Wie bereits geschrieben - ich bin kein Assemblerexperte. Von BASCOM habe ich gar keine Ahnung und weiß auch gar nicht, ob das angehängte Programm überhaupt lauffähig ist. Aber das bischen was ich da glaube zu verstehen, sind in Assembler ein paar Bytes des Programmspeichers. Wahrscheinlich unter fünfzig. Bei hundert Bytes, wärs knapp 10% des Programmspeichers. Bernd_Stein
Bernd Stein schrieb: >Aber das bischen was > ich da glaube zu verstehen, sind in Assembler ein paar Bytes des > Programmspeichers. Wahrscheinlich unter fünfzig. > Bei hundert Bytes, wärs knapp 10% des Programmspeichers. Vorsicht! Die paar Vergleiche sind in ASM schnell erledigt, aber ob man die 1-Wire-Ansteuerung mit "ein paar Bytes" erschlagen kann waage ich mal zu bewzweifeln...
Bernd Stein schrieb: > sind in Assembler ein paar Bytes des > Programmspeichers. Dann mach das doch mal eben in Assembler. Nix unterschlagen bitte, in dem Programm hat wohl noch nicht alles seinen Sinn.
Mag sein das ich ein blutiger Anfänger bin und viele Befehle usw. (noch) nicht kenne. Eines ist jedoch fakt: Mein Programm lief auf einem Mega8 problemlos, auf dem Tiny geht es nicht. Auch eure zugegebenermaßen besseren Versionen haben das selbe Problem. Mein Code war vielleicht 5% grösser, die Probleme sind dieselben. Entweder pulst der Ausgang im Takt von etwa 1 s oder das Programm hängt sich ganz auf. Meine Vermutung ist das es an dem Wait-Befehl liegt. Schon mal wegen dem 1 s Puls. Wenn ich das Wait ganz rausnehme geht gar nix mehr, hängt sich direkt auf. Leider habe ich keine guten Messmittel, nur ein Multimeter und ne Stoppuhr ;-) Deshgalb hatte ich es vorher auf nem Mega8 probiert, mit nem LCD dran, da konnte ich mir dann ein paar Werte anschauen. Der Contoller funktioniert übrigens mit anderen Programmen super, auch die Fuses sind bestimmt richtig gesetzt. Trotzdem vielen Dank für eure Interpretationen, habe da auch wieder was von gelernt :-)
tinywill! schrieb: > Meine Vermutung ist das es an dem Wait-Befehl liegt. Schon mal wegen dem > 1 s Puls. Wenn ich das Wait ganz rausnehme geht gar nix mehr, hängt sich > direkt auf. Typischer Anfängerfehler, Ursache und Wirkung verwechselt. Wahrscheinlich liegt es am Stack. Das hier wäre besser: $hwstack=10 $swstack=8 $framesize=24 Der Simulator hat mit den alten Werten auch gemeckert.
Hi, welche Bascom Version benutzt Du denn? Wenn uralt dann probier mal wait 1 statt waitms 1000. Der Quellcode von ganz oben compiliert nicht! Das kann auf dem Mega8 so nicht gelaufen sein. Lass das mal mit der PWM weg sondern lass ne LED blinken je nach Zustand. Ich vermute, daß der PWM-Kram beim Tiny13 nicht so tut wie Du willst. Das ist bei Bascom leider alles nicht so toll mit den Timern, ich setze dafür die Register immer manuell. Gruß, Norbert
Fox Mulder schrieb: > Wahrscheinlich liegt es am Stack Der wird doch gar nicht genutzt. Kein Sub, kein Int, nix.
Norbert S. schrieb: > Der wird doch gar nicht genutzt. Kein Sub, kein Int, nix. Eben, das ist ja das fatale an BASCOM, ein CALL <sub> sieht der Anwender nicht. Und wenns nicht läuft, wird hier solange gepostet, bis ein erfahrener Programmierer sagt, er solle die Stackgrösse mal hochsetzen :-)
Norbert S. schrieb: > Der wird doch gar nicht genutzt. Kein Sub, kein Int, nix. Aber die 1wire-Befehle brauchen wohl etwas. Schau dir das mal mit dem Simulator an, ganz unten steht da "Frame or stack overlap". Bei $framesize=24 ist das weg.
Norbert S. schrieb: > Kein Sub, kein Int, nix. Das glaubst aber nur du. Schau dir mal ein BASCOM-HEX mit dem AVR Studio als Disassembling an, da kannst du schön sehen, wie die einzelnen Basic-Befehle ihre Unterroutinen aufrufen. Und das braucht auch den Stack.
Kein Unterschied, echt! Mal tut es eine Weile was es soll, also die drei Stufen schalten. Die gedimmte ist immer von dem 1 s Takt überlagert. Habe eine Spule an den Ausgang gemacht und messe jetzt die halbe Spannung mit dem 1 s Takt drauf. Und es hängt sich immer auf, garantiert in unter 2 min. Also jetzt "Simulator vs. Praxis"??
ahh, 1wire hatte ich nicht auf dem Schirm. Es wäre wirklich schön, wenn Bascom das mal automatisch machen könnte. Ich drehe das immer ziemlich weit hoch um diese Probleme zu vermeiden aber ich mache auch fast nichts unter Mega8, da hat man ja genug RAM.
Ne, Ausgang --> Logiclevel FET mit 120 RGate und 82k pulldown. Der FET schaltet halt einen Step-down, an dem hängt die Last (3 PC Lüfter).
Ich bin der Lösung auf der Spur (Achtung! Gefährliches Halbwissen!). Ich habe das Wait durch ein for i = 1 to 50 , nop , next ersetzt. Das Programm läuft jetzt und bleibt auch nicht mehr stecken. Warum weiss ich nicht. Ein Problem gibt es noch, Im Bereich "Dimmung" wackelt meine Ausgangsspannung noch, da stimmt etwas nicht. Es ist aber nicht die "Pause" die Schleife macht. Ich habe die Werte für i (Long) zwischen 50 und 10000 geändert, es ergibt sich kein zeitlicher Zusammenhang. Würde zugerne die Spannung des Ausgangspins mit dem Oszi anschauen.. Kann es sein das ich soetwas wie Hysterese brauche? Eigentlich war die ja durch die 0,5 °C Genauigkeit gegeben. Und ändern die Select Befehle daran denn etwas ?
Norbert S. schrieb: > Es wäre wirklich schön, wenn Bascom das mal automatisch machen könnte. Schau dir dazu mal die Anweisung "STCHECK" von BASCOM an, dann weißt du, worum es geht.
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.