mikrocontroller.net

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


Autor: comex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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

...

Autor: SQX (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: comex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: comex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: comex (Gast)
Datum:

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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/Codever...
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

Autor: bascom-looser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man das richtig macht braucht bascom genau 5 Takte.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

;-)

...

Autor: bascom-looser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: bascom-looser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Sebastian nööööööööööö Betriebsgeheimniss!!

Autor: Sebastian (Gast)
Datum:

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

Autor: Paul Baumann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

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

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.