Hallo Miteinander,
ich habe die SuFu benutzt und weiß auch, das die Fuses schon sehr oft
durchgesprochen wurden, jedoch habe ich trotzdem noch ein Problem mit
der AVR Studio Version 6:
Ich bin nach einiger Zeit mit einer kleinen Schaltung wieder angefangen
um mich mit einem ATmega8 zu beschäftigen. Das Programm welches ich für
das programmieren verwende ist AVR Studio 6. Ich hab sonst immer Version
4 verwendet, aber nachdem mein Dragon ein Update bekommen hat ist das
nicht mehr möglich.
Die Schaltung soll mit einem externen Quarz betrieben werden, aber ich
mache anscheinend falsche Fuse einstellungen, weil mich schon der zweite
µC ausgeschlossen hat. Das Programm an sich läuft, nur bisher mit dem
internen Takt und daher blinkt meine LED in der falschen
Geschwindigkeit.
Kann mir vielleicht jemand sagen, wo ich den Takt noch einstellen muss
und welche Häckchen gesetzt sein müssen und welche nicht? Standardmässig
war bei meinen ersten Versuchen SPIEN gesetzt und SUT_CKSEL habe ich auf
"EXTHIFXTALRES_16KCK_64MS" gestellt. BOOTSZ war auf "1024_0C00" und
BODLEVEL auf "2V7".
Dies ist das Testprogramm, welches ich zum laufen haben möchte:
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 | #include <stdint.h>
|
4 |
|
5 | /* define CPU frequency in Mhz here if not defined in Makefile */
|
6 | #ifndef F_CPU
|
7 | #define F_CPU 7372800UL
|
8 | #endif
|
9 |
|
10 |
|
11 |
|
12 | // LED Defines
|
13 | // Hier müssen die richtigen Angaben hin
|
14 | #define LED_DDR DDRB // DDRA, DDRB...
|
15 | #define LED_PORT PORTB // PORTA, PORTB...
|
16 | #define LED_PORTPIN PB1 // PA0, PA1..., PB0, PB1...
|
17 | #define RELAIS_PORTPIN PB0 // PA0, PA1..., PB0, PB1...
|
18 |
|
19 | int main(void)
|
20 | {
|
21 | // Den Pin, an den die LED angeschlossen ist, als Ausgang setzen
|
22 | LED_DDR |= (1 << LED_PORTPIN);
|
23 | LED_DDR |= (1 << RELAIS_PORTPIN);
|
24 |
|
25 | // Die LED die ganze Zeit an- und ausschalten
|
26 | while(1)
|
27 | {
|
28 | // Den Portpin auf high setzen
|
29 | LED_PORT |= (1 << LED_PORTPIN);
|
30 | LED_PORT |= (1 << RELAIS_PORTPIN);
|
31 | // 1 Sekunde warten
|
32 | wait();
|
33 |
|
34 | // Den Portpin auf low setzen
|
35 | LED_PORT &= ~(1 << LED_PORTPIN);
|
36 | LED_PORT &= ~(1 << RELAIS_PORTPIN);
|
37 | // 1 Sekunde warten
|
38 | wait();
|
39 | }
|
40 | }
|
41 |
|
42 | // Diese Funktion lässt den Controller ms Millisekunden warten.
|
43 | // Die while-Schleife wird so oft durchlaufen,
|
44 | // wie der Funktion übergeben wurde.
|
45 | // Bei jedem Duchlauf wir noch 1ms gewartet.
|
46 |
|
47 | void wait ()
|
48 | {
|
49 | int volatile i;
|
50 |
|
51 | for (i=0; i<50; i++)
|
52 | _delay_ms(20);
|
53 | }
|
Ich würde mich sehr über Hinweise freuen, dankeschön