www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik µC macht was er will


Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.include "2313def.inc"
ldi r16, 0xFF
out DDRD, r16
ldi r16, 0b0000000 (bzw. 0b1000000)
out PORTD, r16
ende:    rjmp ende

Ich habe an Port-D6 ein Relais über einen Transistor angeschlossen
(AT90S2313) was ich (eigetlich) per Controller an/aus schalten wollte.
Leider schaltet das Relais komischerweise immer an egal wie ich jezt
den Port setze... wenn ich jedoch den Controller lösche (also ohne
programm lasse) bleibt das Relais aus.

Was mache ich falsch? Habe eigentlich alles so wie im Tutorial gemacht,
nur das ich nen relais anstatt einer LED benutze, und laut simulation
wird der port richtig gesezt.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du das Relais über einen npn oder pnp angesteuert?
Ansonsten: "(bzw. 0b1000000)" bezieht sich auf PortD.7, den gibts
beim 2313 gar nicht :-)

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BC547 NPN mit 4,7K Vorwiederstand am Port des AVRs.
Hab mal alles auf 1 gesezt oder alles auf 0 haber tut sich nix.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm, bleiben nur noch:
-Takt
-Reset
-Spannungsversorgung
-Chip defekt

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also Reset funktionier ganz gut, Takt ist nen 4Mhz Ozilator, spannung
eine von nem 5V Spannungsregelr, sollte passen.
Wodran ereknn ich wenn der Cip im A**** ist?

Autor: Santa Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was passiert, wenn Du den Port als Eingang konfigurierst, und ihn dann
mit einem Draht auf +5 V oder GND legst?  Kannst Du so das Relais ein-
und ausschalten?  Wenn nicht, ist der Transistor oder das Relais defekt
(Freilaufdiode 1N4007 o. ä. vorhanden?  Wieviel Strom zieht das Relais?
Schafft der BC547 den noch?).

@crazy horse:

>"(bzw. 0b1000000)" bezieht sich auf PortD.7,

Wieso denn das?

0b1000000
  6543210

Die "1" steht an Stelle Nr. 6, also Port _D.6_, nicht D.7.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
stimmt:-), verzählt. Kommt aber auch daher, dass ich,wenn schon binär,
dann auch alle 8 bits schreibe (0b01000000).
Es lebe die Hex-Schreibweise!

Autor: Santa Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die "0b01000000" mit allen acht Stellen zu schreiben, halte ich auch
für sehr sinnvoll, aber weißt Du, was mir persönlich am besten gefällt?
Es ist dieses Ungetüm:

1<<PD7 | 0<<PD6 | 1<<PD5 | 1<<PD4 | 1<<PD3 | 1<<PD2 | 1<<PD1 | 1<<PD0

(bei PortA dann natürlich mit "PA7"..."PA0" etc.).  Ich verwende
das konsequent bei allen I/O-Sachen.  Ich kann direkt sehen, welche 0
oder 1 zu welchem Pin gehört. Es stecken aber noch andere Vorteile
darin. Wenn ich diese Zeile z. B. von einer ATmega8-Source "mal
schnell" per Copy&Paste in ein 2313-Listing kopiere, dann wird beim
nächsten Build sofort der "PD7"-Eintrag angemeckert, und ich dadurch
daran erinnert, daß es PD7 beim 2313 nicht gibt.  Das und Ähnliches
finde ich so gut, daß ich den erhöhten Schreibaufwand für das Ungetüm
gerne in Kauf nehme (ich nutze grundsätzlich jede Möglichkeit zur
Vermeidung von Fehlern in Programmen aus).

Autor: pripri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
was bedeudet <<, gibts auch ein >> ?
danke

Autor: Santa Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"<<" bedeutet Linksshift.

0b1110110<<6 = 0b1110110000000
0bXYZ<<3 = 0bXYZ000

1<<N = 0b1000...000000
         |   ...543210  <-- Stellen-Index
         |
    Stelle Nr. N

