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?
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.
Da sind keine Fusebit Settings in deiner fuses_328.txt. Ich denke auch zu 99% das da der ClockDiv8 gesetzt ist.
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.
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 |
1 | ...
|
2 | LFUSE = 0xf7 |
3 | 1 CKDIV8 |
4 | ...
|
ClockDiv 8 ist doch aber an, wie kommst du da zum Schluss das es aus ist?!
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?
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.
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?
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)
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.
Nino K. schrieb: > Ach bin ich ein Hirsch. :-) Die größten Kritiker der Elche waren früher selber welche! Waidmannsheil! ;-) MfG Paul
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
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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.