Forum: Mikrocontroller und Digitale Elektronik Einsteigerfrage: AVR-Tutorial IO-Grundlagen: LEDs leuchten nicht


von Andi Finkler (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe eine absolute Anfängerfrage und hoffe daher, dass mein Problem 
schnell gelöst werden kann. Ich hab schon gesucht, aber irgendwie bin 
ich wohl der einzige, der das nicht auf die Reihe bekommt. :D

Ich scheitere nämlich schon am allerersten Punkt im AVR-Tutorial, dem 
Anschluss der 6 LEDs an die IO-Ports. Sie leuchten einfach nicht.
Ein Foto von meinem Steckbrett habe ich angehängt. Es sieht leider nicht 
allzu ordentlich aus, aber ich hoffe, man erkennt das Grundlegende. Die 
Stromversorgung ist vorhanden und liefert die nötigen 5V, auch die Pins 
für Vcc und GND am uC sind richtig angeschlossen. Soweit ich das jetzt 
beurteilen kann, glaube ich nicht, dass der Fehler dort liegt.

Geschrieben habe ich das Programm mit AVR Studio 4 und auch direkt dort 
assembliert (über den Menüpunkt Build). Dann bekomme ich auch eine 
*.hex-Datei und die Meldung "Assembly complete, 0 errors, 0 warnings".
Die beiden Dateien habe ich auch mal mit angehängt.

Auf den uC wollte ich es dann mit Ponyprog2000 bekommen, da yaap ihn 
nicht erkennt (nutze ein Pollin-Board) und avrdude nur für nicht einmal 
eine Sekunde kurz ein Fenster öffnet und sich gleich wieder schließt. 
Ich habe dort also die Datei leds.hex geöffnet und auf Write Device 
geklickt. Wenn ich ihn dann wieder auslese, kommt das Bild, welches ich 
auch angehängt habe. Ich kenne mich nicht gut genug aus, um sagen zu 
können, ob das Programm jetzt richtig auf den uC geschrieben wurde.

Ich persönlich vermute den Fehler entweder beim assemblieren oder beim 
übertragen auf den uC.

Das ist jetzt etwas viel Text für so ein kleines Problem, aber ich muss 
jetzt los auf Arbeit und kann daher nicht so regelmäßig hier 
reinschauen. Deswegen versuche ich, so viel wie möglich dazu zu 
schreiben, damit so wenige Nachfragen wie möglich nötig sind. Habt bitte 
also auch Nachsehen mit mir, wenn ich nicht prompt zurückschreiben kann 
und denkt nicht, ich hätte den Thread hier vergessen.

Mir wurde beim Zusammenstellen der Einkaufsliste hier schon sehr gut 
geholfen und ich bedanke mich auch jetzt schon einmal im Voraus für jede 
Hilfe!

Mit freundlichen Grüßen,
Andi

von Jens (Gast)


Angehängte Dateien:

Lesenswert?

So wird das nichts. Du hast ja nichts gemacht auf deinem Controller.
Versuch es mal mit der angehängten Datei und versuche nachzuvollziehen 
was da passiert. Auch Kommentare machen sich im Programm sehr gut.
Mein Beispiel ist zwar für den ATMEGA 32, aber das sollte mit dem 
richtigen "include m8.def" auch richtig laufen. Du musst nur auf die 
Portzuordnung achten. Im Übrigen kann ich dir nur dringend ein Buch 
empfehlen um die Wissenslücken zu schließen!

Gruß, Jens

von Robin F. (gehacktes)


Lesenswert?

Morgen,

wäre nett wenn du dein "Programm" was du geschrieben hast mal rein 
stellst. Dann kann man schon einiges sagen :) ob das passen kann oder 
nicht.

Gruß

von spess53 (Gast)


Lesenswert?

Hi

>wäre nett wenn du dein "Programm" was du geschrieben hast mal rein
>stellst. Dann kann man schon einiges sagen :) ob das passen kann oder
>nicht.

Hat er doch.

@Andi

Teste doch mal ohne Controller, ob die LEDs bei entsprechendem Pegel 
leuchten.

MfG Spess

von guse (Gast)


Lesenswert?

oh da^^ hab nur die bilder gesehn xD

von Andi Finkler (Gast)


Lesenswert?

