mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenz Tiny 15


Autor: Uwe Blank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich arbeite gerade mit dem tiny 15 und versuche die Taktfrequenz
zu ermitteln, anbei eine Schleife mit der ich
den Ausgang ein und ausschalte .
Ich bin der Meinung das durch diese Schleife die Frequenz :10
am Ausgang anliegen müsste, da der Prozessor doch 10 Taktzyklen zum
abarbeiten braucht ?

schleife:
  cbi   portb,4
  nop
  nop
  sbi  portb,4
  nop
  nop
  rjmp  schleife
Bin nur unsicher weil ich den Tiny 15 übers osccal von 1,3 bis 2,7 MHZ
einstellen kann.
Bitte um Hilfe.

Mfg Uwe

Autor: Jangomat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube, das sind nur 8 Taktzyklen (6-Eintaktbefehle;
1-Zweitaktbefehl).
Kannst Du aber mit AVR-Studio im simulator testen oder noch einfacher
im Datenblatt nachschauen, wieviele Taktzyklen diese Befehle benötigen.

Autor: Dave (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du musst das sbi eins weiter runter schreiben...

cbi 1er
1 nop
1 nop
1 nop
sbi 1er
1 nop
2 rjmp
cbi 1er
1 nop
1 nop
1 nop
sbi 1er
1 nop
2 rjmp

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Leute!

CBI und SBI brauchen 2 Takte (laut Datenblatt und Hilfe von
AVR-Studio).

schleife:
  cbi   portb,4   ;  2
  nop             ; +1
  nop             ; +1
  sbi  portb,4    ; +2
  nop             ; +1
  nop             ; +1
  rjmp  schleife  ; +2
                  ;---
                  ; 10 Takte

Das passt dann mit den 10 Takten und man müßte an PB4 bei Standard
1,6MHz eine Frequenz von 160KHz messen können.
Mehr als die 2,7MHz über OSCCAL geht sowieso nicht.
Wenn Du Timer machen willst, kannst Du das mit dem Register TCNT1 oder
TCNT0 auch justieren.
Allerdings, wenn Du über OSCCAL den Systemclock auf über 1,75MHz
einstellst, gibt es Fehlfunktionen mit dem Timer und evtl. auch der
I/O.
Im Datenblatt steht mehr darüber.

Gruß
Andi

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wenn du EEPROM nutzen willst, dann solltest du auf 1,6MHz
kalibrieren, siehe Datenblatt.

An besten nimmst du das vom Hersteller mitgelieferte
Calibrationsbyte...

...HanneS...

Autor: Uwe Blank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo dankeschön ich war nur verunsichert weil im Datenblatt was von 800
khz bis 1 mhz steht und mein Englisch nicht das beste ist.
Aber habe jetzt herausgelesen das der Calibrierungsbyte wert von Atmel
den Tiny15 auf 1,6 Mhz stellt.

Mfg
Uwe

Autor: Winfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dran denken: Mein Beobachtung beim ATtiny 12: cbi schaltet am Ende des
2.Taktes, während sbi in der Mitte des Befehls schaltet, also schon
nach einem Takt. Damit kommt es zu einer Verschiebung, was man am
Tastverhältnis sieht. Will man also gleiches Tastverhältnis haben, muss
die Schleife so aussehen:

schleife:
  cbi   portb,4   ; +2
  nop             ; +1
  nop             ; +1
  nop             ; +1
  nop             ; +1
  sbi  portb,4    ; +2
  rjmp  schleife  ; +2
                  ;---
                  ; 10 Takte

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie Dave schon meinte ist es genau so:

schleife:
  cbi   portb,4   ; +2
  nop             ; +1
  nop             ; +1
  nop             ; +1
  sbi  portb,4    ; +2
  nop             ; +1
  rjmp  schleife  ; +2
                  ;---
                  ; 10 Takte

Dann sind es immer genau 5 Takte für CBI und SBI.
Aber da es dem Messgerät wegen einer länger Einschaltzeit anscheinend
sowieso egal ist (Verhltnis 60/40), hätte ja sonst nicht die 1,3 bis
2,7MHz messen können, ist es jetzt ja wurscht.

Gruß
Andi

Autor: Winfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andi: Ich glaub, du hattest mich nicht verstanden. cbi/sbi brauchen
zwar beide zwei Takte, aber der Port wird zu anderen Zeitpunkten
geswitcht, weshalb deine Zeitschleife keine 50/50 Verhältnisse hat.
Für Frequenzmessungen ist das egal, aber es gibt Anwendungsfälle, da
ist das sehr wichtig, z.B. beim erzeugen von PWM, wenn man diesen "von
Hand" erzeugt.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe selbst schon Software-PWM mit 8 Kanäle gemacht für LED´s und
Lüfter.
Zwar nicht mit SBI/CBI sondern alle 8 gemeinsamm mittels OUT.
Und PWM ist sicher nicht so Zeitkritisch, wie es scheinbar viele
glauben.
Laut Simulator im AVR-Studio wird mit SBI ein Pin um 1 Takt verzögert,
also intern dauert es 3 Takte, gesetzt.
Das gleiche gilt für CBI. CBI braucht nicht länger als SBI.
Das gleiche gilt wohl auch für OUT.

Wenn es daran liegt, das schneller auf GND als 5V geschaltet werden
kann, dann erzähl doch bitte die Schaltzeiten aus einem OSZI von 0 auf
1 und umgekehrt.

Gruß
Andi

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...meinte eigentlich 4 Takte bis zum Pin.

Autor: Winfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andi, also bitte: Was soll denn heißen, dass Tastverhältnis bei PWM ist
nicht so entscheidend. 40/60 ist nunmal ein großer Unterschied zu
50/50. Bei einer Spannungswandleranwendung musste ich auf mindestens 2
% Tastverhältnis genau arbeiten. Da ist das schon sehr viel.

Und nichts da mit Oszi, der da falsch misst. Es ist das Verhalten des
Chips, dass sbi 2 Takte braucht, aber nach dem ersten Takt auf 1
geschaltet wird. cbi dagegen schaltet am Ende des zweiten Taktes,
benötigt auch 2 Takte.

So habe ich es experimentell herausgefunden, hab all meine
Zeitschleifen so berechnet und am Oszi dann auch das herausbekommen,
was ich erwartet habe. Ich lass mich aber gerne eines besseren
belehren, wenn jemand andere Werte experimentell herausfindet.

Alles auf einem Tiny12, 1.2 MHz intern.

Oszi ist ein Tektronix 465 mit 100MHz und es ging um Zeitschleifen von
20-100 KHz.

Bei solchen speziellen Timing-Geschichten würde ich mich auch nicht auf
den Simulator verlassen. Da hilft nur echtes testen.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kennst doch sicher diesen beliebten Umschaltalgoryhtmus:

 sbis pinb,4
 sbi portb,4
 sbic pinb,4
 cbi portb,4

oder andersrum:

 sbic pinb,4
 cbi portb,4
 sbis pinb,4
 sbi portb,4

Beide Algoryhtmen funktionieren nur, weil durch sbi und cbi erst 2
Takte nach deren Ausführung der Pin aktualisiert wird.
Wenn durch einer dieser Befehle innerhalb der Ausführung dessen schon
der Pin entsprechend gesetzt wäre, würde das nicht funktionieren.
Wo ich dass das erste mal gesehen habe, habe ich mich am Kopf gekratzt
und mich gefragt, wie das funktionieren kann, aber da durch beide
Befehle am Pin der neue Wert 2 Takte später ankommt, geht das.
Hängt es nicht eher an Deiner Schaltung an dem entsprechenden Pin ab?
Mir ist aufgefallen, das z. B. ein Kondensator zum glätten einer
Spannung am + lieber Spannung aufnimmt (laden) als abgibt (entladen)
was Deinen Fall erklären könnte.
Und solange der Kondensator über 1,5V hergibt ist der Pin auch nach
einem cbi für ein paar µS noch high.

Gruß
Andi

Autor: Winfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andi: Den Code kannte ich noch nicht und das hätte mich sicherlich auch
erstmal verwundert, ohne deine Erklärungen. Es ist aber nochmal was
anderes, wann das pin-Register gesetzt wird gegenüber, wann der
Portausgang geschaltet wird. Trotzdem wichtig, zu wissen.

Was deine Bedenken angeht, ob ich vielleicht mit einem externen
Kondensator usw. doch irgendwie falsch gemessen habe: Nein, all das war
nicht der Fall und ein wenig kannst du dich auf meine Messkünste auch
verlassen. Also so Trivialfehler mache ich zumindest nicht, ich habe 10
Jahre in der Elektronikentwicklung gearbeitet, weiß schon ein wenig, was
ich tue.

Teste es doch mal praktisch aus, mit dem Oszi und dem obigen kurzen
Programm. Dann wird es sich sicherlich offenbaren. Würd mich ja auch
mal interessieren, ob andere Tinys oder Megas sich auch so verhalten.
Anzunehmen wäre es.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Winfried, ich wollte Dich bestimmt nicht angreifen.
Ich glaube sogar, das ich damals Deinen Thread gesehen hatte wegen den
Schaltzeiten mit SBI und CBI.
Und ich glaube auch, das Du Deine Software an Deiner Hardware angepasst
hast.
Muss man ja auch.
Geht mir genau so.
Das mit dem messen werde ich mal machen.
Habe zwar kein OSZI aber ich werde einen Tiny26 mit 1MHz schalten
lassen und einen anderen mit 8MHz messen lassen und das EEPROM
auslesen.
Bin auch auf das Ergebnis gespannt.
Kann natürlich sein, dass das nicht ganz so genau wie mit einem OSZI
wird.

Gruß
Andi

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.