Forum: Mikrocontroller und Digitale Elektronik Ton hört sich an wie bei Slow Motion


von Nino K. (lnino)


Angehängte Dateien:

Lesenswert?

Hallo an alle,

ich programmiere hin und wieder mit meinem "Nerdkit".
Normalerweise verwende ich dort den ATMega168, aber wenn der 
Programmcode etwas länger wird, kann man auch den ATMega328p verwenden 
weil dieser das gleiche Pinout hat.

Ich habe ein und den selben Code einmal auf den 168 und einmal auf den 
328p geflashed. (Natürlich das Makefile angepasst - siehe Anhang)

Wenn ich nun das Programm starte, dann ist am 168 der Sound schön kurz 
und knapp. Aber am 328 hört sich der Sound wie Slow Motion an und ist 
viel zu lang.

Als Ausgang verwende ich einen Piezo Buzzer.

Beide Controller haben einen speziellen Bootloader von "Nerdkit" drauf 
welchen ich zuvor rauf lade.

Habt ihr irgendeine Idee was ich hier falsch mache?

von kurt (Gast)


Lesenswert?

CKDIV8 Fuse?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Nino K. schrieb:
> viel zu lang.
In Zahlen?

von Nino K. (lnino)


Angehängte Dateien:

Lesenswert?

kurt schrieb:
> CKDIV8 Fuse?

Du meinst die Fuses mit denen ich den Bootloader schreibe? (siehe 
Anhang)

@Lothar: Ich würde sagen doppelt so lang. Aber ich kann auch gern ein 
Video in meiner DropBox hochladen zur besseren Veranschaulichung.

von Draco (Gast)


Lesenswert?

Da sind keine Fusebit Settings in deiner fuses_328.txt.

Ich denke auch zu 99% das da der ClockDiv8 gesetzt ist.

von Nino K. (lnino)


Angehängte Dateien:

Lesenswert?

Um das ganze zu vereinfachen, da ich bisher mit den fuses noch nicht 
viel zu tun hatte. Da ich nicht nur den Nerdkit besitze, kann ich auch 
alternativ mit einem AVRISP mkII und dem AVR Studio flashen.

Sind diese Settings so korrekt?
Bei EXTENDED, HIGH und LOW habe ich die Werte vom Arduino Board mal 
eingetragen, in der Hoffnung, dass die stimmen können. (Da der Arduino 
ja auch einen 328p hat)

Als kleiner Hinweis. Beim Nerdkit verwenden wir einen 14.7456 Mhz Quarz.
Beim Arduino einen 16 Mhz Quarz.

von Nino K. (lnino)


Lesenswert?

Ich habe nun in den Readme Dateien die Erklärung zu den fuses vom 
Nerdkit gefunden. Das scheint meiner Meinung nach zu passen und der 
ClockDiv8 ist aus. Wo könnte dann das Problem liegen?

Was meint ihr dazu?
1
(modified for ATmega328P!)
2
3
EFUSE = 0x05
4
0  -
5
0  -
6
0  -
7
0  -
8
0  -
9
1  BODLEVEL2  (sets V_BOT=2.7)
10
0  BODLEVEL1    ""
11
1  BODLEVEL0    ""
12
13
HFUSE = 0xd2
14
1  RSTDISBL
15
1  DWEN
16
0  SPIEN
17
1  WDTON
18
0  EESAVE
19
0  BOOTSZ1  (1024 word boot size)
20
1  BOOTSZ0    ""
21
0  BOOTRST (jump to bootloader)
22
23
LFUSE = 0xf7
24
1  CKDIV8
25
1  CKOUT
26
1  SUT1  (65ms start-up delay)
27
1  SUT0    ""
28
0  CKSEL3  (full swing crystal oscillator)
29
1  CKSEL2    ""
30
1  CKSEL1    ""
31
1  CKSEL0    ""
32
33
LOCK = 0x2f
34
0  -
35
0  -
36
1  BLB12  (can't self-program over bootloader)
37
0  BLB11    ""
38
1  BLB02  (no restrictions on programming application code area)
39
1  BLB01    ""
40
1  LB2  (no memory lock)
41
1  LB1    ""

Und hier das MakeFile for das flashen des Bootloaders:
1
AVRDUDEFLAGS=-c usbasp -pm328p
2
3
all: fuses install
4
5
fuses:
6
  avrdude ${AVRDUDEFLAGS} -U lock:w:0x2f:m
7
  avrdude ${AVRDUDEFLAGS} -U efuse:w:0x05:m
8
  avrdude ${AVRDUDEFLAGS} -U hfuse:w:0xd2:m
9
  avrdude ${AVRDUDEFLAGS} -U lfuse:w:0xf7:m
10
  
11
install:
12
  avrdude ${AVRDUDEFLAGS} -U flash:w:foodloader.hex:a

von Draco (Gast)


Lesenswert?

1
...
2
LFUSE = 0xf7
3
1  CKDIV8
4
...

ClockDiv 8 ist doch aber an, wie kommst du da zum Schluss das es aus 
ist?!

von Nino K. (lnino)


Lesenswert?

Ach bin ich ein Hirsch. :-)