@Jens: Verstehe ich das richtig: Auf dem Controller ist kein Programm 
"angekommen" und er ist nicht weiter beschrieben? Das würde natürlich 
erklären, warum sich nichts tut, aber wie muss ich denn die *.hex-Datei 
mit PonyProg öffnen und richtig auf den Controller schreiben? Bis jetzt 
habe ich das so gemacht: PonyProg geöffnet, die Datei leds.hex geöffnet 
und dann auf "Write Device" geklickt. Dann kam der Statusbalken. Aus dem 
Code, den PonyProg mir liefert, wenn ich anschließend auf "Read Device" 
klicke, kann ich als Anfänger aber nicht schließen, ob der Controller 
jetzt beschrieben wurde. Oder muss ich statt auf "Write Device" auf 
"Write Flash" oder so klicken?
Dein Programm teste ich, sobald ich in die Mittagspause komme, so in ein 
bis zwei Stunden. Danke auf jeden Fall.

Ein Buch wollte ich mir auch suchen, aber das wollte ich an sich hier 
nicht direkt fragen, da ich über die Suche ja bestimmt was gefunden 
hätte. Ein wenig Eigeninitiative will ich ja schon zeigen. Aber wenn du 
es schon ansprichst - hast du vielleicht einen Geheimtipp für einen 
Einsteiger wie mich?

@spess53: Alle LEDs hab ich noch nicht durchprobiert, aber ich hab es 
mal mit einer versucht. Die hat geleuchtet. Also sollte der 
Vorwiderstand schon so passen. Das schließt natürlich nicht aus, dass 
die anderen LEDs einen Knacks weg haben, die kommen aber direkt frisch 
aus der Packung. Stimmt den der Aufbau auf dem Steckbrett so?

von Torsten K. (ago)


Lesenswert?

Hmm.. ich sehe da keinen Oszillator auf dem Steckbrett... Fuses richtig 
gesetzt?
Siehe auch "Hinweis: Konfigurieren der Taktversorgung des ATmega8" im 
Tutorial.

von Michael H. (michael_h45)


Lesenswert?

Michael H. schrieb:
[blödsinn]

von Andi Finkler (Gast)


Lesenswert?

@Torsten:
Richtig, ich habe noch keine externe Taktversorgung angeschlossen, ich 
hatte gehofft, dass der interne Takt zumindest für die Versuche mit den 
LEDs ausreichend ist. Und jetzt bekomme ich wahrscheinlich gleich eins 
auf den Deckel. :D Also ist dein Tipp, den Takt per Quarz vorzugeben 
(was anderes habe ich nicht zur Hand) und es nochmal zu probieren?

von Michael H. (michael_h45)


Lesenswert?

Andi Finkler schrieb:
> Richtig, ich habe noch keine externe Taktversorgung angeschlossen, ich
> hatte gehofft, dass der interne Takt zumindest für die Versuche mit den
Das ist er auch voll und ganz.
Der Verdacht war eher, dass du bei den Fuses zwar externen Takt 
eingestellt, aber keinen angeschlossen hast.
Wenn du das ausschließen kannst, liegts an was anderem.

Auf einem Atmega8 bei mir läuft das Programm übrigens.
PB0-1 sind 0V, PB2-7 sind Vcc.

von Torsten K. (ago)


Lesenswert?

Andi:

Wie Michael schon geschrieben hat: Wenn du an den Fuses nichts geändert 
hast, sollte es gehen, ES SEI DENN du hast den Controller nicht "so" 
gekauft, sondern er war bei einem Entwicklungsboard dabei wie bei mir - 
Da war nämlich schon ein Testprogramm drauf und die Fuses für den 
On-Board-Quarz gesetzt.

Wenn Du Ponyprog nutzt (kenne ich nicht, da ich Linux nutze und es hier 
andere Tools gibt) dann schau mal im Abschnitt "Fuses setzen" auf:

http://wiki.ctbot.de/index.php/Ponyprog

Im Menü "Command | Security and Configuration Bits..." oder das 
Schloßsymbol.

Hier gibt es den Button "Read", schau mal welche Fusebits gesetzt sind. 
Bitte beachte den Hinweis im Abschnitt unbedingt: Falsches setzen der 
Fuses könnte den Controller temporär unbrauchbar machen. Ich würde nen 
ext. Quarz oder Resonator nehmen (ist auf meinem AVR Board mit drauf).

Noch ein Link: http://www.rn-wissen.de/index.php/Avr

myAVR Board MK2 USB -> Ich hatte mir den Bausatz des 
http://shop.myavr.de/Systemboards/myAVR%20Board%20MK2%20USB,%20best%C3%BCckt.htm?sp=article.sp.php&artID=40 
geholt damit ich nen USB-Programmer hab, und was zum spielen...

von Andi Finkler (Gast)


