www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Es tut sich nichts


Autor: Christoph (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
ser r16
out PORTB, r16

tun, wenn du alle Bits einschalten willst.

Autor: Roland Riegel (roland) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Roland Riegel (roland) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christoph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.