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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.