mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Servotester mit ATMega8


Autor: winni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche nebenbei etwas AVR zu lernen, doch es scheint so als ob ich 
an den einfachsten Sachen scheitere^^
.include "m8def.inc"
 
.def temp1         = r17
 
    rjmp    init
 
init:

  ldi      temp1, LOW(RAMEND)     ; Stackpointer initialisieren
    out      SPL, temp1
    ldi      temp1, HIGH(RAMEND)
    out      SPH, temp1
  
  cbi     DDRB,0          ;PB0 Eingang
  cbi     DDRB,1          ;PB1 Eingang
  sbi     PORTB,0        ;PB0 PullUp
  sbi     PORTB,1        ;PB1 PullUp
  sbi     DDRB,3          ;PB3 Ausgang

    ldi      temp1, 0b01101011    ;Timer2,FastPWM,Teiler_64
    out      TCCR2, temp1

  ldi     temp1,40        ;PWM_Wert:40
  out     OCR2,temp1
main:
    sbis    PINB,0          ;Erhöhe temp1 wenn PB0=0
  inc   temp1  
  sbis    PINB,1          ;Verringere temp1 wenn PB1=0
  dec    temp1
  rjmp     main


Das PWM funktioniert (mein Servo nimmt eine Position an, hehe) aber das 
mit dem Increase und Decrease hab ich mir wohl zu einfach vorgestellt...

Ich weis das es schon viele Codebeispiele für Servotester gibt, aber ich 
möchte gerne verstehen warum meins nicht funktioniert.

Funktion sollte klar sein:
PB3 gibt PWM Signal
PB0 und PB1 erhöhen bzw. verringern den Interruptwert. (verändern also 
Pulsfrequenz)

PS: Sorry wegen 0b01101011 das nächste mal wirds 1<<CS0 usw

mfg vincent

Autor: Wichtel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst den neuen Wert (temp in/decrementiert) auch wieder in das 
OCR2-Register zurücksichern damit er wirksam werden kann.

Autor: winni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Argh, natürlich, manchmal ist man aber auch wie vernagelt.

Main: sieht jetzt so aus:
main:
    sbis    PINB,0          ;Erhöhe temp1 wenn PB0=0
  inc   temp1  
  sbis    PINB,1          ;Verringere temp1 wenn PB1=0
  dec    temp1
  out    OCR2,temp1
  rjmp    main

Passiert trotzdem nichts!?

Autor: winni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh Sorry Doppelpost, aber es passiert doch was und zwar:

Wenn ich drücke geht er sofort unkontrolliert bis Anschlag, ich kann mir 
aber vorstellen das das was mit Taster-Entprellen zu tun haben könnte...

Autor: Icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Servos erwarten eine Impulsbreite zwischen 1 und 2 ms, wobei 1,5 ms 
die Mittenstellung ist. Frequenz sollte ca. 45 Hz sein.
Wenn du einen der beiden Taster drückst, wird aufgrund der unverzögerten 
Schleife das Register irgendeinen zufälligen Wert annehmen, da auch 
keine "Begrenzung" einprogrammiert ist.

Autor: winni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, der µC fragt den Port ja etwas schneller ab als ich den wieder 
los lassen kann^^

Dann muss ich wohl noch eine kleine Zeitschleife oder so einbauen, die 
mir etwas Zeit lässt den Taster zu drücken und den Wert nur um 1 
verändert.

Ich habs jetzt aber verstanden, vielen Dank, ging echt schnell.

mfg vincent

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.