Forum: Mikrocontroller und Digitale Elektronik Es tut sich nichts


von Christoph (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, ich Versuche Relais über eine Transistorschaltung vom µC (Atmega
128) aus anzusteuern. Zum Testen wollte ich "nur" mal die Ports
schalten. Ich habe die Test.asm kompiliert und anscheinend auch
erfolgreich übertragen. und es tut sich trotzdem nichts. Fehler an der
Transistorschaltung hab ich schon ausgeschlossen indem ich den
entsprechenden Pfad jeweis mit 5V beaufschlagt habe --> funktioniert.
Wenn ich im Studio das "Programm" simulier macht er's ja auch. Könnt
ihr mir vielleicht noch weiterhelfen. Tu mich recht schwer, hab noch
keine Erfahrung

von Rolf Magnus (Gast)


Lesenswert?

Deine Interrupt-Vektor-Tabelle ist eigentlich falsch, was aber in diesem
Fall nicht das Problem ist. Beim Mega128 ist jeder Eintrag zwei Wörter
groß, damit man statt rjmp einen jmp nehmen kann, weil rjmp nicht den
ganzen Speicher erreichen kann.

An welchen Pins sind die Relais denn angeschlossen? Dir ist schon klar,
daß du bei jedem Port nur das unterste Bit als Ausgang geschaltet hast
und alle anderen Pins nur zu Eingängen mit aktiviertem Pull-up machst?
Übrigens: Statt für jeden Pin einzeln ein sbi zu machen, würde es auch
ein:
1
ser r16
2
out PORTB, r16

tun, wenn du alle Bits einschalten willst.

von Roland R. (roland) Benutzerseite


Lesenswert?

Hallo Christoph,

Hast Du denn schon mal die I/O-Grundlagen aus dem AVR-Tutorial dieser
Seite ausprobiert? Damit kannst Du dann auch ein Problem bei der
Programmübertragung auf den mega128 ausschließen. Wenn Du das dann am
Laufen hast, sollte es auch keine Schwierigkeiten mit Deiner
Relais-Steuerung mehr geben.

In Deinem Code solltest Du Deine Versuche auf den Port beschränken, an
dem Du auch die Relais angeschlossen hast. Im übrigen fällt mir auf,
dass Du jeweils immer nur Pin 0 eines Ports als Ausgang konfigurierst,
alles andere bleiben Eingänge. Durch die sbi-Befehle schaltest Du von
diesen Eingängen dann nur den Pullup-Widerstand ein, der
verständlicherweise die Relais-Stufe nicht ansteuern kann.

Ansonsten fallen mir nur allgemeinere Gründe ein, warum es bei Dir
nicht klappt. Falsche Beschaltung von /PEN, falscher Quarz, falsche
Fuse-Einstellungen, usw.

Hoffentlich hilft Dir das erstmal weiter. Wenn nicht, stelle mal einen
Schaltplan und Deine Fuse-Einstellungen bereit, um nicht raten zu
müssen.

Roland

von daniel (Gast)


Lesenswert?

Hi,
hab das selbe Problem beim ATmega8515.
du kannst den BrownOut ausschalten. Setz bei den Fuses das BODEN bit
auf 0.
Wenn du alle Bits als Ausgang konfigurieren willst dann ändere
ldi   r17, 0x01
in
ldi   r17, 0xE7  ; 11100111
Ansonsten überpfrüfe den RESET ob er immer auf HIGH ( 0.9*Vcc). Ziehe
den Programmer ab nach dem programmieren, er zieht den Reset auf LOW.

daniel

von Rolf Magnus (Gast)


Lesenswert?

> Wenn du alle Bits als Ausgang konfigurieren willst dann ändere
> ldi   r17, 0x01
> in
> ldi   r17, 0xE7  ; 11100111

Wie kommst du darauf, daß das alle Bits als Ausgang konfigurieren soll?

von daniel (Gast)


Lesenswert?

@Rolf

wenn die eine 1 im DDRx einen Ausgangkonfiguriert und er diese PINS
setzt, dann dachte ich mir man kann so die Ausgänge konfigurieren.
Du hast Recht es setzt nicht alle, es setzt nur all die die er auch
angegeben hat.

daniel

von Christoph (Gast)


Lesenswert?

Jetzt wo ihr mich drauf hingewiesen hast, nein mir war nicht klar das
ich nur bit0 als Ausgang gesetzt hab. Aus irgend einen Grund hab i
angenommen das der ganze Port damit auf Ausgang geht
also wie schon beschrieben hast auf 0xE7

Zur Beschaltung: PortD 0-2 und 5-7 sind mit Relais versehen Bit 3 und 4
brauch ich später mal wenn ich auf den UART zugreifen will

Und wenn ich jetzt programmier muss ich das Programmerkabel wieder
abstecken damit er losläuft?

Ich verwende übrigen das Savy128 Board von www.chip45.com

von Roland R. (roland) Benutzerseite


Lesenswert?

Normalerweise läuft der Controller direkt nach dem erfolgreichen
Flash-Vorgang los, das Kabel brauchst Du nicht abziehen. Eventuell ist
es aber je nach Programmer und je nach Übertragungsprogramm möglich
einzustellen, den Controller nach der Programmierung im Reset zu
halten.

Roland

von Rolf Magnus (Gast)


Lesenswert?

@daniel:

Ah, ich hatte übersehen, daß er nicht alle Bits an den Ports
einschaltet, deshalb hatte ich mich über den "komischen" Wert von
0xE7 gewundert.

von Christoph (Gast)


Lesenswert?

So, jetzt läuft er. Der zweite Fehler den ich habe ist das ich die
Pinbelegung des Port falsch "interpretiert" habe.

Ich dachte es sei

1  2  3  4...
13 14 15 16...

aber sie ist halt

1 3 5 7
2 4 6 8....

War im Datenblatt des Boards nicht angegeben (sondern nur Belegung)

Da bin ich jetzt wegem dem Reset drauf gekommen der war dann nämlich
auf Masse.
Lauter Dummheitsfehler also. Danke euch

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.