mikrocontroller.net

Forum: Compiler & IDEs AVR schmiert ab bei Funktionen?


Autor: Rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
....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??

Autor: Rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Frank Jonischkies (frajo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du da zwei LED's dran? An PB0 und an PB1? Sind die LED's gegen 
Masse oder gegen Versorgungsspannung geschaltet?

Autor: Rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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) ..

Autor: Rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok danke so weit, so bald mein lippo (akku) gekladen ist versuch ichs 
mal

hab leider nur nen 12 volt netzteil

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Rene (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Fuses sehen eigentlich soweit ganz gut aus.
Stimmen denn die Blinkzeiten so einigermassn?

Autor: Rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Optimierung muss auch funktionieren.

Hast du denn beim Linken auch das -mmcu=atmega8 mit in der
Kommandozeile?

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Hubert.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.