www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit erstem Programm für ATMega128


Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe folgendes einfaches Programm (basierend auf einem Beispiel):

#include <stdio.h>
#include <inttypes.h>
#include <avr/io.h>

#define F_CPU      14745600
#define BAUD_RATE    115200

#define LED_DDR  DDRB
#define LED_PORT PORTB
#define LED_PIN  PINB
#define LED      PINB7

int main(void)
{
  asm volatile("nop\n\t");

  uint32_t l;
  for (;;)
  {
    LED_PORT |= (1 << LED); // LED EIN
    for(l=0; l<2000000; ++l);
    LED_PORT &= ~(1 << LED); // LED AUS
    for(l=0; l<20000000; ++l);
  }
}

ich comiliere es mit Eclipse.

dann lade ich es mit uisp auf den µc:

uisp -dprog=stk200 -dpart=atmega128 -dlpt=0x378 --upload if=HelloAVR.hex

Ich öffne ein Terminal auf der seriellen Schnittstelle (es ist ein 
Crumb128 eval-Board mit Bootloader. Der Bootlaoder meldet sich, ich 
drücke "j" was die Adresse 0x00 anspringen soll um das Programm 
auszuführen. Leider blink die LED dann jedoch nicht und der Bootloader 
reagiert bis zum Reset auch nicht mehr.

Kann mir Jemand helfen, ich sehe nicht was ich falsch mache!

Danke und Gruß
Matthias

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast den Led-Port nie auf Ausgabe gestellt.

int main(void)
{
  asm volatile("nop\n\t");

  uint32_t l;

  LED_DDR = ( 1 << LED );

  for (;;) {
   ...

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry, dummer Fehler....

also nochmal:
#include <avr/io.h>

#define F_CPU      14745600
#define BAUD_RATE    115200

#define LED_DDR  DDRB
#define LED_PORT PORTB
#define LED_PIN  PINB
#define LED      PINB7

int main(void)
{
  asm volatile("nop\n\t");
  LED_DDR |= (1 << LED); // LED auf Ausgang
  uint32_t l;
  for (;;)
  {
    LED_PORT |= (1 << LED); // LED EIN
    for(l=0; l<2000000; ++l);
    LED_PORT &= ~(1 << LED); // LED AUS
    for(l=0; l<20000000; ++l);
  }
}


Aber funktionieren tut es immer noch nicht.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf welcher OPtimierungsstufe compilierst du?

Autor: Ole H. (tragichero)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
volatile uint32_t l;  könnte helfen, der compiler killt dir sonst deine 
schleifen... ;-) je nach optimierung

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
volatile uint32_t l; hab ich jetzt drin.

Alle Compileroptionen:
-fmessage-length=0 -Wall -Wstrict-prototypes -I/usr/avr/include 
-mmcu=atmega128 -minit-stack=__stack -O0 -fshort-enums -fpack-struct 
-funsigned-char -funsigned-bitfields -std=gnu99 -g2

ich habe dieses Plugin zur Einstellung von Eclipse benutzt:
http://www.mikrocontroller.net/attachment.php/2853...

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich über ein Fuesbit einstellen, dass der Controller nicht erst den 
Bootloader anspringt, nur um einen Fehler darin auszuschließen?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also jetzt läuft es!

Scheinbar kann es Controller nicht richtig geflasht werden, wenn der 
Botoloader drauf ist.Das denke ich weil:

Ich habe daher erst einen download gemacht -> orig_dl.hex
dann den Flash komplett gelöscht.
Dann das Programm von oben allein auf den Controller geflasht: GEHT!
Dann habe ich wieder einen Download gemacht -> hello_dl.hex
Dann orig_dl.hex und hello_dl.hex gemischt, d.h. den Anfang von 
hello_dl.hex und den Rest von orig_dl.hex (Bootloader ganz am Ende) dann 
das ganze wieder auf den Controller geflasht, und jetzt startet erst der 
Bootloader und dann kann ich das Programm anspringen.

Aber wie würde man das richtig machen? warum geht es nicht, wenn ich das 
Programm "einfach so" auf den Controller flashe?

Gruß
Matthias

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.