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
Ähm, vieleicht sollte ich den Timer erst vor dem Return zurück setzten ...
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.
Laber hier kein Müll, sondern bring mal Beweise, wie Dein Bascom in 5 Takten die Aufgabe meistert, das würde mich wirklich interessieren...
Gut, also doch nur sinnloser Spam, was Du da erzählst, und ich dachte endlich jemand, der mich von Bascom überzeugen kann ;-)
Damit ihr Euren Spaß habt, ihr Lästermäuler. (GRINS) Hier ist ein Beispiel in Bascom und das, was der freundliche Compiler daraus erzeugt. MfG Paul
Was macht der "Compiler" mit r30,31 ? Eine Variable an fester Adresse mit indirekter Adressierung speichern: sehr effizient.
Hi @Paul: Ähnlichen Blödsinn kannst du wahrscheinlich mit jeder 'höheren' Programmiersprache erzeugen. Wieder ein Grund mehr bei Asm zu beleiben. MfG Spess
Hi sollte heissen: ...bei Asm zu bleiben. P.S. das 5 Takte-Programm würde mich auch ganz heiss interessieren (vor allem der ASM-Code). 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.
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.