Ton hört sich an wie bei Slow Motion

OP #4429012
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?
Angehängte Dateien:
OP #4429165
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.
Angehängte Dateien:
OP #4429189
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
Gast #4429217
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.
Gast #4429240
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.
Gast #4429261
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
OP #4429287
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?

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