Probleme mit erstem Programm für ATMega128

Gast #460740
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
Gast #460754
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.
Gast #460769
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/285349/org.eclipse.cdt.avrgcc_1.0.16.zip
Gast #460827
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

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.