Es tut sich nichts

Gast #359815
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
Angehängte Dateien:
Gast #359816
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.
Persönliche Seite #359817
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
Gast #359818
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
Gast #359820
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
Gast #359821
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
Gast #359824
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren