Hallo leute Hab die AVR seit langem nimmer angefasst aber nun schreit mein Modellflugzeug nach ner Kamera Aus dem Grund spiel ich derzeit mal wieder ein bisschen mit meinem mega8 aber irgendwas geht hier schief immer dann, wenn ich außer der main noch eine andere funktion definiere gibt mir der avr gar nix aus (nichtmal ne led leuchtet, wenn ich die vor einem funktionsaufruf ausführe) folgendes beispiel bringt meine led an pb1 zum leuchten aber kaum, dass ich den funktionsaufruf blinken() auskommentiere passiert gar nix mehr #ifndef F_CPU #define F_CPU 8000000 #endif #include <avr/interrupt.h> #include <util/delay.h> #include <avr/io.h> #include <stdarg.h> int blinken() { int i; PORTB |= (1 << PB0); for (i=0;i<=1000;i++) _delay_ms(1); PORTB &= ~(1<<PB0); for (i=0;i<=1000;i++) _delay_ms(1); return 0; } int main() { DDRB = (1<<PB0)|(1<<PB1); int i; PORTB |= (1 << PB1); for (i=0;i<=2000;i++) _delay_ms(1); PORTB &= ~(1<<PB1); while (1==1) { //blinken(); } return 0; } nutze die avrlibc in der derzeitigen debian etch was mach ich da eventuell falsch? danke schonmal für eure hilfe
....och eine andere funktion definiere gibt mir der avr gar nix aus.... ....zum leuchten aber kaum, dass ich den funktionsaufruf blinken() auskommentiere passiert gar nix mehr... Was denn nun? Was passiert MIT Aufruf von blinken, und was passiert mit leerer while(1) Schleife??
mh hab mich eventuell bissel dämlitsch ausgedrückt sorry also nehmen wir das beispiel oben while-schleife leer: meine led geht für eine sekunde an und dann wieder aus (wies sein soll) mit aufruf von blinken (while nicht leer) passiert gar nix mehr (auch die led, welche ja vor der while geschaltet wird sagt nix mehr) verständlicher?
Hast Du da zwei LED's dran? An PB0 und an PB1? Sind die LED's gegen Masse oder gegen Versorgungsspannung geschaltet?
ja es sind zwei leds (tut aber nix zur sache habs schon mit nur einer versucht) das ganze ist so beschaltet: GND -----|LED>|---[Widerstand]----(PB1/0) (keine ahnung ob led richtig rum gezeichnet des merk ich mir nie) ist ein vorgefiertigtes programmierboard (die leds leuchten auch wunderbar innerhalb der main funktion)
int blinken(void) int main(void) Versuche mal mit dem void in den deklarationen.. Welche Optimierungsstufe hast du eingestellt? und mache mal aus "while (1==1)" ein: while (1) ..
ok danke so weit, so bald mein lippo (akku) gekladen ist versuch ichs mal hab leider nur nen 12 volt netzteil
Optimierungsstufe könnte interessant sein. Der Rest sollte keinen Unterschied machen. Bist du sicher, dass in deiner Toolchain ein Mega8 eingestellt ist? Hast du an den Fuse Bits rumgespielt? (Konkret: an der BODEN Fuse)
ok ok jetzt mal für noobs ^^ also das mit der optimierung --- keine ahnung nutze eclipse zum programmieren (einstellungen wie hier im artikel dazu beschrieben) fuse bits hab ich (mit angsschweiß auf der stirn) natürlich umstellen müssen (deswegen die 8 mhz) ich werde mal meine fuses posten sobald mein akku voll ist (traue mich net wirklich die 12 volt für mein experimentierboard ausm rechner zu ziehen)
ok jetzt wirds ganz verrückt hab meinen ladevorgang gerade mal unterbrochen und die fuses gelesen (siehe anhang) sowie die änderung mittel void und die andere while versucht hab gerade bemerkt, dass die led blink nur eben extrem schwach jetzt versteh ich gar nix mehr denn nehme ich "blinken()" raus leuchtet sie normal
Dein Problem liegt warscheinlich an deinen Fuses oder Schaltung. Ich habe deinen Code auf mein Testboart mit einem Mega8 geladen, Optimierung Os, das ergibt 192Byte und läuft problemlos, zuerst leuchtet LED PB1, geht aus und dann blinkt LED PB0. Hubert
also wahrscheinlich die fuses? (board ist ein fertiges experimentier boeard) jemand ne idee, welches fuse ich umstellen müsste? siehe oben hubert danke, dass dus mal getestet hast
Die Fuses sehen eigentlich soweit ganz gut aus. Stimmen denn die Blinkzeiten so einigermassn?
blinkzeiten sind gut nur die intensität spinnt aber eben auch nur dann, wenn ich das blinken in ne funktion auslagere aber das kann damit doch nix zu tun haben so viel versteh selbst ich werde mir das mit der optimierung heute aml ansehen eventuell hab ich da was eingestellt, was ich besser lassen sollte
Optimierung muss auch funktionieren. Hast du denn beim Linken auch das -mmcu=atmega8 mit in der Kommandozeile?
Wenn die LED nur ganz schwach "glimmt", würd ich darauf Tippen, dass der Port nicht als Ausgang konfiguriert ist, und du nur mit dem internen Pullup rumwackelst. check doch nochmal deine DDRB=... Anweisung, und pack testweise nochmal ein DDRB |= _BV(PB0); an den Anfang deiner blinken() funktion. /Ernst
Ich habe das Prog im AVR-Studio ohne Änderung compiliert und auf meinen Mega8 gespielt, funktioniert einwandfrei. Also kann nur der Compiler von Rene verrückt spielen oder die Hardware hat eine Macke. Hubert
Wie groß ist der Widerstand, wie ist die LED nun genau angeschlossen? Ich denke, dass deine LED über die Pullups mit Strom versorgt wird, statt über die Treiber. Blöderweise wurde das hier schon erwähnt. Irgendwas stimmt da nicht mit deinem PORTB. PS: Hast du eigentlich das JTAG Interface ausgestellt per Fusebit?
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.