while (1) { PORTD &= ~(1<<PD0); //ausschalten _delay_us (1); PORTD=(1<<PD0); //einschalten _delay_us (300); } Hallo, kann mir einer sagen warum ich bei diesem Code eine Rechteckspannung mit einem Tastverhältnis von 0,5 bekomme?? MfG Bastian
Ist das Delay nicht von der Frequenz abhängig, mit der der uC läuft? Vielleicht falsche Frequenz eingestellt?
PORTD &= ~(1<<PD0) erzeugt erst eine Leseoperation auf dem Port, anschließend eine Schreiboperation. Wenn das Port lesen irgendwelche Auswirkungen auf die Hardware hat, wäre das zumindest mal ein Hinweis.
Wenn du den internen RC Oszillator benutzt, dann ist die Genauigkeit hinsichtlich der Zeit unter aller Kanone.
Hallo, wie groß ist denn deine Quarzfrequenz ?? Wenn du mal in die Sourcen von delay.h schaust, steht da: "The maximal possible delay is 768 us / F_CPU in MHz." bei 4MHz kann die Pause z.B. nicht mehr als 192us ! Sascha
Schnellschuss: Weil in deinem Programm die _delay_us nicht wie beabsichtigt arbeiten. Das kann die triviale Ursache haben, dass die Funktion ein falsch gesetztes F_CPU sieht oder die Optimierung beim Kompilieren ausgeschaltet ist. Bei einer avr-libc < 1.6 ist auch zu prüfen, ob 300 noch ein legaler Wert ist (abhängig von F_CPU).
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.