Hallo Leute, Ich habe hier eine Schaltung mit dem Atmega aufgebaut, als Quarz dient ein ausgelöter Quarz auf dem 16.00JR draufsteht. Das müsste doch bedeuten 16Mhz Oder? Wenn ich im Programm einstelle #define F_CPU 16000000L //Takt 16MHz und eine LED Blinken lasse LED_PORT ^= 1 << LED_PIN; _delay_ms(1000); Blinkt diese mit einer Halben Periodendauer von 10sekunden. Wenn man Einstellt: #define F_CPU 1600000L //Takt 1,6MHz Blinkt die LED im Takt einer Sekunde. Also müsste der Quarz 1,6Mhz haben, aber warum dann die aufschrift 16.00 JR -> oder steht das JR für einen Teiler? gruß xy
Gerade mal die Zeit genaugemessen: bei #define F_CPU 16000000L Leuchtet die LED 16s und bei #define F_CPU 1600000L //Takt 1,6MHz Leuchtet sie 1,6s
Denke wohl den quarz sollte ich in den Müll werfen wenn ich eine RS232 verbindung über UART aufbaun will, 1,6Mhz wären ja genug fürn anfang, aber der Quarz hat anscheiend nur so 1Mhz.
xy schrieb: > 1,6Mhz wären ja genug fürn anfang, > aber der Quarz hat anscheiend nur so 1Mhz. Du hast auch die Fuse Teile/8 rausgenommen?
1 | #define F_CPU 1600000L //Takt 1,6MHz
|
2 | |
3 | #include <avr/io.h> |
4 | #include <avr/interrupt.h> |
5 | #include <util/delay.h> |
6 | |
7 | /* Programm Libs */
|
8 | #include "defines.h" |
9 | |
10 | |
11 | |
12 | |
13 | volatile uint8_t IRFlag; |
14 | |
15 | #define LED_PORT PORTB
|
16 | #define LED_DDR DDRB
|
17 | #define LED_PIN PB1
|
18 | |
19 | int main(void) |
20 | {
|
21 | /* TIMER INIT */
|
22 | // SETBIT(TCCR0,CS00);// Prescaler von 64 16MHz/64 = 250kHz = 4us
|
23 | // SETBIT(TCCR0,CS01);
|
24 | // TCNT0 = 240; // Reload Wert 0-255 250*4us*8 = 8ms = 125Hz
|
25 | // SETBIT(TIMSK,TOIE0); // Timer IR Aktivieren
|
26 | |
27 | DDRD=0xFB; //D0-D1 & D3-D7 as Output |
28 | SETBIT(MCUCR,ISC01); //Fallende Flanke |
29 | SETBIT(GICR,INT0); //Taster IR Aktivieren |
30 | |
31 | sei(); //Globale IRs aktivieren |
32 | |
33 | /* Lokale Variablen: */
|
34 | |
35 | |
36 | /* Ports as Outputs: */
|
37 | DDRA=0xFF; |
38 | DDRB=0xFF; |
39 | DDRC=0xFF; |
40 | |
41 | |
42 | LED_DDR |= 1 << LED_PIN; |
43 | |
44 | while (1) |
45 | {
|
46 | LED_PORT ^= 1 << LED_PIN; |
47 | _delay_ms(1000); |
48 | }
|
49 | |
50 | }
|
51 | |
52 | |
53 | |
54 | |
55 | /* TIMER 0 IR HANDLER */
|
56 | ISR( TIMER0_OVF_vect ) |
57 | {
|
58 | IRFlag = 1; |
59 | }
|
60 | |
61 | |
62 | /* Taster 0 IR HANDLER */
|
63 | ISR( INT0_vect ) |
64 | {
|
65 | |
66 | }
|
67 | |
68 | |
69 | Defines.c: |
70 | |
71 | #define BIT(x) (1 << (x))
|
72 | #define SETBITS(x,y) ((x) |= (y)) //Maskierung
|
73 | #define CLEARBITS(x,y) ((x) &= (~(y)))
|
74 | #define SETBIT(x,y) SETBITS((x), (BIT((y)))) //Bit SET
|
75 | #define CLEARBIT(x,y) CLEARBITS((x), (BIT((y)))) //Bit RESET
|
Das ist das Ganze Programm bisher
>> Du hast auch die Fuse Teile/8 rausgenommen? > wo rausgenommen? Siehe AVR Fuses. Die muss man richtig setzen, wenn man einen Quarz nutzt.
Okay, das dürfte wohl das Problem sein, auf was muss ich es denn genau stellen?
Hi >Okay, das dürfte wohl das Problem sein, auf was muss ich es denn genau >stellen? Okay, der hat das nicht. Aber, Was meinst du denn, mit welcher Frequenz dein ATMega läuft? MfG Spess
Kann ich Ext. Crysztal/Resonator High Freq.; Start-up time: 16K CK -64ms nehmen? Mir ists leider schonmal passiert dass ich danach keinen Zugriff mehr auf einen Prozessor hatte, deswegen frag ich lieber bevor.
Hi Dann stellst du bei den SUT_CKSEL Ext. Crystal/Resonator High Freq.; Start-up time: 16K CK + 64 ms ein und änderst #define F_CPU 1600000L //Takt 1,6MHz in #define F_CPU 16000000L //Takt 16MHz um. MfG Spess
Welche Frequenz muss man den Anlegen um es wieder zu reaktivieren? Ich versuchs gerade mit 250Hz Funktioniert aber nicht.
Hast du an die beiden Kondensatoren am Quarz gedacht? Kannst du mal ein Bild vom Aufbau machen, besonders den Teil mit Quarz und Anschluss am Controller?
so jetzt läuft er wieder am Internen Takt, aber das hat das Problem nicht wirklich gelöst!
Hi
>Kondensatoren sind alle SMD und 100nF groß beim Prozessor.
Am Quarz dürfen sie aber nur 12 - 22pF haben.
MfG Spess
Also mein Elektronik lehrer sagte immer dass das ziemlich egal ist, 100nF sollten genauso funktionieren, beim letzten Board dass ich gemacht habe funktionierte es auch mit 100nF! Aber wenns sein muss löt ich da pf kondensatoren hin...
xy schrieb: > Also mein Elektronik lehrer sagte immer dass das ziemlich egal ist, Dann sag deinem Lehrer 6 setzen. Bei 100nf am Quarz unterdrueckst du jede Schwingneigung. Rund 20 .. 30pF sollten da im Normalfall angeschlossen sein.
Hmm, wenn das wirklich so ist dann müsste ich das Falsch aufgefasst haben... Der Lehrer Entwirft schon ewig Elektronische Schaltungen und auch µ-Controller Schaltungen, der weiß einfach sogut wie alles darüber, egal in welchem Bereich der Elektronik! Nagut, ich löt da mal andere Kondensatoren hin, sind eh SMD, da gehts eh schnell.
10pF sollt auch gehen. dein prof meint mit 100nF glaube nich die quarzkondis.
xy schrieb: > Hab grad nur 10pF da, gehn die auch? Die tuns auch. Eventuell 2 im Huckepack drauf löten.
Kondensatoren sind drinnen, und es funktioniert jetzt alles ;). Vielen Dank für eure Hilfe!
xy schrieb: > Kondensatoren sind alle SMD und 100nF groß beim Prozessor. Du hast noch die Abblockkondensatoren an VCC / AVCC vergessen. Wenn die Schaltung zuverlässig laufen soll, sind diese unumgänglich. Siehe dazu die Application Note Atmel AVR042: AVR Hardware Design Considerations, www.atmel.com/Images/doc2521.pdf Gruß, Bernhard
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.