mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfängerfrage zu Variablen und Timer


Autor: Bernd Maier (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Erst mal ein Lob an die Seite und die Forumsteilnehmer. Ist erste
Klasse hier! Ich hab seit ein paar Tagen ein STK500 mit einem at90s8515
und bin eifrig am experimentieren.

Also, meine Fragen. Ich möchte 2 Variablen vertauschen. Gibt es da
einen Befehl der wie SWAP arbeitet aber nur halt mit Variablen?
Momentan behelfe ich mit mit dem Konstrukt:

cpi loops,loops1 ;vergleiche wert loops mir loops1
brne else1 ;ist loops != loops1 springe zu else1
ldi loops,loops2 ;schreibe wert von loops2 in loops
rjmp endif1 ;springe zum ende der if-konstruktion
else1:
ldi loops,loops1 ;schreibe wert von loops1 in loops
endif1:

Das nächste ist der MOV Befehl. Movt der wirklich oder macht der ein
Copy? Also wenn ich mov r16,r17 mache, steht dann in beiden Registern
das selbe oder ist r17 nach dem mov-befehl leer?

Dann eine generelle Frage. Ich will schlußendlich mit meinem at90s8515
ein Servos steuern können. Um das zu erreichen brauch ich ja ein
PWM-Signal. Dieses Signal setze ich mit dem Timer und dem
Timer-Interrupt zusammen. Momentan ist mein Testprogramm soweit, dass
ich ein LED asyncron blinken lassen kann. Also 1 Sekunde an, 2 Sekunden
aus. Im Prinzip ist dass ja schon das PWM-Signal. Ok...das funktioniert
auch. Nur...wenn ich 2 Servos ansteuern will....wie geh ich denn dann
vor? Der Timer ist ja schon belegt für das 1. Servo bzw LED in meinem
Testprogramm. MAch ich da einen Denkfehler?

Mein Testprogramm hab ich mal mit angehängt....vielleicht hat ja jemand
die Muse es sich mal anzusehen und Tipps bzgl. eines 2. Servos/LEDs.

danke vorab an alle...

so long, Bernd

Autor: Bernd Maier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry....jetzt noch ne Frage :-)

in einem Timer-Beispiel hab ich gelesen, dass beim 4433 das
Zählregister TCNT0 vorbelegt ist mit 256-244 (also 12). Das bedeutet
doch, dass der Timer nur 244 mal durchläuft bis ein Interrupt ausgelöst
wird. Ok....nun verwende ich einen at90s8515. Ist bei dem das TCNT0
Registe auch irgend wie vorbelegt? Oder macht der tatsächlich 256
Zyklen bis zum überlauf?

so long, Bernd

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SWAP:
was du machst ist EINE Variable abwechselnd mit 2 verschiedenen
Konstanten zu laden. Einen SWAP Befehl gibts beim AVR nicht.

MOV:
schreibt den Wert des einen Registers in das andere Register.
Leere Register gibts nich - 0x00 ist auch eine Information!

2 PWMs:
Die neueren ATMEGAs haben mehr als eine PWM - sieh dir die mal an.
Ansonsten mach die PWM per Software - der AVR sollte eigentlich schnell
genug sein für ne Motorsteuerung.

Servos:
Sind Servos nicht intelligente Module mit eigener Steuerung welche die
Signale vom Empfäger bekommen? Ok- das ist auch PWM, aber ist das nicht
im 20ms-Takt (also schnarchlahm) oder ist mein R/C-Background etwas
angestaubt?

vorbelegt:
Verlaß dich nie auf sowas! wir sind hier nicht bei der 64k
Demo-Competition ;)

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
-vorbelegt:OVR= Wertänderung von 255->0, also 1x rum sind 256
Countertakte (aber nur bei 8 Bit Timer)
>TCNT0 vorbelegt ist mit 256-244 (also 12). Das bedeutet
>doch, dass der Timer nur 244 mal durchläuft

Nein! Das Timerreg. wird mit dem Wert 244 geladen, dann kommen 12
Countertakte und TCNT0 geht von 255->0, was einen Überlauf erzeugt.
Überlauf setzt Flag und Flag kann Int. auslösen.

Ich hoffe du hast verstanden wie ich das meine.

MFG Uwe

Autor: Jens Renner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Inhalte zweier Register kannst Du via XOR wie folgt swappen:

EOR r16, r17
EOR r17, r16
EOR r16, r17

Ist genau so schnell wie mit MOV, spart aber das Hilfsregister.

Autor: Bernd Maier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi zusammen,

vielen Dank für die schnellen Antworten.

@Mario: Jep, Servos haben normalerweise einen 20ms Takt. Schade wenn
der PWM Ausgang für Servos zu schnell ist. Werds dann so wie du sagst
(versuchen) per software zu handeln.

@Uwe und Jens: Danke für die Tips. Gerade für Anfänger sind solche
Hinweise Gold wert denn das spart einem langes Fehlersuchen weil man
mit falschen Annahmen an die Sache ran geht.

so long, Bernd

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.