Forum: Mikrocontroller und Digitale Elektronik ATtiny13V-10PU mit AVR Studio 5 und AVRISP mk2 programmieren


von Philipp B. (oddgit)


Lesenswert?

Hallo zusammen,

nachdem ich mich durch das Buch "AVR-Mikrocontroller in C programmieren" 
gearbeitet habe, wollte ich Taten walten lassen und hab mir o.g. 
genannte Hard- und Software zugelegt.

Leider scheitere ich bereits an einer blinkenden LED.

Folgendes Problem: Ich hab den AVRISP mk2 mit dem ATtiny verdrahtet und 
die LED über einen Widerstand an den Port PB4 angeschlossen. Mit einem 
Spannungswandler (7805) erzeuge ich 4,91 V.

Der Quelltext ist denkbar einfach:
1
#define F_CPU 1200000
2
#include <avr/io.h>
3
#include <util/delay.h>
4
5
6
int main(void)
7
{
8
  DDRB = 0b010000; 
9
    while(1)
10
    {
11
    PORTB = 0b010000;
12
    _delay_ms(500);
13
    PORTB = 0b000000;
14
    _delay_ms(500);
15
    }
16
  return 0;
17
}

Soweit so gut. Ich kann alles kompilieren, AVR Studio 5 erkennt den 
Programmer und ich hab auch ein Firmware Upgrade durchgeführt.

Nach dem Erstellen gehe ich über Extras/AVR Programming in den 
Programmiermodus. Auch da scheint mir noch alles in Ordnung zu sein. Bei 
"Memories" lade ich dann die .hex Datei und programmiere den Controller. 
Und jetzt kommt die Fehlermeldung:
"File contents outside device memory
Some sections of the file provided does not fit within the device 
memory.

Do you want to continue programming Flash using only the sections that 
fit within the device memory?"

Tja. Aber so riesig ist mein Quelltext ja gar nicht... So wies aussieht, 
liegt das an der delay Routine, weil wenn ich die weglasse 
funktionierts. Aber dann blinkts natürlich auch nicht ;).

Die FUSES hab ich meines Erachtens richtig gesetzt (9,6 MHZ, Start Up 
Time 14 CK + 64ms, mit dem CKDIV8 enabled = 1200000 Hz)...

Wäre echt super, wenn mir jemand meinen Sonntag retten könnte.

Gruß Philipp.

Ach und, Sufu und google kenn ich. Ich hoffe dieser Threat ist 
berechtigt...

von Christian F. (cmf) Benutzerseite


Lesenswert?

Was passiert, wenn du statt
1
#define F_CPU 1200000
2
#include <avr/io.h>
3
#include <util/delay.h>
1
#include <avr/io.h>
2
#define F_CPU 1200000
3
#include <util/delay.h>

schreibst?

von Philipp B. (oddgit)


Lesenswert?

Das ändert nix, da hab ich das gleiche Problem...

Ich hab auch versucht, die Delay-Funktion selber zu schreiben (müsste 
doch so funktionieren, oder?):
1
#include <avr/io.h>
2
3
void delay(void);
4
5
int main(void)
6
{
7
  DDRB = 0b010000; 
8
    while(1)
9
    {
10
    PORTB = 0b010000;
11
    delay();
12
    PORTB = 0b000000;
13
    delay();
14
  }
15
  return 0;
16
}
17
18
19
void delay(void)
20
{
21
  int i = 0;
22
  while(i<600000) i++;
23
}

Dann bekomme ich zwar die Fehlermeldung über den Speicher nicht mehr, 
aber die LED blinkt nach wie vor nicht, sondern leuchtet nur.

von Christian F. (cmf) Benutzerseite


Lesenswert?

Was passiert, wenn du:

1. F_CPU 1200000UL schreibst

2. In der selbstgeschriebenen Funktion einfach noch 10 Nullen mehr 
ranhängst?

von Philipp B. (oddgit)


Lesenswert?

Bei beiden Varianten gleiches Ergebnis:
Mit mehr Nullen leuchtet die LED nur, mit F_CPU 1200000UL kommt der 
Fehler wegen des fehlenden Speichers. Was genau bewirkt das "UL"?

von Christian F. (cmf) Benutzerseite


Lesenswert?

Stimmt, Optimierung ist lebenswichtig für delay.

Geht irgendwo unter Projekteinstellungen.

von Klaus W. (mfgkw)


Lesenswert?

Philipp B. schrieb:
> Dann bekomme ich zwar die Fehlermeldung über den Speicher nicht mehr,
> aber die LED blinkt nach wie vor nicht, sondern leuchtet nur.

Vielleicht blinkt sie nur so schnell, daß du es nicht siehst?

Bei den _delay-Funktionen sollte man übrigens Compileroptimierung 
eingeschaltet haben; vielleicht geht es deshalb nicht bei dir?

von Philipp B. (oddgit)


Lesenswert?

Oh man. So ein Sche** echt. Aber wie soll man da drauf kommen, wenn man 
keine Ahnung hat.

Hab jetzt unter Toolchain -> Optimization -> Optimize for Size (-Os) 
eingestellt. Jetzt gehts.

Tausend Dank, ihr habt mir das Wochenende gerettet.

von Klaus W. (mfgkw)


Lesenswert?

Philipp B. schrieb:
> Aber wie soll man da drauf kommen, wenn man
> keine Ahnung hat.

Ganz einfach immer die Doku zu dem lesen, was man benutzt:
http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html

:-)

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
Noch kein Account? Hier anmelden.