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.
[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
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?
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?
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.
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...;-)
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...
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
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.
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.