Na kommt Jungs und Mädels, laßt mich nicht hängen
Jo, Hallo erstmal, ein interessantes Forum habt Ihr hier
Meine Erfahrungen beschränken sich bis jetzt leider nur auf die C-Control micro, und die ist für mein nächstes Vorhaben nicht geeignet.
Die zeitkritischste Funktion wird dabei sein, eine Eingangsfrequenz von ca 500-2000 Hz zu messen, und im Bereich bis 1500 Hz 1:1 wieder auszugeben, darüber hinausgehende Frequenzen müssen bewertet werden und sollen zwei PWM-Ausgänge über eine Kennlinie ansteuern.
Das ganze sollte in Echtzeit funktionieren, wenn möglich im 1/100 Sekunden-Bereich.
Da der Controller noch weitere, aber weniger zeitkritische Funktionen ausführen soll, schwebt mir ein mega8 vor.
Nun die Frage: bekomme ich die Funktionen mit dem Bascom hin, oder sollte ich mich gleich mit der Assemblerprogrammierung vertraut machen? Wie hoch sollte die Taktfrequenz gewählt werden?
PS: In den ganz hintersten Gehirnzellen gibt es auch noch Erinnerungen an die Assemblerprogrammierung meines ersten Rechners, mit einer U880 CPU (Z80) von daher hab ich auch noch in etwa einen Plan, was interrupts sind und wie man sie verwendet...
Auch wenn das Prob weniger mit Robotern zu tun hat, hoffe ich auf Eure Antworten
greetz Rajko
Na kommt Jungs und Mädels, laßt mich nicht hängen
Den ATMega kannst du bis 16 MHz takten und die AVRs brauchen laut Datenblatt für die meisten Instruktionen nur einen Takt.Nun die Frage: bekomme ich die Funktionen mit dem Bascom hin, oder sollte ich mich gleich mit der Assemblerprogrammierung vertraut machen?
Unter dieser Voraussetzung sind 2kHz nicht so schrecklich viel und eine 1/100 Sekunde relativ viel Zeit.
Verglichen mit CBasic ist Bascom wesentlich schneller, da es ein Compiler und kein Interpreter ist. Obs mit Bascom schnell genug ist hängt aber davon ab, was der Controller ganz genau machen soll und wie du das programmierst.
Offensichtlich solls ja noch ein bischen mehr sein als du oben beschreibst und selbst wenn die anderen Funktionen nicht zeitkritisch sind müssen sie irgendwann abgearbeitet werden.
Wenn du Kenntnisse in Assembler hats, kannst du die kritischen Routinen aber notfalls selber in Assembler schreiben und in Bascom einbinden.
Interessant ist für das was du vorhast vermutlich auch noch, ob der ATMega genug Interrupts und PWM Ausgänge hat. Das lässt sich im Datenblatt einfach rausfinden.
Was (ausser ein bischen höherer Stromverbrauch) spricht dagegen einfach die höchste Taktfrequenz (16 MHz) zu verwenden?Wie hoch sollte die Taktfrequenz gewählt werden?
Warum nicht gleich C? Das ist hardwarenäher als Basic und auch für zeitkritisches besser geeignet aber schöner wie Assembler. Kommt zwar an Assembler auch net ran, aber an ASM kommt nur ASM ranNun die Frage: bekomme ich die Funktionen mit dem Bascom hin, oder sollte ich mich gleich mit der Assemblerprogrammierung vertraut machen?
Danke euch beiden!
erstmal @bluebrother: mir liegt basic viel mehr als C. Ich mache auf Arbeit viel mit VBA und unser Reglersystem benutzt eine BASIC-Abart...
und wenn noch mal was neues lernen, dann gleich ASM
@recycle: Wegen der Taktfrequenz hab ich gefragt, weil ich davon ausgegangen bin, das ich die Ausgangsfrequenz durch interne Teiler direkt herunterteilen kann und dann direkt ausgebe. Bei den microcontrollern ist es wohl so üblich, das ich einen relativ schnellen zyklischen Interupt erzeugen lasse, mitzähle und dann übers Programm einen Port ein- und ausschalte. (?)
Dann scheint mir auch eine Kombination von BASIC und ASM sinvoll. Das Basic müßte dann die Periodendauer berechnen und an das Sub übergeben. Geht das einigermaßen elegant?
Für die Frequenzmessung gibt es Zähler, die ich in einem festen Zeitraster auslese und dann wieder auf 0 setze, richtig?
für die anderen Funktionen bleibt mir noch die Frage, ob sich per Interupt auch BASCOM-prozeduren starten lassen? Wenn ja, kann ich dann auch Prioritäten zuordnen? d.h. höchste prio- frequenzerzeugung (ASM) dann frequenzmessung (ASM), 3. Prio Rest (BASCOM)
Vielleicht noch ein paar Worte was das überhaupt soll:
Es soll eine Ergänzung zur Motor - ECU meines Autos werden, die ich sicher auch fertig kaufen könnte, aber ca. 1000 $ sind mir zu schade dafür die 3 notwendigen Geräte bei Ebay zu kaufen
der Frequenzwert kommt vom Luftmassenmesser und muß bei einer Frequenz von 1500Hz nach oben begrenzt werden, sonst geht die Motorelektronik von einem fehlerhaften Signal aus und unterbricht die Spritzufuhr ('fuelcut'). Oberhalb dieser Frequenzen soll über eine table mit vielleicht 20 steps ein Prozentwert von 0-100% berechnet werden, der über einen PWM-Port eine Zusatz-Einspritzdüse ansteuern soll (mehr Leistung braucht auch mehr Sprit). Als drittes soll noch ein einfacher Regelkreis für den Turbo-Ladedruck ( 0-5V-Signal input, PWM output) implementiert werden (irgendwo muß ja die Mehrleistung herkommen ).
greetz Rajko
Lesezeichen