Forum: Mikrocontroller und Digitale Elektronik Atmega8-Anlaufprobleme


von Mech-Michi (Gast)


Angehängte Dateien:

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

von Hannes L. (hannes)


Angehängte Dateien:

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.

...

von Jörn G. aus H. (Gast)


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

von Jens D. (jens) Benutzerseite


Lesenswert?

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

Gruss

von Mech-Michi (Gast)


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

von Rahul D. (rahul)


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

von Hannes L. (hannes)


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.

...

von Hannes L. (hannes)


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.

...

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.