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.
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:> ...> ##############################################> 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
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.
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.