mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega8-Anlaufprobleme


Autor: Mech-Michi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich habe einen Atmega8 und habe entsprechend dem Tutorial die das
ISP-Interface, die MC-Schaltung und ein I/O-Board gebaut.
Jetzt hab ich einmal ein Programm geschrieben, mit dem ich alle Ports
als Ausgang definiere und in einer Schlaufe sie jeweils 1 und 0
wechsle.
Das Problem: Die Led´s leuchten nicht. :(

Folgende möglichen Fehlerquellen kann ich ausschließen:

- Led hat zu den passenden Pins Kontakt, und funktioniert auch, wenn
man den Ausgang manuell auf Masse zieht
- Programm lässt sich mittels PonyProg aufspielen und auch wieder
auslesen (Daher gehe ich davon aus, dass auch das drauf ist)

Frage: Muss ich den MC seperat über einen Reset booten? Oder reicht es,
wenn ich ihn vom ISP abklemm und mit dem I/O-Board verbinde?
Ist für einen ATmega8-16U die richtige include Datei "m8def.inc"?

Ich würde mich sehr über eure Hilfe freuen, da doch schon ein paar
Stunden drauf gegangen sind.

Gruß

Michi

Autor: Hannes Lux (hannes)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Du hast die Datenrichtung nicht definiert, Die Ports sind noch als
Eingang geschaltet.

Schau dir mal das Programm im Anhang mit AVR-Studio an und versuche mal
mit Hilfe des Datenblattes (Vollversion!) nachzuvollziehen, was (und
warum so und nicht anders) dort gemacht wird.
Du kannst dazu auch den Simulator bemühen.

...

Autor: Jörn G. aus H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat dein AVR einen Takt? Je nachdem, wie du ihn konfiguriert hast,
entweder extern per Quarz oder den internen aktiviert.
Ohne Takt läuft das Programm nicht los.
Allerdings würde dann glaube ich auch nicht prgrammiert werden (bin ich
mir unsicher gerade).
Reset-Pin kannst du ja mal auf +5V legen, dann sollte es loslaufen.

Soweit ich sehe, ist dein Programm OK, also Ausgänge definierst du
(keine Ahnung, was HanneS meint). alle Bits in den DDRx sind bei dir
1.

Du schaltest die LEDs wahnsinnig schnell ein und gleich wieder aus,
vielleicht siehst du nur nicht, dass sie leuchten?

Probier mal ein Programm raufzuladen :

.INCLUDE "m8def.inc"
.DEF mp = R16
main:
ldi mp,0xFF
out DDRB,mp
ldi mp,0x00
out PORTB,mp
loop:
rjmp loop


Und danach mal:

.INCLUDE "m8def.inc"
.DEF mp = R16
main:
ldi mp,0xFF
out DDRB,mp
ldi mp,0xFF
out PORTB,mp
loop:
rjmp loop

jörn

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Controller laeuft (sonnst koenntst du ihn nicht Programmieren)
den 5k1 Ohm gegen VCC nicht am Reset Pin vergessen!!!

Gruss

Autor: Mech-Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank euch Dreien!!!!

Also Hannes sein Programm funktioniert.

Dazu hätte ich aber noch ein paar Fragen:

- ist das  "reti  " für das Programm relevant?(was macht es)
- wie wir der MC über die Software resetet?

Den ResetPin hab ich mit einen 10K Widerstand zusammen mit einem 47pF
Kondensator gegen Masse an Vcc gehängt, wie in Anleitung.

Auf jeden Fall habt Ihr mir sehr weitergeholfen.
Jetzt weiss ich wenigstens, dass die Schaltung funzt.

Michi

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wieso immer 47pF? Der müsste viel grösser sein. In der grösse kann man
die Reset-Schaltung auch gleich weglassen.

Zum Thema "reti" empfehlt sich ein  Blick in die "Instruction Set
Summery". Die gibt das zum Download bei ATMEL.COM

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wegen des RETI in der Int-Vektortabelle in diesem Fall auch mal im
Datenblatt unter Interrupt sources nachschlagen.
Es ist an dieser Stelle sehr wichtig und dient als Platzhalter für
unbenutzte Interrupts. Es sorgt also dafür, dass jeder Sprung zur ISR
auch an die richtige Adresse des Flash kommt.

Das geht zwar auch mit der .org-Direktive, aber ich habe guten Grund,
dafür zu sorgen, dass die Hexdatei linear (unfragmentiert, lückenlos)
bleibt.

...

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jörn:
Hast recht, hatte ich irgendwie übersehen... :-(

Mir ging es aber auch noch darum, zu zeigen, dass
Interrupt-Programmierung viel einfacher ist, als viele Anfänger denken.
Auf alle Fälle ist es flexibler als der Einsatz von ellenlangen
Warteschleifen. Und damit kann man nicht früh genug beginnen.

...

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.