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
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
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 ;)
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
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.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.