Forum: Mikrocontroller und Digitale Elektronik Atmega8 lässt sich programmieren-jedoch tut sich nichts!


von Markus (Gast)


Lesenswert?

Hallo!

Wie man schon dem Betreff entnehmen kann, habe ich Probleme, den
Atmega8 zum Laufen zu bringen! Um die Hex-Files zum Mikronconroller zu
übertragen, benutze ich yaap und soweit funktioniert das ja auch! Wenn
ich ein Port hernehme und einen gewissen Wert zuweise, dann wird am
jeweiligen Port jedoch nichts ausgegeben! Es liegt an jedem Pin nur 0V
an!? Muss ich dem Mikroncontroller nicht sagen das er das Programm bei
einer bestimmten Adresse starten soll wie beim 8051 oda bearbeitet der
Atmega8 das gleich nach dem Übertragen des Programmes zyklisch!? Oder
muss ich noch andere hardwaremäßige Vorraussetzungen herstellen, dass
der Mikrocontroller das Programm abarbeitet?

Ich bedanke mich schon im Vorhinein für jede Hilfe!

MFG
Markus

von mthomas (Gast)


Lesenswert?

falsches forum.
data direction gesetzt (DDRx)?

von Markus (Gast)


Lesenswert?

Ja

von Micha (Gast)


Lesenswert?

http://www.mikrocontroller.net/forum/read-1-105065.html

Vielleicht hilft das ...
Gruß,
Micha

von Markus (Gast)


Lesenswert?

Danke für den Link!

Leider hat er mir bis jetzt noch nicht weitergeholfen! Wie schon gesagt
programmieren und auslesen lässt er sich ja einwandfrei. Danach stecke
ich mein ISP-Interface ab, d.h. nur mehr die Versorgungsspannung, XTAL,
AGND und AREF sind angeschlossen und am RESET habe ich die 5V! Das gibts
ja nicht, dass das nicht funktioniert? Das Programm selber ist ja nur
eine Wertzuweisung auf ein Port. Momentan bin ich ratlos, da der
Mikrocontroller ja nach dem Programmieren praktisch nur an den minimal
benötigten Pins (ok XTAL könnte man weglassen und den internen Takt
verwenden) beschalten ist.

MFG
Markus

von Christof Krüger (Gast)


Lesenswert?

Poste doch mal dein Programm hier als Anhang.

Hast du auch an eine Endlosschleife gedacht? Sonst gerät der AVR evtl.
in einen nicht programmierten Bereich des Flash-Speichers und resettet.

von Markus (Gast)


Lesenswert?

Ich hab auch schon das aller erste Programm im Tutorial ausprobiert, da
ich gedacht habe ich mach was grundsätzliches falsch, aber das
funktioniert ja auch nicht! Das Programm werdet ihr ja sicher alle
kennen! Als include-Datei hab ich die m8def.inc genommen, da ich ja
auch den ATMEGA8 habe!
----------------------
.include "m8def.inc"

ldi r16, 0xFF
out DDRD, r16
ldi r16, 0b11111100
out PORTD, r16

ende:    rjmp ende
---------------------
Da müsste ja alles passen! Das ist das Programm aus dem Tutorial! Ich
glaub ich hab nur PORTB auf PORTD umgeändert aber sonst nix. Und die
Endlosschleife ist ja auch drinnen! Wie ist das eigentlich bei den
AVR's, fangen die gleich bei der Adresse null an den Programmcode
hineinzuschreiben? Sind da nicht sonst die ganzen Interrupts?
Ich mach sicher was ganz einfaches falsch! Ich habe zwar viel mit dem
8051er gemacht aber in der AVR-Welt bin ich neu.

von Jim (Gast)


Lesenswert?

Hmmm, so viel kannst Du gar nicht mit dem 8051 gemacht haben, der
startet nämlich auch bei einer festen Adresse...

Besorg Dir mal das Datenblatt, da steht alles drin, was Du wissen
musst.

von Markus (Gast)


Lesenswert?

Hi!

Naja ich möchte mich hier jetzt nicht unbedingt darüber unterhalten
wieviel ich mit dem 8051 gemacht habe, aber wenn man das Programm ab
einer gewissen Adresse hineinschreibt kann man beispielsweise im
Monitorprogramm "mon51.exe" sagen er soll zu dieser Adresse gehen.
Das hab ich gemeint!

Da ich ja den ATMEGA8 kennenlernen will, nützt mir deine Aussage über
einen anderen Mikrocontroller eigentlich sehr wenig. Es ist mir auch
egal ob du denkst ich habe keine Ahnung vom 8051er aber die diversen
Projekte, die ich gemacht habe, funktionierten auch immer und das ist
wichtig!;-)

Ich will nur Hilfe haben im Bezug auf den ATMEGA8!

Am Takt kanns ja nicht liegen, sonst würde es ja auch nicht möglich
sein den µC zu programmieren!?

MFG
Markus

von Tobi (Gast)


Lesenswert?

muss ja mal ein bissl werbung machen :). schau mal die sachen zur
hardware durch, vielleicht findet sich ja was und wenn nicht können wir
uns zumindest diese fragen schonmal sparen ;)

http://www.mikrocontroller.net/wiki/AVR_Checkliste

von Markus (Gast)


Lesenswert?

Ok mal danke für den Link!

Ist die Spannungsversorgung richtig angeschlossen?
Ja das passt! Hab ich nachgemessen! Auch AVCC!

Anschluss des Reset-Pins
Passt auch! Hat einen Pull-Up Widerstand und ist auf 5V

Ist ein 100nF-Blockkondensator am AVR installiert?
Ist installiert, gleich in der Nähe der Pins.

Quarz angeschlossen?
Quarz ist angeschlossen und Fuse Bits sind entprechend eingestellt
(nach Tutorial)

Sind alle Ground - Anschlüsse beschaltet?
Ich hab GND und AGND! Beide sind beschalten und haben richtig Kontakt!
- Nachgemessen.

Sind alle Lötstellen in Ordnung?
Hab das ganze auf einem Breadboard, und über die Pins des µC kann ich
ja messen ob ein Kontakt vorhanden ist!

Eingänge
Hab ich derzeit keine!

Ausgänge
Ist nichts dran! Nur mein Voltmeter, wenn ich miss!

Tja und das Programm hab ich ja schon gepostet!

Weis jemand noch einen guten Rat?

von Markus (Gast)


Lesenswert?

Mit Eingänge und "Hab ich derzeit keine" meinte ich natürlich das ich
keine verwende!! Um das nur klarzustellen!

von Markus (Gast)


Lesenswert?

Hat sonst noch niemand das Problem gehabt? Sobald der RESET-PIN auf 5V
liegt arbeitet der µC das Programm ja ab oder?

Ich weis nicht mehr an was es liegen könnte.. Bitte um Hilfe!

MFG
Markus

von Christof Krüger (Gast)


Lesenswert?

Ja,

hast du eine Digicam? Dann mach doch mal ein Bild deines Aufbaus,
vielleicht hast du ja doch was falsch beschaltet.
Bei den AVRs kommen zuerst die Interrupt-Vektoren, da der RESET-INT
ganz am Anfang ist, kann man bei kleinen Programmen, die sonst keine
INTs benutzen den Code einfach von 0x00 an hinknallen.

PS: Man muss nicht jeden Satz mit einem Ausrufezeichen abschliessen,
das wirkt so, als würdest du dauernd brüllen.

von Markus (Gast)


Lesenswert?

Ok. Sorry wegen der Ausrufezeichen - ist eine blöde Angewohnheit von
mir. Ich mach das fast schon automatisch. Ist aber auf keinen Fall bös
gemeint.

Das mit dem falsch beschalten kann ich mir fast nicht vorstellen, denn
ich habe ja nach dem Programmieren nur die nötigsten Pins beschalten.
Also RESET ist auf 4,97V - bei den Ports überall 0V - bei VCC 4,99V bei
GND die 0V, dann bei AVCC auch 4,99V und bei AGND die 0V. Diese Werte
messe ich an den Pins direkt am µC

MFG
Markus

von Christof Krüger (Gast)


Lesenswert?

Vielleicht klappt das Programmieren ja doch nicht? Kannst du das
Programm auch wieder korrekt auslesen?

von Markus (Gast)


Lesenswert?

Ja kann ich... Ich erhalte wieder genau das, was ich heineingeschrieben
habe

