www.mikrocontroller.net

Forum: Compiler & IDEs erstllte *.hex-Files nur im Stk 500 ausführbar-avr ide 4


Autor: Marcus B. (raketenfred)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Habe mir ein Stk 500 zugelegt und natürlich dazu auch Avr ide runter 
geladen

Da ich schon einiges in den C-Sprachen gemacht habe würde ich gerne C 
auch weiter hin verwenden, das Problem liegt jedoch da, dass der 
compiler mir keine sauberen hex-Files liefert.

Auf dem stk 500 wird alles sauber ausgeführt, jedoch in einer selbst 
gebauten schaltung nicht.
#include <avr/io.h> 
#define F_CPU 3686400UL
#define a 100
#include <util/delay.h>
int main(void)
{
_delay_ms(1000);
DDRB = (1 << DDB0) | (1 << DDB1) | (1 << DDB2) | (1 << DDB3) | (1 << DDB4) | (1 << DDB5) | (1 << DDB6) | (1 << DDB7);
_delay_ms(200);
DDRB=0x00;


while(1==1)
{

DDRB = (1 << DDB0) | (0 << DDB1) | (0 << DDB2) | (0 << DDB3) | (0 << DDB4) | (0 << DDB5) | (0 << DDB6) | (0 << DDB7); 
_delay_ms(a);
  DDRB = (0 << DDB0) | (1 << DDB1) | (0 << DDB2) | (0 << DDB3) | (0 << DDB4) | (0 << DDB5) | (0 << DDB6) | (0 << DDB7); 
_delay_ms(a);
  DDRB = (0 << DDB0) | (0 << DDB1) | (1 << DDB2) | (0 << DDB3) | (0 << DDB4) | (0 << DDB5) | (0 << DDB6) | (0 << DDB7); 
_delay_ms(a);
  DDRB = (0 << DDB0) | (0 << DDB1) | (0 << DDB2) | (1 << DDB3) | (0 << DDB4) | (0 << DDB5) | (0 << DDB6) | (0 << DDB7); 
_delay_ms(a);
  DDRB = (0 << DDB0) | (0 << DDB1) | (0 << DDB2) | (0 << DDB3) | (1 << DDB4) | (0 << DDB5) | (0 << DDB6) | (0 << DDB7); 
_delay_ms(a);
  DDRB = (0 << DDB0) | (0 << DDB1) | (0 << DDB2) | (0 << DDB3) | (0 << DDB4) | (1 << DDB5) | (0 << DDB6) | (0 << DDB7); 
_delay_ms(a);
  DDRB = (0 << DDB0) | (0 << DDB1) | (0 << DDB2) | (0 << DDB3) | (0 << DDB4) | (0 << DDB5) | (1 << DDB6) | (0 << DDB7); 
_delay_ms(a);
  DDRB = (0 << DDB0) | (0 << DDB1) | (0 << DDB2) | (0 << DDB3) | (0 << DDB4) | (0 << DDB5) | (0 << DDB6) | (1 << DDB7); 
_delay_ms(a);
}

}

[Schaltplan]

Natürlich Pins an GND und Vcc
kein Quarz
kein Kondensator
8 Leds(integrierter Vorwiderstand 5V) mit (+) -Pin an Mikrocontroller 
Pin anderen an gnd
5V USB-Spannung

[/sp]

so im stk 500 wird nach der programmierung das programm gestartet und es 
blinkt alles wie es blinken soll, laut fuses ist der Chip so eingestellt 
den internen Quarz zu verwenden. Das schlimme ist, im stk 500 läuft das 
Programm (und viele andere) aber nicht in der eigenen Schaltung.

Die eigene Schaltung kann ich jedoch ausschließen, ich habe mit einem 
Bascom-Compiler (Baisc-bäääh ;-)) ein hex-File erstellt, das Lauffähig 
ist in meiner Schaltung

Ich habe die Ide samt Winavr nochmal complett neuinstalliert auf einem 
Sauberen virteullen rechner aber die hex-Files werden leider nicht 
besser :( Der richtige Chip ist eingestellt- Siganturabgleich.

Momentan verwende ich nen 8151 aber habe auch schon 2313ner probiert- 
beides mehr schlecht als recht in C

Die Avr-Studio ausgaben beim Build(nicht von dem dämlich gewählten 
Projektnamen iritieren lassen):

rm -rf taster_8515.o  taster_8515.elf dep/* taster_8515.hex 
taster_8515.eep taster_8515.lss taster_8515.map
Build succeeded with 0 Warnings...
avr-gcc.exe  -mmcu=atmega8515 -Wall -gdwarf-2 -Os -std=gnu99 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP 
-MT taster_8515.o -MF dep/taster_8515.o.d  -c  ../taster_8515.c
avr-gcc.exe -mmcu=atmega8515 -Wl,-Map=taster_8515.map taster_8515.o 
-o taster_8515.elf
avr-objcopy -O ihex -R .eeprom  taster_8515.elf taster_8515.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" 
--change-section-lma .eeprom=0 --no-change-warnings -O ihex 
taster_8515.elf taster_8515.eep || exit 0
avr-objdump -h -S taster_8515.elf > taster_8515.lss

AVR Memory Usage
----------------
Device: atmega8515

Program:     290 bytes (3.5% Full)
(.text + .data + .bootloader)

Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)


Build succeeded with 0 Warnings...


-
ich weiß nicht mehr weiter bin über jede Hilfe dankbar, falls ich etwas 
vergessen habe bitte auch nach fragen

raketenfred

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcus B. wrote:
> Auf dem stk 500 wird alles sauber ausgeführt, jedoch in einer selbst
> gebauten schaltung nicht.
Dann liegt es schon mal mit ziemlicher Sicherheit nicht am Compiler!

>
> [c]
> #include <avr/io.h>
> #define F_CPU 3686400UL
> #define a 100
Gewöhne Dir an, Makronamen grundsätzlich in GROSSBUCHSTABEN zu 
schreiben, damit man sie von Variablen unterscheiden kann.

Nach dem Sinn des Programmcodes frage ich jetzt mal gar nicht. Das 
Umschalten der Datenrichtungsregister ist in diesem Falle eher Quatsch. 
Wofür gibt es die Portregister?

> [Schaltplan]
>
> Natürlich Pins an GND und Vcc
> kein Quarz
> kein Kondensator
Wie, kein Kondensator? Eine Schaltung mit einem Mikrocontroller enthält 
immer mindestens einen Kondensator, und zwar zwischen VCC und GND!

> 8 Leds(integrierter Vorwiderstand 5V) mit (+) -Pin an Mikrocontroller
> Pin anderen an gnd
Und da wunderst Du Dich, dass beim Umschalten der DDRs nichts geht? 
Sorry, schau Dir bitte mal die Grundlagen an, speziell im 
AVR-GCC-Tutorial! Ein Port hat mehr als nur ein Register! Außerdem 
sind die LEDs auf dem STK500 genau andersrum dran (LOW-aktiv, 0 am 
Ausgang -> LED an), weshalb es da auch funktioniert, weil Du zwischen 
Ausgang 0 (LED an) und Eingang 0 (hochohmig, kein Strom) umschaltest!

> so im stk 500 wird nach der programmierung das programm gestartet und es
> blinkt alles wie es blinken soll, laut fuses ist der Chip so eingestellt
> den internen Quarz zu verwenden. Das schlimme ist, im stk 500 läuft das
> Programm (und viele andere) aber nicht in der eigenen Schaltung.
Grund: Siehe oben!

> Die eigene Schaltung kann ich jedoch ausschließen,
Natürlich, es ist weder Deine Schaltung noch Dein Programm schuld, 
sondern der Compiler.

Du solltest die komplette Software noch fünfmal neu installieren und 
vielleicht auch das Betriebssystem. Dann könnte es gehen...

> Momentan verwende ich nen 8151
Was ist das denn für einer? Vielleicht eher ein 8515? Mega oder AT90S?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BTW:
Die "AVR ide" heißt vermutlich AVRStudio, oder meinst Du eine andere? 
Gewöhne Dir bitte eine etwas präzisere Ausdrucksweise an. Oder gibst Du 
allen Dingen in Deiner Umgebung neue Namen, damit Dich keiner versteht, 
wenn Du davon redest?

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

Bewertung
0 lesenswert
nicht lesenswert
Johannes M. wrote:

>> Momentan verwende ich nen 8151
> Was ist das denn für einer? Vielleicht eher ein 8515? Mega oder AT90S?

Eher einen 8051, der hat meines Wissens auch kein Datenrichtungs-
register für seine Ports, sondern kann nur zwischen aktiv low und
pullup umschalten.  Das würde das Gefasel hier erklären... aber
natürlich nicht das fehlende Studium von AVR-Tutorial und
AVR-GCC-Tutorial entschuldigen.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:
> Eher einen 8051,
Naja, der Zusammenhang "[...] nen 8151 aber habe auch schon 2313ner 
probiert" lässt eher doch nen (ATMega | AT90S)8515 vermuten...

Ich vermute mal, der OP ist grad dabei, seinen Rechner komplett neu 
aufzusetzen, weil er immer noch glaubt, dass es am Compiler liegt...;-)

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

Bewertung
0 lesenswert
nicht lesenswert
Johannes M. wrote:

> Ich vermute mal, der OP ist grad dabei, seinen Rechner komplett neu
> aufzusetzen, weil er immer noch glaubt, dass es am Compiler liegt...;-)

Oder er ist zum nächsten Controller gelaufen, weil der AVR zu
kompliziert war...

Autor: Marcus B. (raketenfred)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstmal für die ganzen Beiträge

Ich habe mein Betriebssystem erstmal noch geprüft, mit XP und meinem 
Code hat es nicht geklappt. Dannach habe ich es mit Win 2k probiert 
genau das gleiche Problem und 98SE wollte gar nicht starten- Ram zu groß 
und Treiber noch nicht geschrieben. Suse und Ubuntu haben auch nicht 
viel geholfen. Ich denke der Compiler könnte doch sauber sein, aber die 
ganzen AVR Chips sind fürn Müll ;-)


Mit der AVR-IDE meinte ichs AVR Studio 4.
Die Controlleren waren der 8515 der mitgelieferte Atmega 8515, und der 
2313 der Attiny 2313


[qoute] Außerdem
sind die LEDs auf dem STK500 genau andersrum dran (LOW-aktiv, 0 am
Ausgang -> LED an), weshalb es da auch funktioniert, weil Du zwischen
Ausgang 0 (LED an) und Eingang 0 (hochohmig, kein Strom) umschaltest! 
[/quote]

Gibt es da eine Einstellungsmöglichkeit die soetwas abstellt bzw 
umdreht?!

Den Kondensator habe ich der Einfachheit weggelassen, da das PC Netzteil 
ne recht gute Quelle war. Aber welche Größe wäre empfehlenswert für 
einen Stützkondensator?!

raketenfred

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcus B. wrote:
> Danke erstmal für die ganzen Beiträge
>
> Ich habe mein Betriebssystem erstmal noch geprüft, mit XP und meinem
> Code hat es nicht geklappt. Dannach habe ich es mit Win 2k probiert
> genau das gleiche Problem und 98SE wollte gar nicht starten- Ram zu groß
> und Treiber noch nicht geschrieben. Suse und Ubuntu haben auch nicht
> viel geholfen.
Du musst den Compiler dreimal installieren und wieder deinstallieren, 
dann einen Rosenkranz beten, und das ganze nochmal von vorne. Dann 
Manitu ein Rauchopfer darbringen und mindestens eine Stunde in 
Meditation verbringen. Dann sollte es klappen, aber nur, wenn Ostern und 
Weihnachten auf den selben Tag fallen!

> Ich denke der Compiler könnte doch sauber sein, aber die
> ganzen AVR Chips sind fürn Müll ;-)
Ah ja, das wird es sein...

Ich gehe mal davon aus, dass das ";-)" am Ende bedeutet, dass Du das 
ganze nicht wirklich ernst meinst. Ich kenne allerdings Leute, denen 
wäre das tatsächlich zuzutrauen.

> Mit der AVR-IDE meinte ichs AVR Studio 4.
> Die Controlleren waren der 8515 der mitgelieferte Atmega 8515, und der
> 2313 der Attiny 2313
Habe ich ja richtig geraten.

> [qoute] Außerdem
> sind die LEDs auf dem STK500 genau andersrum dran (LOW-aktiv, 0 am
> Ausgang -> LED an), weshalb es da auch funktioniert, weil Du zwischen
> Ausgang 0 (LED an) und Eingang 0 (hochohmig, kein Strom) umschaltest!
> [/quote]
>
> Gibt es da eine Einstellungsmöglichkeit die soetwas abstellt bzw
> umdreht?!
Was willst Du da abstellen oder umdrehen? Das ist nunmal die (aus 
historischen Gründen (*)) übliche Verschaltung von Lasten an 
µC-Ausgängen. Man muss eben nur dran denken, dass es beim STK so ist und 
eventuell die Portzueweisungen für die Anwendung invertieren, wenn man 
es da andersrum gemacht hat.

> Den Kondensator habe ich der Einfachheit weggelassen, da das PC Netzteil
> ne recht gute Quelle war. Aber welche Größe wäre empfehlenswert für
> einen Stützkondensator?!
Das hat nichts damit zu tun, wie "gut" das Netzteil ist! Zwischen dem 
Netzteil und dem µC liegen nicht zu vernachlässigende Leitungslängen, 
und die haben eine Induktivität. Deshalb ist ein Abblockkondensator in 
unmittelbarer Nähe der Versorgungsanschlüsse erforderlich. Den sollte 
man nie weglassen.

Die üblichen 100 nF (Keramik) tun es hier meist.


(*) Die früher üblichen und auch heute noch durchaus verbreiteten 
Open-Collector-Ausgangsstufen können nur als Senke (gegen Masse) 
nennenswert Strom treiben. Auch die ersten AVRs konnten, obwohl sie 
schon Push-Pull-Stufen hatten, als Senke deutlich mehr Strom treiben als 
als Quelle. Und für diese ersten AVRs ist das STK500 damals gebaut 
worden. Die aktuellen AVRs haben weitgehend symmetrische Ausgangsstufen 
(immer noch keine Selbstverständlichkeit bei µCs) und können sowohl als 
Quelle als auch als Senke den selben Strom treiben.

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

Bewertung
0 lesenswert
nicht lesenswert
Johannes M. wrote:

> Das hat nichts damit zu tun, wie "gut" das Netzteil ist! Zwischen dem
> Netzteil und dem µC liegen nicht zu vernachlässigende Leitungslängen,
> und die haben eine Induktivität. Deshalb ist ein Abblockkondensator in
> unmittelbarer Nähe der Versorgungsanschlüsse erforderlich.

Technischer Hintergrund: CMOS braucht zwar statisch keinen Strom,
aber in dem Moment, in dem eine Taktflanke intern Hunderte oder
Tausende von Registern den Zustand wechseln lässt, werden die am
Ausgang liegenden Kapazitäten schlagartig umgeladen.  Das verursacht
in der Versorgung eine kräftige Stromspitze, und in Folge der dort
vorhandenen Zuleitungsinduktivität bricht die Versorgungsspannung
am IC dann zusammen.  Die Notwendigkeit des Abblockkondensators
ist damit eine Eigenart von CMOS-ICs, Standard-TTL benötigt das nicht
in dem gleichen Maße.

> Auch die ersten AVRs konnten, obwohl sie
> schon Push-Pull-Stufen hatten, als Senke deutlich mehr Strom treiben als
> als Quelle.

Das hat übrigens physikalische Ursachen: n-Kanal-FETs sind einfacher
auf niedriges Rdson zu bringen als p-Kanal-FETs, da die Beweglichkeit
der Elektronen im n-Kanal viel größer ist als die der ,Löcher' im
p-Kanal.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jörg Wunsch:
Thx vr mch für die Ergänzungen.

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.