Also mal ganz von vorne:
Ich nutze via die Stromversorgung des MyAVR MK2, das sind 5V, aus dem USB anschluss.
Ich takte den AVR über den internen Taktgenerator.
Ich habe folgendes Programm erstellt:
Code:
#include <avr/io.h>
#include <util/delay.h>
#include "port.h"
int main()
{
DDRB=0xFF;
while(1)
{
_delay_ms(100);
toogle_pin(PORTB,PB0);
}
}
Das läuft mit 1MHz prima, nutze ich jedoch 8MHz geht die LED einmal an und bleibt an.
Es sind beide AGND-GND->MyAVR GND
AVCC->VCC-> MyavrVCC
PB0->LED rot->GND
PB1->LED grün->GND
Reset->R4,7k->VCC
zwischen GND und VCC hängt ein 100nf cap und die ISP pins sind direkt durchgeschlossen.
Ja mir ist klar das ich das von Hubert nur mit 1MHz nutzen kann, allerdings funktionierd das von Hubert auch mit 1MHz nicht.
Ich glaube ich weis das Problem, meine _delay_ms routine ignoriert irgendwie die Takt angabe.
Folgendes Szenario:
Wenn ich den AVR auf 1MHz stelle und im Quellcode F_CPU mit 1MHz definiere wartet er bei
Code:
for(uint8_t i=0;i<10;i++) _delay_ms(100);
genau 1s.
Stelle ich nun den AVR auf 2MHz, schreibe in den Quellcode F_CPU mit 2MHz müsste er ja bei obigem Code wieder 1s warten, tut er aber nicht. er wartet eine halbe sekunde.
bei 4MHz dementsprechend 250ms, bei 8 MHz 125ms.
Daher dachte ich vorhin er würde hängen, da ich als zeitspanne nur 100ms hatte, er aber bei 8MHz nur 12.5ms gewartet hat konnte ich das An und aus schlicht nicht mehr erkennen.
Um diese Erkenntnis auszuprobieren hab ich promt an F_CPU rumgespielt.
Ich habe Werte zwischen 100kHz und 100GHz eingestellt, dabei war es vollkommen egal, die Led blinkt bei einem CPUTakt von 8MHz mit konstanten 8Hz vor sich hin, egal wie ich F_CPU definiere.
Hoffe das hat jetzt jemand verstanden.
Lesezeichen