Angehängte Dateien:

Lesenswert?

Nein, externer Takt ist nicht aktiviert. An den Fuses hab ich auch noch 
nicht rumgestellt.
Wenn ich Command | Security and Configuration Bits aufrufe, hab ich 
deutlich weniger Optionen als im Link beschrieben (siehe Anhang).

@Michael: Wenn das Programm bei dir läuft, muss bei mir entweder was an 
der Schaltung nicht stimmen (was ich nicht glaube, schon nachgeschaut) 
oder beim überspielen auf den Controller. Kann mir jemand erklären, der 
vielleicht selber PonyProg benutzt, ob mein Weg, die Datei auf den 
Controller zu bekommen, richtig ist? Wenn ich das Programm von Jens auf 
den Controller spiele, sieht das in PonyProg schon deutlich anders aus 
als auf meinem ersten Screenshot, wenn ich auf Read Device klicke. Es 
kommt also etwas dort an. Das Programm funktioniert aber trotzdem nicht, 
hab den Fehler aber noch nicht gefunden.

Oder hab ich vielleicht beim assemblieren der Datei was falsch gemacht?

Tut mir Leid, dass ich mich so dumm anstelle, aber ich bin halt einfach 
noch total unerfahren, was das alles angeht. Aber danke für die tolle 
Hilfe hier!

LG Andi

von spess53 (Gast)


Lesenswert?

Hi

>Oder hab ich vielleicht beim assemblieren der Datei was falsch gemacht?

Nein, der Hex-Code vom Anfang passt schon zu deinem Programm. Ist das 
dein erster Versuch?

MfG Spess

von Andi Finkler (Gast)


Lesenswert?

Hm, ok. Ja, ist mein erster Versuch mit uCs. Das ist wirklich ärgerlich. 
Ich denke, heute Abend bauch ich die komplette Schaltung noch einmal neu 
auf, vielleicht liegt ja wirklich dort der Fehler. Kann ich denn 
irgendwie erkennen, ob die *.hex-Datei richtig auf dem Controller 
ankommt? Soll ich vielleicht einfach mal einen anderen uC (hab noch 
einen auf Reserve) probieren?

LG Andi

von Andi Finkler (Gast)


Lesenswert?

Oh Gott.. ich trau es mich ja gar nicht zu sagen. Ich hab die LEDs 
falsch herum gepolt. Dabei dachte ich, ich hätte extra nochmal 
nachgeschaut, wierum die gehören, als ich die Schaltung aufgebaut habe. 
Tut mir Leid an alle diejenigen, die jetzt hier ihre Zeit mit mir 
verschwenden mussten. Und ein großes Dankeschön. Ihr seid wirklich 
super. Hoffentlich bleibe ich von weiteren Missgriffen dieser Art 
verschont.
Ich hatte zwar schon selber einige Stunden damit verbracht, nach einer 
Lösung für das Problem zu suchen, aber ich hätte doch einfach nochmal 
den Aufbau der Schaltung überprüfen sollen. Asche über mein Haupt.

LG Andi

von spess53 (Gast)


Lesenswert?

Hi

Reduziere deine Schaltung erstmal auf eine LED. Die Taster und die 
anderen LEDs kannst du wieder einsetzen, wenn es mit der einen geklappt 
hat.

>Wenn ich Command | Security and Configuration Bits aufrufe, hab ich
>deutlich weniger Optionen als im Link beschrieben (siehe Anhang).

Die Security Bits brauchst du erstmal nicht. Das mit den Optionen sind 
die Fuses. Aber die kannst du vorerst auch in Ruhe lassen. Maximal 
Lesen.

Pony Prog kenne ich nicht. Aber vielleicht gibt es ein 'Verify'. Damit 
lässt sich der Programmspeicher mit den zu programmierenden Daten 
vergleichen.

MfG Spess

von Andi Finkler (Gast)


Lesenswert?

Verify gibts, sagt auch alles ok. Jetzt läufts ja. Besten Dank für die 
Hilfe! :)

von spess53 (Gast)


Lesenswert?

Hi

>Verify gibts, sagt auch alles ok. Jetzt läufts ja. Besten Dank für die
>Hilfe! :)

Noch etwas: Bei deinem Aufbau solltest du beide VCCs und beide GNDs 
anschließen. Und jeweils einen 100n Keramik-C zwischen VCC und GND.

MfG Spess

