Forum: Mikrocontroller und Digitale Elektronik Benötigte Take / Befehl /ATMega16


von comex (Gast)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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

...

von SQX (Gast)


Lesenswert?

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.

von comex (Gast)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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.

...

von comex (Gast)


Lesenswert?

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

von comex (Gast)


Lesenswert?

Ähm, vieleicht sollte ich den Timer erst vor dem Return zurück setzten 
...

von Sebastian (Gast)


Lesenswert?

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

von bascom-looser (Gast)


Lesenswert?

Wenn man das richtig macht braucht bascom genau 5 Takte.

von Sebastian (Gast)


Lesenswert?

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

von Hannes L. (hannes)


Lesenswert?

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.

;-)

...

von bascom-looser (Gast)


Lesenswert?

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.

von Sebastian (Gast)


Lesenswert?

Laber hier kein Müll, sondern bring mal Beweise, wie Dein Bascom in 5 
Takten die Aufgabe meistert, das würde mich wirklich interessieren...

von bascom-looser (Gast)


Lesenswert?

@Sebastian nööööööööööö Betriebsgeheimniss!!

von Sebastian (Gast)


Lesenswert?

Gut, also doch nur sinnloser Spam, was Du da erzählst, und ich dachte 
endlich jemand, der mich von Bascom überzeugen kann ;-)

von Paul Baumann (Gast)


Angehängte Dateien:

Lesenswert?

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

von Benedikt K. (benedikt)


Lesenswert?

Was macht der "Compiler" mit r30,31 ?
Eine Variable an fester Adresse mit indirekter Adressierung speichern: 
sehr effizient.

von Spess53 (Gast)


Lesenswert?

Hi

@Paul: Ähnlichen Blödsinn kannst du wahrscheinlich mit jeder 'höheren' 
Programmiersprache erzeugen. Wieder ein Grund mehr bei Asm zu beleiben.

MfG Spess

von Spess53 (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@ 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

von Spess53 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.