AVR schmiert ab bei Funktionen?

Gast #583471
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
Gast #583614
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??
Gast #583632
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?
Gast #583646
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)
Gast #583666
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)
Gast #583674
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
Angehängte Dateien:
Gast #584271
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
Gast #584367
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
#584442
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
Gast #584582
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

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.