von Andreas F. (Firma: //) (andifin)


Lesenswert?

Hab gerade deswegen im datasheet nachgeschaut, den zweiten GND-Pin finde 
ich. Neben dem einen Vcc-Pin finde ich nur noch AVcc, meinst du den mit 
zweitem Vcc-Pin?

Kurze Erklärung wieso wäre übrigens nett! :) Will doch dazulernen. ;)
Gilt das speziell für diesen Aufbau oder sollte ich das immer machen?
Dankeschön!

von spess53 (Gast)


Lesenswert?

Hi

>Neben dem einen Vcc-Pin finde ich nur noch AVcc, meinst du den mit
>zweitem Vcc-Pin?

Ja.

>Kurze Erklärung wieso wäre übrigens nett! :) Will doch dazulernen. ;)
>Gilt das speziell für diesen Aufbau oder sollte ich das immer machen?
>Dankeschön!

http://www.atmel.com/dyn/resources/prod_documents/doc1619.pdf

http://www.atmel.com/dyn/resources/prod_documents/doc2521.pdf

MfG Spess

von Graue Maus (Gast)


Lesenswert?

Andi Finkler schrieb:
> Verify gibts, sagt auch alles ok. Jetzt läufts ja. Besten Dank für die
> Hilfe! :)

Äh, wirklich?
Das Programm fummelt kurz an DDRB und hängt dann in einer 
Endlosschleife:
1
.include  "m8def.inc"
2
      
3
      ldi r16, 0xFF
4
      out DDRB, r16
5
6
      ldi r16, 0b11111100
7
      out PORTB, r16
8
9
ende:    rjmp ende

von Graue Maus (Gast)


Lesenswert?

Sorry, ich war zu schnell mit dem Abschicken.
Ich hatte gedacht, da soll was blinken, weil ich es immer blinken lasse.
Aber man soll nicht von sich auf andere schließen...

von Andi Finkler (Gast)


Lesenswert?

@Spess: Danke für die Links! Werde sie mir zu Gemüte führen.

@Graue Maus: Kein Problem. :)

