www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR für Anfänger


Autor: tex kerstan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche von den 8031 µCs auf AVR zu wechseln. Dazu habe ich mir
einen Butterfly besorgt und tausende von Einsteiger-Büchern aber ich
komme mit den Zeug nicht klar. Es scheitert an Basisfragen.
so banale Dinge wie

P2.1 = 1

oder

if(P2.1 == 1)
funktionieren nicht. Aber warum nicht?
Inzwischen habe ich

while(!(PINB & (1<<PORTB6)) )

gefunden.

while(!   verstehe ich ja noch, aber was passiert bei
(PINB & (1<<PORTB6))   ?!?

Warum geht    if(PORTB6 == 0)  nicht?

tex

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

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht passen ja Bücher und Compiler nicht zusammen?
Mit AVR-Studio, Assembler und dem Befehlssatz aus dem jeweiligen
Datenblatt dürfte es weniger Missverständnisse geben. Allerdings bleibt
das Display dann auch vorerst dunkel...

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal in das Wiki dieser Seite bzw. auch mal auf
www.mc-project.de
Dort findest du Erklärungen/Anleitungen.

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

Bewertung
0 lesenswert
nicht lesenswert
----- Original Message -----
From: tex <tex@looneytex.de>
To: <hannes.lux@gmx.de>
Sent: Tuesday, November 16, 2004 12:54 PM
Subject: Re: Antwort auf "AVR für Anfänger"


> ???

Hallo Tex...

> Sorry. Ich verstehe nicht ganz. Welches Display?

Na hat der AVR-Butterfly kein LCD-Display?
Oder reden wir von verschiedenen Dingen?

> Und was hat das Buch
> mit dem Compiler zu tun? Macht es vom Befehlssatz einen Unterschied,

> welcher Compiler im Spiel ist, wenn wir mal davon ausgehen, dass ich

> schon weiss, dass ich einen Pascal-Code nicht mit einem C-Compiler
> vergewaltigen kann?

Der AVR kann nur Maschinencode. Zu jedem Maschinencode gibt es exakt
einen Assemblerbefehl. Und nur diese Befehle sind für die Hardware
verbindlich.

Jede Hochsprache und jeder Dialekt davon hat ihre/seine eigene
Befehlsliste und Syntax. Mir nützt also ein Buch über M$-QBASIC nix,
wenn ich in BASCOM-AVR oder FAST-AVR programmieren möchte, denn die
Grundanweisungen heißen zwar gleich, haben aber unterschiedliche
Syntax. Mal vom unterschiedlichen Befehlsvorrat abgesehen.

> Der Tipp mit dem Assembler ist ok, aber das ist nun wirklich nicht
mein
> Ding.

Die Frage ist, ob ASM nicht dein Ding ist, oder ob du nicht bereit
bist, dich mit der Architektur des AVR vertraut zu machen. Und das geht
eigentlich nicht ohne ASM.

> Wie sollte ich    Alpha = atan((cos((L + 0.00256 * cos((125.04 -
> 1934.136 * T)/180.0*pi))* pi / 180.0 )*sin(M * pi / 180.0)) /cos(M *
pi
> / 180.0)) * 180.0 / pi - 180.0;
> oder  L = (280.46061837 + 360.98564736629 * (JD-2451545)
+0.000387933 *
> T * T -(( T  T  T) / 37810000))  -(signed long)((280.46061837 +
> 360.98564736629 * (JD-2451545)     +0.000387933  T  T -(( T * T *
T) /
> 37810000))/360.0)*360.0;
> in Assembler schreiben. Klar geht es, der Compiler macht ja nix
anderes,
> aber ich bekomme das nicht hin.

Ich bekomme das auch nicht hin. Aber meine Anwendungen kommen ohne
solche Arithmetik aus.

> Das ist auch nicht die Frage. Ich verrecke bei dem Versuch, einen
Port
> abzufragen oder zu setzten.
> Das kann doch nicht mehr am Compiler liegen, oder?

Es wird daran liegen, dass der Compiler eine andere Syntax erwartet als
du gewohnt bist. Da wirst du dich wohl mal mit der Dokumentation dieses
Compilers auseinandersetzen müssen.

> tex

Viel Erfolg...
...HanneS...

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok! Wenn ich nun info Mike und info hanes verknüpfe, kommt dabei raus,
das P1.1 = 1 nicht geht, weil der Compiler es nicht versteht.
Was ich nicht verstehe ist, warum ich Bits nur über UND und ODER
Befehle ansprechen kann. Wenn es über UND und ODER geht, müsste es doch
zumindest auch über sbi und cbi gehen. Und warum mir PORTB1 == 1 keine
Ergebnis liefert, weiss ich auch noch nicht.
Es muss doch so etwas wie ein Verzeichnis der Funktionen oder sowas
geben. Mein letzter Compiler hatte ein Syntax-Buch in dem man die
Befehle und deren Syntax nachlesen konnte.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probiers doch mal mit der WinAVR-Doku!
Warum man einzelne Bits mit avr-gcc nicht ansprechen kann, weiß ich
auch nicht, akzeptiere es einfach. Wäre auch eher eine Frage für Jörg
Wunsch.

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

Bewertung
0 lesenswert
nicht lesenswert
Hi...

@Mike: Nix C, PASCAL...

@Tex: Das verbindliche Befehlsverzeichnis findest du im Datenblatt
deines Controllers. Allerdings sind nur ASM-Befehle verbindlich.

Setzt du einen Compiler ein, dann gibt es sicherlich auch eine
verbindliche Befehlsliste beim Hersteller des Compilers...

...HanneS...

Autor: Christof Krüger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einmal das Datenblatt komplett durchlesen würde da schon helfen. Der
AVR-GCC gibt dir Zugriff auf alle möglichen Ports und Register,
allerdings war es das auch schon. Der AVR ist ein 8-Bit µC, der nur in
Ausnahmefällen direkt auf Bits arbeitet (sbi, cbi etc.). Das ist dann
aber schon sehr hardwarenah und eine Hochsprache wie C abstrahiert da
schon etwas weiter, so dass man sich auf Byte-Ebene befindet. Mit
einfachen Bitoperationen kann man also durchaus auf bestimmte Bits
testen und Bits setzen u.ä. Einen guten Einstieg gibt das
AVR-GCC-Tutorial hier im Wiki:
http://www.mikrocontroller.net/wiki/AVR-GCC-Tutori...

Wichtig ist hierbei, dass die Schnittstelle zwischen Hard- und Software
hier auf Registerebene geschieht. Und diese sind eben 8-Bit breit.
Ob der Compiler dann nachher doch mit cbi und sbi arbeitet, ist im
selbst und seinen Optimierungskünsten überlassen.

Autor: Christof Krüger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achja, auch wichtig: Die Sprache C ist standardisiert, da sollte man
möglichst wenig dran rütteln. Es ist also gut, dass AVR-GCC nicht
irgendwelche ominösen Bitmanipulations-Erweiterungen eingebaut hat!
Wie gesagt: Es gibt die spezifischen Register des Mikrocontrollers als
Schnittstelle und alles darüber ist Standard-C, und das ist auch gut
so!

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

Bewertung
0 lesenswert
nicht lesenswert
Er will doch aber kein C oder ASM, sondern PASCAL... ;-)

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein nein, C ist schon OK. Ich werd mich dran gewöhnen. Pascall war wohl
eh ein Schuss in den Ofen
Die Erklärung von Christof ist schon einleuchtend. Ich bin von meinem
80537 wohl zu verwöhnt. Einfach P6.1==1 und schon hat man was man
braucht war wohl zu einfach, oder lags doch am Compiler? Keine Ahnung.
Jedenfalls bin ich jetzt schon mal ein Stück schlauer. Vielen Dank an
alle Beteiligten. Ich habe übrigens ein offenes Ohr für alle weitere
Tipps und Ratschläge. und sollte das Thema nicht mehr genug hergeben:
- wie bekomme ich eine CAN Schnittstelle an den MEGA128?
- gibts schon eine RTC die nicht sekunden und minuten zu stunden und
tagen zusammenaddiert sondern das Julianische Datum benutzt?
- hat jemand eine coole Idee, wie ich die eine magere Serielle
Schnittstelle des mega128 auf 3 Kommunikationspartner verteile?

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei welcher deiner Fragen konnte dir die Forensuche denn nicht helfen?

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
überigens hat der m128 2 serielle schnittstellen

Autor: tex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zu klaus
Ich habe jetzt einen ganzen Haufen Antworten. Jetzt darf ich mir erst
mal Gedanken machen über diese (für meine Begriffe) absurde und
irrsinnnig komplizieret Register- und Portabfrage / Veränderung.



Zu Tobi
Wer lesen kann ist klar im Vorteil. Danke! Jetzt hat mein Mega128 auch
2 serielle Schnittstellen! Ist aber immer noch eine zu wenig.

Autor: Christof Krüger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie gesagt: irrsinnig ist es nicht. Es folgt einem nachvollziehbaren,
logischen und standardiesierten Muster. Wenn es dir zu kompliziert ist,
steht es dir frei, dir Preprozessor-Makros zu schreiben, die das ganze
etwas leserlicher machen.

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.