ATiny 2313 / 20 läuft nicht mit 20 MHZ

Gast #597778
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 ??????
Gast #597817
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.
Gast #597940
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
#598065
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?
#598075
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.
#598082
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.
Gast #598122
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
Gast #598168
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren