Hallo liebe Leute, habe gerade die neueste Version von WINAVR auf einen XP Rechner installiert und ein Testprogramm geschrieben. Es gibt nur einen Pieps heraus und sonst nichts mehr. . . . int main(void){ piep(); for(;;){ }// for(;;) }// main() Controller ist ein mega8. Optimierung steht auf s. Anstatt nur einmal zu Piepsen, piepst er permanent, bootet also immer neu. Was kann das denn sein ? Danke schon im voraus. Mattias
Das Problem liegt ziemlich sicher nicht beim for(;;)
piep(){ PORTD = PIND & 0xFD; _delay_ms(1000); PORTD = PIND | 0x02; }
Mattias wrote: > piep(){ > PORTD = PIND & 0xFD; > _delay_ms(1000); Das geht schon mal gar nicht. Für _delay_ms gibt es eine Obergrenze abhängig von der Taktfrequenz. Ist in delay.h dokumentiert. > PORTD = PIND | 0x02; > } Das dürfte aber nicht dein Problem sein. Wenn es ständig piepst, dann wird wahrscheinlich der Controller ständig resettet. Das wiederrum könnte seine Ursache in Störungen der Versorgungsspannung haben, verursacht durch das Einschalten des Piepsers.
hmm, ich dachte seit der neusten Version (avr-libc ab Version 1.6) sollten auch längere Delay's möglich sein. Hab's zwar noch nicht getestet, aber das Tutorial sagt das zumindest auch. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#avr-libc_Versionen_ab_1.6 Cecky
Fehler gefunden, habe timer interrupt eingestellt ohne die Service Funktion geschrieben zu haben. Der Arme hat dann die Funktion nicht gefunden und lief ins Leere. Danke trotzdem. Matias
Nur am Rande: Ich würde PORTD = PIND & 0xFD; durch PORTD &= ~(1<<PD1); und PORTD = PIND | 0x02; durch PORTD |= ~(1<<PD1); ersetzen. Ein Lesezugriff auf das PORTD-Register liefert immer die aktuellen Zustände der Ausgangsflipflops, und der Compiler übersetzt die obigen Anweisungen jeweils in einen einzigen Maschinenbefehl. Das Zurücklesen über den Porteingang PIND geht zwar auch, ist aber ein Umweg und braucht mehr Befehle und Taktzyklen.
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.