www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATiny 2313 / 20 läuft nicht mit 20 MHZ


Autor: Diode77 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo mein Tiny läuft net mit 20Mhz hier mein Blinkitest Code :
;----------------------------------------------------------------------- 
----
;
; ATTINY2313 mit 20 Mhz externer Quarzoscil.
; Ponnyprog Sec Bit ist nur SUT0 ein Häkchen
;----------------------------------------------------------------------- 
-----
.include "tn2313def.inc"      ; Definitionsdatei einbinden

.def temp = r16            ; Allround-Variable


.cseg                ; Codesegment
.org 0x00              ; Interrupt Vektoren ab Adresse
                  ; 0x00 im Codesegment des AVR



reset:      rjmp start      ; Programmstart


; Initalisierung
; --------------
start:

  ldi temp, RAMEND        ; Stack
  out SPL, temp


  ldi temp, 0x00          ; Port D durch Ausgabe von 0x00 ins
  out DDRD, temp          ; Richtungsregister DDRD als Eingang 
konfigurieren
  ldi temp, 0x01          ; lade 1 ins register temp
  out PORTD, temp          ; aktiviere den internen Pull-Up Port D
  ldi temp, 0xFF          ; Port B durch Ausgabe von 0xFF ins
  out DDRB, temp          ; Richtungsregister DDRB als Ausgang 
konfigurieren



; Hauptprogramm
; -------------
main:

    sbi PORTB,0
    nop
    nop
    cbi PORTB,0
    nop
    nop
    rjmp main


; laut Messgerät kommen nur 1,8 MHZ raus ??????

Autor: Rene Zimmermann (renezimmermann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

cbi 1 Takt
nop 1 Takt
nop 1 Takt
rjmp 2 Takte

macht 5 Takte, 20 Mhz / 5 = 2 Mhz, sieht doch nicht so schlecht aus

Gruß Rene

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Diode77 (Gast)

>Hallo mein Tiny läuft net mit 20Mhz hier mein Blinkitest Code :
>; laut Messgerät kommen nur 1,8 MHZ raus ??????

Du must die Fuses setzen. Dein Tiny läuft noch mit internem Takt.

AVR Fuses

MFG
Falk


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

Bewertung
0 lesenswert
nicht lesenswert
Und wo ist jetzt dein Problem ?

Autor: cguru (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Er wollte 20Mhz keine 1,8Mhz.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> cbi 1 Takt
> nop 1 Takt
> nop 1 Takt
> rjmp 2 Takte
>
> macht 5 Takte, 20 Mhz / 5 = 2 Mhz

Das solltest du nochmal überdenken, auch wenn das Ergebnis trotzdem 
stimmt. 20/5 sind nicht 2. Abgesehen davon sind es 4 nops und noch ein 
sbi, und sbi und cbi brauchen jeweils 2 Takte. Das macht zusammen also 
10 Taktzyklen. Das Ergebnis ist dann 20 Mhz / 10 = 2 Mhz.

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

@Rolf Magnus; 2MHz habe ich auch ausgerechnet, das erkärt ihm aber immer 
noch nicht seine gemessenen 1,8MHz. ;)

Gruß aus berlin
Michael

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

Bewertung
0 lesenswert
nicht lesenswert
Das ein Quarz soweit wegdriftet -> kann nicht sein
Das der AVR mit internem Oszillator läuft -> kann nicht sein
Da bleiben nur 3 Möglichkeiten:
- Es ist ein 18MHz Quarz angeschlossen
- Das Messgerät misst Mist
- Diese Software befindet sich nicht im AVR

Autor: Jörg B. (manos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich das richtig sehe hat der Tiny2313 einen CKOUT-Pin. Vielleicht 
einfach mal den beschalten und Messen mit welchem Takt der µC läuft.

Autor: Diode77 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bin jetzt total verunsichert.

Fuse bits stimmen nicht ?

Ponnyprog Sec Bit ist nur SUT0 ein Häkchen.

Hänge ich den Quatzoszi ab geht nix mehr. Also kein internert Takt oder 
?

Gruß Diode77

Autor: Jörg B. (manos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wenn Du 1,8 MHz statt 2 MHz misst werden die Fusebits wohl in 
Ordnung sein.
Mögliche Fehlerquellen wäre jetzt noch:
- Quarz
- Messgerät
- ein Zyklus dauert 11 statt 10 Takte
- sonstiges :)

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Diode77 (Gast)

>bin jetzt total verunsichert.
>Fuse bits stimmen nicht ?

Mein Fehler, ich hab das Programm nicht genau angeschaut. 
Entschuldigung.

>Hänge ich den Quatzoszi ab geht nix mehr. Also kein internert Takt oder
>?

Passt schon.

MfG
Falk

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht solltest Du wirklich endlich mal erzählen, was für ein 
"Messgerät" Dir sagt, dass da 1,8 MHz rauskommen...

Autor: Thilo M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein DSO schafft Klarheit, da sieht man was man misst! Die Investition 
von knapp 1000€ lohnen sich für engagierte Bastler auf jeden Fall. ;)

Autor: antworter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ein DSO schafft Klarheit, da sieht man was man misst!

Um die Frequenz eines konstanten Rechtecksignals zu ermitteln, braucht 
es mit Sicherheit kein DSO.

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

Bewertung
0 lesenswert
nicht lesenswert
Und ein einfaches 50 oder 100MHz 2 Kanal Oszi dürfte wohl für >90% alles 
Bastler ausreichen. Es soll sogar noch welche geben, die auch ohne Oszi 
ganz gut auskommen...

Autor: Jörg B. (manos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Möglicherweise könnte das Messgerät auch falsch messen da es kein 50:50 
Rechteck ist.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg B. wrote:
> Möglicherweise könnte das Messgerät auch falsch messen da es kein 50:50
> Rechteck ist.
Dann misst das Messgerät aber nicht falsch, sondern der Bediener liest 
falsch ab! Oder kennst Du irgendein Messgerät, das einen Frequenzwert 
ausgibt, der nicht auf einer Messung der Periodendauer, sondern 
vielleicht nur der High-Zeit basiert?

Autor: Florian Demski (code-wiz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne jetzt den Assembler bzw. dessen Einstellungen nicht, aber 
könnte es sein, dass ggf. das Alignment dort reinpfuscht? Vielleicht 
testweise einfach einmal ein Map-File ausgeben lassen und die Ergebnisse 
mit dem Quelltext vergleichen.

Autor: Gast123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso nicht einfach mal einen Timer nehmen und nen Pin togglen? Da kann 
man mit der Frequenz noch etwas runtergehen und kann sich schön 
ausrechnen ob die 20 MHz passen.

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

Bewertung
0 lesenswert
nicht lesenswert
Florian Demski wrote:
> Ich kenne jetzt den Assembler bzw. dessen Einstellungen nicht, aber
> könnte es sein, dass ggf. das Alignment dort reinpfuscht?

Nein, daran liegt es ganz sicher nicht. Ich weiß zwar nicht genau was 
das ist, aber beim AVR gibt es das nicht, zumindest nich beim Programm 
Code.

Ich vermute, dass der Benutzer einen Fehler gemacht halt:
Entweder kann er den Frequenzzähler nicht bedienen, oder der Quarz ist 
falsch, oder es ist eine ander Software im µC, denn diese die er 
gepostet hat, sollte genau 1/10 der Quarzfrequenz erzeugen.

Autor: Florian Demski (code-wiz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benedikt K. wrote:
> Nein, daran liegt es ganz sicher nicht. Ich weiß zwar nicht genau was
> das ist, aber beim AVR gibt es das nicht, zumindest nich beim Programm
> Code.

Ich kenne das von der PC-Programmierung (bin mir jetzt aber unsicher, 
welcher Assembler das war). Hier wurden Sprungziele gerne auf 4- oder 
8-Byte grenzen gelegt (die Opcodes hatte jeweils verschiedene Längen) 
und entsprechend mit NOPs aufgefüllt, da der Prozessor dann besser auf 
den Speicher zugreifen konnte. Ehrlich gesagt bin ich mir nicht sicher, 
ob die NOPs auch in den Programmfluss eingebaut wurden oder nur zwischen 
verschiedenen Blöcken, damit der Code quasi aufgefüllt wurde, diese aber 
nie ausgeführt wurden, wobei ich allerdings glaube, dass die nie 
ausgeführt wurden.

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

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Erklärung, sowas ähnliches hatte ich vermutet, wusste aber 
bisher nicht, das es sowas auch beim Programmcode gibt. Ich bin eher im 
Bereich µC zu hause, da haben die Befehle meist eine feste Länge.

Autor: Stevko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

@Diode77:

Falls Du Zeit hast probier mal den Code.


; Hauptprogramm
; -------------
main:

    in R16,PORTB
    com R16
    out PORTB,R16
;
rjmp main

Sollte bei fünf Cycles 20MHz/5/2 -> 2MHz sein.

Gruß
  Stevko

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Möglicherweise könnte das Messgerät auch falsch messen da es kein 50:50
> Rechteck ist.

Das könnte man ändern, indem man eins der nops nach dem cbi entfernt und 
davor eins einfügt.


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.