Eigentlich wollte ich wissen ob es was bringt. Aber die Ursache der meisten Missverständnisse liegt wohl bei der unklar gestellten Fragen.
Druckbare Version
Eigentlich wollte ich wissen ob es was bringt. Aber die Ursache der meisten Missverständnisse liegt wohl bei der unklar gestellten Fragen.
Natürlich bringt ein zusätzlicher richtig platzierter Kondensator etwas. Es ist nicht so das seine Funktion durch einen schlecht platzierten wieder aufgehoben wird.
Noch mal eine Frage zu dem Quarz:
Ich hae deine Fuse-bits gestzt, aber wenn ich jetzt einen 16MHz-Quarz einsetze blinken die LEDs die normalerweise alle 100ms blinkensolten erheblich schneller. was kann ich dagegen machen?
Die richtigen Fuse Bit´s setzen?
Gruß Richard
Ich denke nicht das es etwas mit den Fuse Bits zu tun hat.
Zeig mal den Code.
Hier ist der Code:
Code:#ifndef MCU
#define MCU atmega32
#endif
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#include <avr/io.h>
#include <util/delay.h>
uint8_t Geschwindigkeit = 100;
uint8_t i = 0;
uint8_t v = 0;
void run (void)
{
while (i < 20)
{
PORTC = 0b00000001;
_delay_ms(Geschwindigkeit);
PORTC = 0b00000010;
_delay_ms(Geschwindigkeit);
PORTC = 0b00000100;
_delay_ms(Geschwindigkeit);
PORTC = 0b00001000;
_delay_ms(Geschwindigkeit);
PORTC = 0b00010000;
_delay_ms(Geschwindigkeit);
PORTC = 0b00100000;
_delay_ms(Geschwindigkeit);
PORTC = 0b01000000;
_delay_ms(Geschwindigkeit);
PORTC = 0b10000000;
_delay_ms(Geschwindigkeit);
i++;
}
}
void crash (void)
{while (v < 20)
{
PORTC = 0b10000001;
_delay_ms(Geschwindigkeit);
PORTC = 0b01000010;
_delay_ms(Geschwindigkeit);
PORTC = 0b00100100;
_delay_ms(Geschwindigkeit);
PORTC = 0b00011000;
_delay_ms(Geschwindigkeit);
PORTC = 0b00100100;
_delay_ms(Geschwindigkeit);
PORTC = 0b01000010;
_delay_ms(Geschwindigkeit);
PORTC = 0b10000001;
_delay_ms(Geschwindigkeit);
PORTC = 0b00000000;
_delay_ms(Geschwindigkeit);
v++;
}
}
int main(void)
{
DDRC = 0b11111111;
PORTC = 0b11111111;
_delay_ms(2000);
while (v < 9999999)
{
run();
crash();
v++;
}
}
The maximal possible delay is 262.14 ms / F_CPU in MHz
When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality. In this mode _delay_ms() will work with a resolution of 1/10 ms,
Es dürfen auch keine Variablen für die Zeit eingesetzt werden, bei dir hier allerdings kein Problem, da der Wert der Variablen bereits zur Kompilezeit bekannt ist.
Ich habe jetzt 262.14/16 gerechnet. Das Ergebnis war 16.38375. Heißt das, dass ich, um auf 100ms zu kommen, ca. 6 mal die delay-Funktion aufrufen mass?
Wenn du 10 mal 10ms aufrufst, am besten in einer Schleife, dann hast du 100ms.
Ein Timer ist aber die bessere Lösung
Ich habe noch nicht vil mit timern gearbeitet. Aber im Prinzip müsste man den Timer starten können und dann den Status abfragn können um eine Aktion auszulösen?!