Habe da total 1 und 0 durcheinander gebracht.

Bin ich nun dieses Mal richtig mit der Annahme, das 1110111 also 0x77 
der richtige Wert für LFUSE wäre?

von Draco (Gast)


Lesenswert?

Lese doch einfach mal die Fuses aus, aus dem gerade laufenden Mega328. 
Was mich in der Liste ein wenig wundert ist halt auch:
1
LOCK = 0x2f
2
0  -
3
0  -
4
1  BLB12  (can't self-program over bootloader)
5
0  BLB11    ""
6
1  BLB02  (no restrictions on programming application code area)
7
1  BLB01    ""
8
1  LB2  (no memory lock)
9
1  LB1

das BLB12 gesetzt ist, das bedeutet dann ja (Mit der Beschreibung 
dahinter) das er sich nicht über den BL selbst programmieren kann, was 
mich aber wundert, weil es geht ja wohl bestimmt - denn sonst könntest 
du über den BL ja nicht programmieren.

Lese mal die Fuses aus, da sind wir auf der sicheren Seite.

von F. F. (foldi)


Lesenswert?

Draco schrieb:
> ClockDiv 8 ist doch aber an, wie kommst du da zum Schluss das es aus
> ist?!

Und nach dem geposteten Bild, wie kommst du darauf, dass er an ist?

von Nino K. (lnino)


Angehängte Dateien:

Lesenswert?

Wenn ich im AVR Studio auf Device Programming gehe und dann auf Fuses
ohne was zu verändern, dann sehe ich doch die aktuell gesetzten fuses
oder?

(siehe Bild)

von Draco (Gast)


Lesenswert?

F. F. schrieb:
> Draco schrieb:
>> ClockDiv 8 ist doch aber an, wie kommst du da zum Schluss das es aus
>> ist?!
>
> Und nach dem geposteten Bild, wie kommst du darauf, dass er an ist?

Weil ich dann davon ausgehe das das dann so auch in den µC geschrieben 
wurde ;) Deswegen ja auch die Frage nach den aktuellen Fuses, welche 
sich im µC befinden - da ja mehrere Ungereimtheiten in dieser Liste sind 
;)


Aber laut dem neuen Bild ist CKDIV8 nicht gesetzt.

von Paul B. (paul_baumann)


Lesenswert?

Nino K. schrieb:
> Ach bin ich ein Hirsch. :-)

Die größten Kritiker der Elche
waren früher selber welche!


Waidmannsheil!
;-)
MfG Paul

von Draco (Gast)


Lesenswert?

Ahhhhh...0 = programmed / 1 = unprogrammed...


Jaja, andersrum (Nach zwei Tagen Bitshiften war mir itze grad nich klar 
das gerade bei den Fuses 0 ja und 1 nein heißt) - mein Fehler ^^ Da 
entschuldige ich mich :D

von Nino K. (lnino)


Lesenswert?

Draco schrieb:
> Ahhhhh...0 = programmed / 1 = unprogrammed...
>
>
> Jaja, andersrum (Nach zwei Tagen Bitshiften war mir itze grad nich klar
> das gerade bei den Fuses 0 ja und 1 nein heißt) - mein Fehler ^^ Da
> entschuldige ich mich :D

Kein Problem. :-)

Ich habe nun zu Testzwecken mal den Haken bei CKDIV8 reingemacht und 
dann das Programm ablaufen lassen. Nun ist der Ton noch langsamer. Also 
der Wert von CKDIV8 passt. Aber warum könnte dann der Sound dennoch um 
einiges langsamer sein, trotz deaktiviertem CKDIV8?

von Paul B. (paul_baumann)


Lesenswert?

Guck mal, ob irgendwas mit dem CLKPR-Register in Deinem Programm gemacht 
wird. Damit kann man den internen Systemtakt auch beeinflussen.

(Ich kann keinen C-Quelltext lesen -will es auch nicht mehr)

MfG Paul

von Nino K. (lnino)


Lesenswert?

Ich habe nun ein Video gemacht in welchem man den Unterschied erkennen 
kann. (siehe DropBox)

https://www.dropbox.com/sh/l26j78hab90cyot/AACp2Rgu8OyqTgrNyR3GWgcaa?dl=0

Einmal der Ton am 168 schön kurz und knapp.
Und dann der Ton am 328 dumpf und lang.

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.