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


von Diode77 (Gast)


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 ??????

von Rene Z. (renezimmermann)


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

von Falk (Gast)


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


von Benedikt K. (benedikt)


Lesenswert?

Und wo ist jetzt dein Problem ?

von cguru (Gast)


Lesenswert?

Er wollte 20Mhz keine 1,8Mhz.

von Rolf Magnus (Gast)


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.

von Michael U. (Gast)


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

von Benedikt K. (benedikt)


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

von Jörg B. (manos)


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.

von Diode77 (Gast)


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

von Jörg B. (manos)


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 :)

von Falk (Gast)


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

von Johannes M. (johnny-m)


Lesenswert?

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

von Thilo M. (Gast)


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. ;)

von antworter (Gast)


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.

von Benedikt K. (benedikt)


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...

von Jörg B. (manos)


Lesenswert?

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

von Johannes M. (johnny-m)


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?

von Florian D. (code-wiz)


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.

von Gast123 (Gast)


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.

von Benedikt K. (benedikt)


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.

von Florian D. (code-wiz)


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.

von Benedikt K. (benedikt)


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.

von Stevko (Gast)


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

von Rolf Magnus (Gast)


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.


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.