von Gunter (Gast)


Lesenswert?

Hi,
hast Du mal einen manuellen Reset (bei angelegter Spannung)
probiert ?
Vielleicht steigt Deine Spannung beim Einschalten zu langsam
an.

Gruß
Gunter

von Christof Krüger (Gast)


Lesenswert?

Steckst du den ISP denn auch mal ab?

von Markus (Gast)


Lesenswert?

Das mit dem manuellen RESET hab ich gerade probiert, hat aber nichts
gebracht. Danke trotzdem.

Den ISP steck ich ab, dann hab ich nur mehr die oben genannten Pins
beschalten. D.h. ich trenne die MISO, MOSI, SCK, und RESET - Leitung
vom µC.

MFG
Markus

von Christof Krüger (Gast)


Lesenswert?

Ich weiss jetzt auch nicht mehr weiter. Kann mir dann nur noch ein
Hardware-Problem vorstellen. Vielleicht traust du dich ja doch noch,
deine Beschaltung hochzuladen ;)

von wolli (Gast)


Lesenswert?

Verwendest DU einen Quarz oder doch einen Quarzoszillator? Wenn es ein
Quarz ist, schwingt er richtig an?

von Markus (Gast)


Lesenswert?

Ich verwende einen Quarzoszillator und außerdem habe ich jetzt mal auf
den internen Takt umgeschalten um eben einen Fehler des externen Taktes
auszuschließen

von Markus (Gast)


Lesenswert?

Wegen dem Hochladen eines Fotos... ich hab zwar eine Digicam, die habe
ich aber derzeit jemanden ausgeborgt.

Aber wenn ich nur die nötigsten Pins angeschlossen habe und dort
entweder die geforderten 5V oder bei Masse die 0V miss, dann kann ja
bei der Verkabelung nichts daneben gegangen sein.

MFG
Markus

von Christof Krüger (Gast)


Lesenswert?

Eigentlich nicht, aber eigentlch sollte alles ja auch funktionieren
:-/
Ich nehme auch mal an, dass du den richtigen Pin als /RESET beschaltest
und dich auch beim Breadboard auskennst? Entschuldige die Fragen, aber
man weiss ja nie...

von Markus (Gast)


Lesenswert?

Wenn ich nicht den richtigen Pin als RESET beschalten hätte, könnte ich
den µC ja garnicht programmieren oder auslesen. Beim Breadboard kenne
ich mich aus!

Zu mir: Ich bin Elektrotechniker, soll von mir aus nix heißen, aber a
bissl wos könntest ma scho glauben/zutrauen. Thx.

Na i versteh des eh, wenn i sowas im Forum lesen würd, tät i a gleich
denken, awa was soll ich machen wenns net funzt.

Najo was solls, vielleicht is da µC jo hin. Glaubs zwar net awa sonst
fällt ma nix ein, was es noch sein könnt.

Danke auf jeden Fall für Eure Bemühungen.

MFG
Markus

von Gunter (Gast)


Lesenswert?

poste doch mal die paar Byte Hex-Code

von Markus (Gast)


Angehängte Dateien:

Lesenswert?

Hier das hex-file

von Gunter (Gast)


Lesenswert?

nochwas:
versuch mal ein RJMP direkt an den Anfang damit der
Code immer wieder ausgeführt wird.

von Christof Krüger (Gast)


Lesenswert?

War ja net bös gemeint, aber man weiss ja erstmal nicht, mit wem man es
zu tun hat. Kann ein E-Techniker sein, aber auch ein 14-jähriger
Schüler, der net weiss, was er tut, es aber nicht zugeben möchte.
;)

Guter Tip von gunter, evtl. auch andere Ports ausprobieren, wenn du es
noch nicht gemacht hast.

von Ingo Henze (Gast)


Lesenswert?

Das Testprogramm ist ok.
Im Studio sieht das dann etwa so aus:
+00000000:   EF0F        SER     R16              Load immediate
+00000001:   BB01        OUT     0x11,R16         Out to I/O location
+00000002:   EF0C        LDI     R16,0xFC         Load immediate
+00000003:   BB02        OUT     0x12,R16         Out to I/O location
+00000004:   CFFF        RJMP    -0x0001          Relative jump