von Andreas F. (Firma: //) (andifin)


Lesenswert?

Hey,
ich will nicht gleich einen neuen Thread aufmachen, deswegen stelle ich 
die Frage nochmal hier. Ich habe oben ja schon ein Bild gezeigt, wie es 
aussieht, wenn ich mit PonyProg die FuseBits auslesen lasse. Wenn ich 
jetzt externen Takt aktivieren möchte, müsste ich ja deutlich mehr 
Kästchen zur Auswahl haben. (Bsp.: 
http://www.klaus-leidinger.de/mp/Mikrocontroller/AVR-Prog/PonyProg-Fuse.jpg 
)

Wie mache ich das also? yaap erkennt den Controller nicht und avrdude 
startet nur kurz ein kleines Fenster, was sich sofort wieder schließt.
Sind die ganzen Probleme etwa auf das billige Pollin-Board 
zurückzuführen?

LG Andi

von Karl H. (kbuchegg)


Lesenswert?

Andreas Finkler schrieb:
> Hey,
> ich will nicht gleich einen neuen Thread aufmachen, deswegen stelle ich
> die Frage nochmal hier. Ich habe oben ja schon ein Bild gezeigt, wie es
> aussieht, wenn ich mit PonyProg die FuseBits auslesen lasse.

Stell mal im PonyProg den verwendeten Mega8 direkt ein und lass den 
Prozessortyp nicht von PonyProg bestimmen.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Andreas Finkler schrieb:

> Wie mache ich das also? yaap erkennt den Controller nicht und avrdude
> startet nur kurz ein kleines Fenster, was sich sofort wieder schließt.
> Sind die ganzen Probleme etwa auf das billige Pollin-Board
> zurückzuführen?

Ich konnte ein Pollinboard (Pollin Funk-AVR-Evaluationsboard) schon 
mit Avrdude programmieren. Ich mache das sogar standardmäßig mit 
Avrdude.

Das verschwindende Fenster ist schnell behoben:

Öffne unter Windows mit Start -> Ausführen -> Cmd eine Konsole (Shell) 
und tippe dort den Startbefehl für Avrdude inkl. Kommandozeile direkt 
oder als Batchfile ein.

Du kannst auch bequem die Programmmeldungen von Avrdude in eine Datei 
umleiten und hier für die Ferndiagnose anhängen.
http://www.mikrocontroller.net/articles/AVRDUDE#Textausgabe_in_Datei_umleiten.3F

von Andi Finkler (Gast)


Lesenswert?

@Karl Heinz: Ah, sehr gut, hat funktioniert, jetzt sehe ich mehr.
Ich versuch dann gleich mal, auf externen Takt umzustellen.

@Stefan B: Ok, das Programm habe ich geschafft zu starten (Google sei 
Dank, ich kenne mich mit der Konsole gar nicht aus). Er zeigt mir auch 
die verschiedenen Optionen an (also sowas wie -p <partno> specify AVR 
device), aber danach kommt wieder die Zeile C:\Dokumente und 
Einstellungen usw.
Habe schon versucht, einfach dann den Befehl avrdude-5.3.1 -p 
einzugeben, dann kommt aber: can't open file "": no such file or 
directory.

von Andreas F. (Firma: //) (andifin)


Lesenswert?

Ups... jetzt tut sich gar nichts mehr und ich weiß nicht, wieso. Ich hab 
also im Datenblatt nachgeschaut, welche Bits ich setzen muss. Für 
internen Takt steht dort 0001. Bei PonyProg sind bei CKSEL 3, 2 und 1 
ein Haken gesetzt, bei CKSEL 0 nicht. Passt auch zu der Beschreibung bei 
PonyProg, dass ein Häkchen programmiert bedeutet. Für externen Quarz 
steht im Datenblatt 0101. Häkchen entsprechend gesetzt und jetzt bekomme 
ich die Meldung "Device missing or unknown". Dabei hatte ich mich extra 
vergewissert, dass ich die richtigen Häkchen setze. Hat hier jemand 
vielleicht einen Atmega8 mit externen Quarz und kann mir zeigen, wie bei 
ihm in PonyProg die Häkchen gesetzt sind? Danke! Oder muss ich sonst 
noch weitere Häkchen umstellen?

LG Andi

von Karl H. (kbuchegg)


Lesenswert?

Andreas Finkler schrieb:

> PonyProg, dass ein Häkchen programmiert bedeutet. Für externen Quarz
> steht im Datenblatt 0101.

Welchen Quarz hast du?`

Da ich nicht davon ausgehe, dass du einen kleinen Quarz genommen hast 
(denn dann hättest du dir die ganze Aktion auch sparen können):

Im Datenblatt, Tabelle 4 / Seite 27 steht aber ganz was anderes.

von Andi Finkler (Gast)


Lesenswert?

Der Quarz hat 4 Mhz.
Hab mich nach der Tabelle auf Seite 26 gerichtet (Table 2). Tut mir 
Leid, hab mich auch vertan, meinte 1010. Da stehen ja auch immer zwei 
Zahlen, in dem Fall 1111-1010. Aber ich befürchte gerade, ich sehe 
meinen Fehler. Wenn ich deine Tabelle noch mit anschaue, müsste ich wohl 
1110 einstellen, richtig?

LG Andi

von Karl H. (kbuchegg)


Lesenswert?

Andi Finkler schrieb:
> Der Quarz hat 4 Mhz.
> Hab mich nach der Tabelle auf Seite 26 gerichtet (Table 2). Tut mir
> Leid, hab mich auch vertan, meinte 1010.

Sicher, dass du das tatsächlich eingestellt hast?

> Da stehen ja auch immer zwei
> Zahlen, in dem Fall 1111-1010. Aber ich befürchte gerade, ich sehe
> meinen Fehler. Wenn ich deine Tabelle noch mit anschaue, müsste ich wohl
> 1110 einstellen, richtig?

richtig.
Es ist beim Datenblatt immer gut solange weiterzulesen, bis das Gelesene 
ganz offensichtlich nicht mehr zum Thema gehört. Also: Ganze Kapitel 
lesen!


Jetzt wirds schwierig, den µC wieder soweit zur Mitarbeit zu bewegen, 
dass du die Fuses umstellen kannst.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Andi Finkler schrieb:

> Habe schon versucht, einfach dann den Befehl avrdude-5.3.1 -p
> einzugeben, dann kommt aber: can't open file "": no such file or
> directory.

Avrdude ist ein Programm, das man nicht durch Trial-and Error bedienen 
kann. Genau so wenig, wie man ein Space Shuttle so landen kann. Man kann 
es versuchen, aber Fehlbedienungen kosten Zeit und/oder Geld. Zum Glück 
gibt es für beides Handbücher (Manuals). Man findet den Link zum Avrdude 
Manual auf der Seite Avrdude.

von Andi Finkler (Gast)


Lesenswert?

@Karl Heinz: Ok... Anfängerfehler. Beim Nächsten wirds besser gemacht. 
Hoffentlich. Danke für deine Hilfe!

@Stefan B.: Danke, werd mir die Anleitung anschauen.

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.