mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenz AVR: wie testen


Autor: schon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

gehe ich richtig in der Annahme, dass folgendes Bascom-Listing:

Do
Portc.0 = 0
Portc.0 = 0
Portc.0 = 1
Portc.0 = 0
Portc.0 = 0


Loop
End

Portc.0 für exakt einen Tak einschalten müsste? Der AVR läuft mit 16 
MHz, aber die Eins im obigen Beispiel dauert komischerweise 2 Takte... 
Wie kann das sein?

Autor: Sven S. (badphantom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sieh Dir mal das Dissambly an, wenn möglich. Vermutlich werden zwei 
Operationen durchgeführt.
Der Port ist vermutlich 8 bit breit (?)

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven Schaumann schrieb:
> Vermutlich werden zwei Operationen durchgeführt.

da der verwendete µC-Typ mal wieder ein Geheimnis zu sein scheint, muss 
ich zwar raten, aber imo dürfte ein Blick ins Datenblatt der meisten 
8Bit-AVRs zeigen, dass das Setzen/Löschen eines Bits zwar mit einem 
Befehl erfolgt, der aber zwei Takte braucht...

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>da der verwendete µC-Typ mal wieder ein Geheimnis zu sein scheint, muss
>ich zwar raten, aber imo dürfte ein Blick ins Datenblatt der meisten
>8Bit-AVRs zeigen, dass das Setzen/Löschen eines Bits zwar mit einem
>Befehl erfolgt, der aber zwei Takte braucht...

Der Controller ist ein AVR (welcher genau, dürfte keine Rolle spielen, 
da die sich im Setzen von Ports eher unwesentlich unterscheiden).
Interessant ist eher, was der Bascom-Compiler aus der Zeile macht.
Andere Compiler würden das Setzen eines einzelnen Portpins durch SBI 
(oder wie der Befehl in Assembler heissen mag) ersetzen.
Deswegen wäre das von Bascom erzeugte Assembler-Listing interessant.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
STK500-Besitzer schrieb:
> Andere Compiler würden das Setzen eines einzelnen Portpins durch SBI
> (oder wie der Befehl in Assembler heissen mag) ersetzen.

Ein Blick ins Datenblatt verrät:
CBI und SBI brauchen 2 Takte
(Habs auch nicht geglaubt, bis ich es gesehen habe)

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:

> Ein Blick ins Datenblatt verrät:
> CBI und SBI brauchen 2 Takte
> (Habs auch nicht geglaubt, bis ich es gesehen habe)

das meinte ich ja...ich wollte mich nur nicht zu weit aus dem Fenster 
lehnen und behaupten, dass das für alle AVRs gilt. Und egal was BASCOM 
macht, schlußendlich muss es die verfügbaren Instructions benutzen (bzw. 
ich wüsste nicht wie etwas anderes gehen sollte) und damit kann es auch 
nicht schneller als diese zwei Takte gehen...

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>das meinte ich ja...ich wollte mich nur nicht zu weit aus dem Fenster
>lehnen und behaupten, dass das für alle AVRs gilt.

Gilt auch nicht für alle. Ausnahmen sind: XMega und ATTiny10 mit einem 
Takt.

MfG Spess

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ein Blick ins Datenblatt verrät:
>CBI und SBI brauchen 2 Takte
>(Habs auch nicht geglaubt, bis ich es gesehen habe)

Wieder was gelernt... ;)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zur ursprünglichen Frage: wenn dein AVR eine CKOUT-Fuse hat (neuere
Typen), dann setze sie, und du bekommst den internen CPU-Takt an
einem Portpin heraus geführt -- ganz und gar ohne BASCOM oder C oder
Assembler. ;-)

Wenn nicht, dann bleibt immer noch die Möglichkeit, einen Timer in
den CTC-Modus zu versetzen, `toggle OCx on compare match' als
Funktion zu Programmieren, und das zugehörige OCRx auf 0 zu
programmieren.  Dann liefert der OCx-Pin (den man natürlich auf
Ausgang programmieren muss) f[CPU]/2.  (Alternativ kann man natürlich
auch OCRx auf 499 programmieren, dann wird f[CPU]/1000 am Ausgang
geliefert.)

Autor: schon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jâ, es ist SBI, was zwei Takte braucht. Wusste ich gar nicht. Mist. 
Naja, Danke!

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.