Hallo,
wo finde ich eine Übersicht, welcher Befehl in Bascom wieviel Takte zur
Abarbeitung benötigt.
Ich habe einen kleinen Programmcode in einer Interruptroutine.
Bei einer IF THEN Anweisung mehr, wird der Interrupt neu gestartet befor
der Progammcode abgearbeitet ist. Wie hoch kann man den Mega16 mit dem
int. Osz. takten?
Danke, comex
comex wrote:
> Hallo,>> wo finde ich eine Übersicht, welcher Befehl in Bascom wieviel Takte zur> Abarbeitung benötigt.
Nach dieser Übersicht solltest Du den Hersteller Deines Compilers
fragen. Du wirst aber schlechte Karten haben, denn die exakte Anzahl der
benötigten Takte gibt es nur in der Sprache, die der Mega16 auch
versteht und in der er arbeitet (Maschinencode, einszueins in Assembler
notierbar). Eine Liste der ASM-Befehle mit Angabe der benötigten
Takt-Zyklen findest Du im Datenblatt des jeweiligen AVRs.
>> Ich habe einen kleinen Programmcode in einer Interruptroutine.
Dazu sind ISRs (Interrupt-Service-Routinen) ja da (für KLEINE
Programmcodes).
> Bei einer IF THEN Anweisung mehr, wird der Interrupt neu gestartet befor> der Progammcode abgearbeitet ist.
ISRs sollen möglichst sehr kurz (schnell) sein. Vermutlich enthält Deine
ISR Programmteile, die viel Zeit (viele Takte) zur Abarbeitung
benötigen. Du solltest auch berücksichtigen, dass BASCOM beim Aufruf
einer ISR sehr viel unnötige Arbeit macht, die die ISR stark (in der
Dauer) verlängert. Einer der vielen Gründe, warum ich BASCOM meide.
> Wie hoch kann man den Mega16 mit dem> int. Osz. takten?
Diese Information solltest Du im Datenblatt des Mega16 finden. Doch ehe
Du Dich für die internen 8 MHz entscheidest, solltest Du Dich mit den
Fusebits und der Calibration des internen Oszillators vertraut machen.
Mit "Mal probieren" sperrst Du Dich höchstwahrscheinlich aus Deinem
Mega16 aus.
>> Danke, comex
...
Comex,
mit etwas Glueck kannst du irgendwo ein list files rausziehenkoennen,
das den generierten ASM code zeigt. Falls die Anzahl und Anordnung der
ASM Befehle wichtig wird, solltest du dich langsam von BASCOM loesen und
ASM naeher anschauen.
Hallo und Dankeschön,
ich habe zunächst den Aufrufintervall des Interrups von 1ms auf 10ms
erhöht und das Programm läuft damit. Allerdings hätte ich alle
Zählvariablen anpassen müssen. Daher habe ich die Taktfrequenz intern
von 1MHz auf 8MHz hochgesetzt.
Jetzt läuft es auch mit einem Aufrufintervall von 1ms.
Ich werde trotzdem mal kucken wie viele Takte die Abarbeitung des
Programms in der Interruptroutine benötigt, nur um sicher zu gehen, dass
es sicher läuft ...
Comex
Naja, 1ms bei 1MHz Takt sind immerhin 1000 Takte. Da muss man schon arg
besch..eiden programmieren, um damit nicht auszukommen.
Dir ist hoffentlich bewusst, dass der Mega16 nur bei 1MHz internem Takt
automatisch calibriert. Bei 8MHz internem Takt muss die Calibration per
Anwender-Programm erfolgen. Das dazu erforderliche Calibrationsbytes
findest Du im H-Byte des Signature-Bereichs an Adresse 3 (0 für 1MHz, 1
für 2MHz, 2 für 4MHz, 3 für 8MHz). Es kann nur mit einem geeigneten
ISP-Programm ausgelesen werden und muss vom Anwender-Programm in das
Calibrationsregister OSCCAL geschrieben werden.
...
Hallo,
die Genauigkeit der Taktfrequenz ist nicht ausschlaggebend.
Ich nutze keine Serielle Datenübertragung oder Zeitkritische Funktionen.
Hier mal das Programm was während des Interrups ausgeführt wird.
Ich hätte schon gedacht das dazu 1000 Takte reichen !?
Pulse:
Timer1 = 64536
T1 = T1 + 1
If T1 > 65000 Then T1 = 65000
T2 = T2 + 1
If T2 > 65000 Then T2 = 65000
T3 = T3 + 1
If T3 > 65000 Then T3 = 65000
If Spuelen = 1 And Pumpen = 1 Then T_ein_d = T_ein_d + 1
Return
Vielleicht solltest Du die Zeilen drehen, also aus
T1 = T1 + 1
If T1 > 65000 Then T1 = 65000
If T1 < 65000 Then
T1 = T1 + 1
oder so...
Bei der Arbeitsweise von Basic wird zuerst ein Zeigerregister auf Dein
T1 gestellt danach mit ld vom Speicher geholt, dann inkrementiert, dann
mit st im Speicher geschrieben, danach mit ld aus dem Speicher
geholt(eventuell nochmal Zeiger eingestellt), danach mit 65000
verglichen usw. usw.
Das macht schon gerne jedemenge Takte bei den 3 Vergleichen.....
Wenn Du mir das nicht glaubst, schau Dir diese Seite an :
http://www.roboternetz.de/wissen/index.php/Codevergleich_AVR-Compiler
Man kann hier gut sehen, was Basic für ein Unfug treibt.
Leider haben die Bascomliebhaber kalte Füße bekommen und nicht weiter
gemacht.
Mich wundert das aber nicht.
Gruß Sebastian
Was denn 5 Takte um eine 16 Bit Variable aus dem SRAM zu holen mit einer
16 Bit Konstanten zu vergleichen, ev. inkrementieren un wieder in Sram
schreiben ?
LOL ich glaub, ich lade mir Bascom runter, das ist ja Hammer
Sebastian wrote:
> Was denn 5 Takte um eine 16 Bit Variable aus dem SRAM zu holen mit einer> 16 Bit Konstanten zu vergleichen, ev. inkrementieren un wieder in Sram> schreiben ?>> LOL ich glaub, ich lade mir Bascom runter, das ist ja Hammer
Es liegt nicht an BASCOM, sondern an der Kreativität seiner Benutzer.
;-)
...
genau bascom sieht auf den ersten blick ganz easy aus,
aber man braucht jahre um den compiler richtig händeln zu können.
ich schreibe auch programme in C für den C 167 und nutze
µVision auch super,aber dieses Winavr lol hartz4 compiler brrrrr.
Hi
@Paul: Ähnlichen Blödsinn kannst du wahrscheinlich mit jeder 'höheren'
Programmiersprache erzeugen. Wieder ein Grund mehr bei Asm zu beleiben.
MfG Spess
@ Spess53 (Gast)
>Programmiersprache erzeugen. Wieder ein Grund mehr bei Asm zu beleiben.
Du hast den Sinn/Vorteil von Hochsprachen noch nicht verstanden. Der
Verwaltungsaufwand, Typprüfung, etc. wird in ASM irgendwann nicht mehr
beherrschbar. Von Protabilität mal ganz zu schweigen.
MfG
Falk
Hi
@Falk: Ich habe das durchaus verstanden. Für PC-Programme benutze z.B.
Delphi. Allerdings gab es schon Fälle,wo ich auch dort auf Assembler
ausweichen musste (die Entwickler von Delphi übrigens auch).
Meine Assemblerprogramme steuern Anlagen im Wert 10000€ aufwärts(etliche
100k€ sind keine Seltenheit). Bisher problemlos.
Incl.Grafikdisplay,Touchscreen und Fernsteuerung über PC.
Reiner Programmcode ca. 9k. Vielleicht solltest du dir mal dir
Möglichkeiten moderner Macroassembler ansehen.
Zur Portierbarkeit: Zeige mir bitte ein Programm, das ohne Änderungen
auf einem PC,PIC,AVR,MSP läuft.