PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Unterprogrammen mit Bascom und Timer



nowayz
15.01.2009, 01:12
Hallo,

Ich habe nur zwei relativ einfache Fragen, habe im Wiki leider auf die Schnelle nichts gefunden.

1.) Ich habe einen Timer, der mir in festen Zeitabständen Werte von einem Sensor liefert. In bestimmten Programmteilen möchte ich den Timer allerdings deaktivieren, also keine neuen Werte bekommen.
Ist der kritische Programmcode übersprungen soll der Timer wieder wie zuvor arbeiten. Geht das? Wenn ja, wie?

2) Ich habe bisher nur kleinere Programme mit Assembler geschrieben und habe da Unterprogramme mit "jmp xxx" aufgerufen. Bei Bascom gibt es aber einige Befehle (GoTo GoSub, Sub...). Was bewirken diese?

3) Ich steuere mit meinem Programm wie gesagt einen Schrittmotor. Bisher Toggle ich einfach den Clock-Pin der L297/298 Steuerschaltung um einen Schritt zu machen. Nun habe ich hier was von PWM gelesen. Brauche ich das zwangsläufig für Schrittmotoren oder ist meine Lösung auch ok?

4) Ich habe eine Variable, die sich aus der Differenz von zwei Zahlen zusammensetzt. Diese kann also auch negative Werte annehmen. Wie muss diese Dimensioniert werden? Integer?

Bei mir sieht das so aus: Ich habe ein Hauptprogramm, dass einen Motor steuert, Hat der Motor dann irgendwann die gewünschte Position möchte ich etwas anderes machen (Unterprogramm?).

Danke für die Hilfe!

Vitis
15.01.2009, 16:33
zu 1) disable timerx

zu 2) goto= springe an Programmstelle (schlechter Stil)
gosub = gehe in Subroutine (Unterprogramm) und springe nach Ausführung desselben wieder an diese Stelle zurück (guter Stil)

zu 3) Die PWM ist für Schrittmotoren nicht geeignet, Pin toggeln ist besser wie gehabt.

zu 4) Wertebereich von Byte = 0-255, Word = 0-65535, ineger -32768 bis 32767. Für Vorzeichenbehaftete Ganzzahlen ist ergo Integer richtig.

nowayz
15.01.2009, 17:06
zum Timer:
Also kann ich in bestimmten programmteilen den Timer deaktivieren und dann par zeilen später wieder aktivieren?
fängt der Timer dann wieder von vorne an zu zählen, oder macht er da weiter wo er aufgehört hat? muss ich ausser disable timerx / enable timer0 noch was beachten?

Muss ich bei subroutinen parameter übergeben oder kann ich in der subroutinen die ganz am anfang definierten Variablen überschreiben/bearbeiten?


DANKE!

PicNick
15.01.2009, 17:27
Alles, was du im Bascom mit "DIM" definierst, kannst von von jeder Stelle des Programms aus lesen/ändern.
( Im Gegensatz zu "LOCAL" definitionen)
Eine "Sub" ohne Argumente ist effektiv dasselbe wie eine "GOSUB" Routine.

Timer deaktivieren: er bleibt stehen, wo er ist und macht dann dort wieder weiter. (die Zeit wir dadurch aber länger, logo)

nowayz
16.01.2009, 03:05
letzte Frage:

Wie viel Zeilen Code entsprechen die 4kb, die man mit der demo verwenden kann?
Meine Hex-Files sind jetzt schon 5kb, aber die gehen trotzdem noch auf den controller...?!

PicNick
16.01.2009, 09:15
HEx-Files sind etwa 1 Byte prog --> 2 Byte Hexfile + etwas overhead

Codezeilen versus Kb : kommt bei Hochsprachen immer drauf an, was in der Zeile steht
Da sind ein paar Beispiele, was Bascom so alles aus Code-Zeilen macht, wenn er gut drauf ist
https://www.roboternetz.de/wissen/index.php/Bascom_Inside-Code