1<<N = 2^N
0<<N = 0

">>" ist für Rechtsshift, wird jedoch seltener verwendet.

Ist es klargeworden? Für weitere Infos verweise ich auf die
AVR-Assembler-Online-Hilfe.

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also das Relasi ist in ordnung, das Problem ist ja gerade das das IMMER
anschaltet wenn ich den µC programiere, und Frelaufdiode ist vorhanden
(1N4001) SOlbald spannung weg ist geht er ja auch wieder aus, sobald
ich saft draufgeb schaltet das Relais ein wenn ich nen Programm im AVR
habe.... sehr merkwürdig.

Autor: Santa Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst Du mal den Schaltplan hier posten?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ganz sicher kein Verdrahtungsfehler? Beispielsweise fehlender
GND-Anschluss vom Controller oder sowas in der Art. Lieber mal
nachmessen.

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe jezt mal das ganze mit nem Mega16 probiert und ein paar
LEDs drangehangen... und ES GEHT!! LED Disco sach ich nur g

Werde nachher mal den anderen Nochmal dranhängen, ich glaube es könnte
daran legen, das mir nicht klar war das ich mit yaap bevor man Write
Flasch benuzt, erase Controller und nach dem Programmen Verify machen
muß. (Oder Autoprogramm... aber das hab ich eben erst gefunden) naja,
auf jedenfall danke schonmal für die Lösungsansaätze :) und ich bn
guter hoffnung das es morgen funzt :D

Autor: pripri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ santa klaus,

avr studio
folgende zeilen

.def temp = r16
1<<temp

meldet syntaxerror

bei deinem konstrukt
1<<PD7 | 0<<PD6 | 1<<PD5 | 1<<PD4 | 1<<PD3 | 1<<PD2 | 1<<PD1 | 1<<PD0
ebenfalls.
in hilfe nix gefunden,
kenne das < von c, aber nicht von assembler
mfg ip

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mann, mann, mann...
...das ist doch im Einsatz zum laden eines Registers:
 ldi r16, 1<<PD7 | 0<<PD6 | 1<<PD5 | 1<<PD4 | 1<<PD3 | 1<<PD2 | 1<<PD1
| 1<<PD0

oder in Verbindung mit OR oder AND:
 ori r16, 1<<3  ;setzt Bit 3 in Register r16 equivalent zu 8

 andi r16, 1<<3 | 1<<4  ;löscht alle Bits in r16 ausser 3 und 4
equivalent zu 24

Das mit dem <</>> (shift left/right n-Bits) wird zur Assemblierungszeit
angewendet also in einen festen Wert umgerechnet.
Z. B. wird aus  "ANDI r16, 1<<3 | 1<<4" der Befehl "ANDI r16,24"
(3x shift(8)+4x shift(16).

Gruß
Andi

Autor: pripri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ andi
mann... ging das schnell mit deiner antwort
vielen dank mann...
mann... lernt doch immer noch was dazu.

;-)

wobei die "normale" schreibweise mir lieber ist.
mfg ip

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Och mönsch, war nicht ernst gemeint.
Nur wenn da jemand was total verwurschtelt...

Gruß
Andi

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Pripri:

Ich lese aber die symbolische Schreibweise lieber, denn dann brauche
ich nicht wegen jedes Bits im Datenblatt nachschlagen. Und deshalb
schreibe ich auch so.

Wenn du aber leiber kryptische Zeilen wie ldi r16,0x01 schreibst, dann
tu es. Hatte ich zu Beginn auch mal gemacht. Bringt aber nix, da 0x01
weißderGeierwas bedeuten kann, ein symbolischer Bitname aber eindeutig
ist.

Wenn du diese symbolischen Namen nicht magst, warum nutzt du dann
überhaupt Assembler (sind doch auch nur symbolische Namen für
Maschinenbefehle), kannst doch gleich Maschinencode schreiben, also die
16-Bit-Hexzahl. Oder auch als Binärzahl.

...

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.