Ich kann da nix falsches erkennen.
Kann also nur die Hardware sein...

von Mattias (Gast)


Lesenswert?

also ich bin der Meinung, dass das file (test.hex) nicht gehen kann. Die
Startadresse ist :000000
Das kann bei einem Mega8 nicht gehen, weil dort die IR Vektoren stehen.
Meine Files fangen immer bei :100000... an.
Ist aber nur eine Vermutung.
Benutze doch einfach mal den winavr. Dann brauchst Du Dich damit nicht
zu befassen. Wenn es damit auch nicht geht, dann kann es nur noch
Hardware sein.

Mattias

von Gunter (Gast)


Lesenswert?

Nö.
Mega8 Manual S.44:
If the program never enables an interrupt source, the
Interrupt Vectors are not used, and regular program code can be placed
at these locations.

von Markus (Gast)


Lesenswert?

Danke mal vorerst. Ich werde am Abend noch mal ein wenig herumprobieren
und dann werden wir ja sehen.

Danke nochmal
Bis dann

MFG
Markus

von Markus (Gast)


Lesenswert?

Schon langsam glaub ich wirklich es liegt am ATMEGA8. Ich hab jez
schnell umgeändert, dass es wieder von vorne anfängt-hatt aber nix
geholfen. Andere Ports hab ich auch schon am Anfang ausprobiert doch
auch kein Erfolg.

Also nochmal Zusammenfassung:
Das Programm scheint ja richtig zu sein und da ich das was ich in den
Flash geschrieben habe wieder auslesen kann, muss wohl auch das
Übertragen der Hex-Datei funktioniert haben.

Zur Hardware: Der Microcontroller steckt im Breadboard und es sind VCC,
GND, RESET, AGND, AVCC beschalten (nach dem Programmieren). VCC und AVCC
direkt mit +5V ; GND und AGND mit Masse. Der RESET-Pin wird über einen
10kOhm Pull-Up Widerstand auf nahezu 5V gehalten. Den externen
Oszillator habe ich weggelassen und die Fuse-Bits auf die Default-Werte
gestellt.

MFG
Markus

von Markus (Gast)


Angehängte Dateien:

Lesenswert?

Hier ein Sreenshot vom Inhalt des Flash-Speichers, wenn ich ihn auslese.

von Markus (Gast)


Angehängte Dateien:

Lesenswert?

Hier auch gleich noch die Einstellung der Fuses und Lockbits

von Mattias (Gast)


Angehängte Dateien:

Lesenswert?

Also folgendes,
wenn ich Dein test.hex bei mir programmiere, dann sind einige PINs auf
5V. Der Flash Inhalt sieht aber nicht so aus wie bei Dir. Wenn ich
genau das, was Du in Deinem Bild zeigst, bei mir reinhacke, dann
passiert auch bei mir nichts. Das was bei Dir im Flash steht, stimmt
nicht !!!!
Im Anhang ist ein Bild, wo man sehen kann, was wirklich im Flash steht,
wenn man test.hex programmiert.

Mattias

von Uwe (Gast)


Lesenswert?

Hi!
Also wenn das wirklich das Hex aus dem Flash ist gehen die Ausgaben
alle nach PinD.
Statt:   BB01        OUT     0x11,R16         Out to I/O location
steht:   BB00 = 0x10 = PinD
und      BB02        OUT     0x12,R16         Out to I/O location
hat      BB00 = 0x10 = PinD
Entweder es wird falsch gebrannt oder das Flash hat eine Meise.
Haste mal einen anderen uC (AT90...)
Kann es sein der Rechner ist zu schnell?
Zeige mal deine Yapp.ini
Andere SW testen.

Mehr fällt mir momentan nicht ein.

Viel Erfolg, Uwe

von Markus (Gast)


Lesenswert?

Danke für Eure Hilfe. Es funktioniert endlich.

Bei der Hardware hat auf jeden Fall alles gepasst. Nachdem ich "Erase
Chip" in yaap aufgerufen habe, und dann das Programm nochmal
rübergespielt hab, hat alles funktioniert. Bin ich froh! UART haut auch
schon hin. Habe ich doch noch Freude am AVR.

Danke nochmal!

MFG
Markus

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.