www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADU-Motor Drehsinn


Autor: Manu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich wollte eigentlich einen Steuerung Programmierern die es 
möglichst macht meinen Motor rechts und links laufen zulassen.
Hardware: Zwei Poti als Spanungsteiler aufgebaut mit mittel abrief und 
(Ua 2,5V bis 4,9V) an ADC0 angeschlossen und wenn sich die potis bewegen 
soll der Motor der ATmega16 erkennen ob die Spannungsteiler oder sinkt.

Problem ab einer schwellspannung von 3.95V schaltet die LED2 ein und der 
ist es egal ob die Spannung steigt oder sinkt und das gleiche  unter 
3.95V bei LED1.

Programm:
.include "m16def.inc"    ;Header Atmega16
    rjmp Init      ;ueberschringen der Interrupt

;- Laden des Ausgabe PortC0-1
;- Initialisieren des ADU-ADC0
;-  ADU- Vorteiler 64 bei 16Mhz
;-  Rechtschiebendes Low High Reg.
Init:  LDI   r16,255
    OUT  ddrC,R16
    OUT  ddrd,R16
    OUT  portd,R16    ;Test Leuten
    LDI  r16,0b01000000
    OUT  adMUX,r16
    LDI  r16,0b10000110
    OUT  adcSR,r16

;- Programm Starten
;- ADU Starten und warten bis die Wandelung abgeschlossen ist
Adu:  SBI  adcSR,6
Warte:  IN   r16,adcSR
    SBRS r16,4
    rjmp Warte

;- Vergleichen des Vorgaengerwertes
;- Wenn Vorgaengerwerte vorhanden dann Sprung zu Vergleichen der High 
Reg.
;- Wenn keiner da ist dann in R0-R1 Init. und Bit setzen in r30
    CPI  r30,1
    BREQ VergH
    LDI  r30,1
    IN   r0,adcL
    IN   r1,adcH
    rjmp Adu

;- Vorgangswert - Aktueller wert ;==;=-;=+
;- bei == muss das Lowbitreg. noch verglichen (Sprung VergL) werden 
ansonsten reicht
;-  das aus um die Drehrichtung zu bestimmen
VergH:  IN   r2,adcL
    IN   r3,adcH
    CP   r1,r3
    BREQ VergL

;- Pruefen des High Speichers <;> des Vorwertes
    SUB   r3,r1    ;- Aktueller wert - Vorhergehender wert
    BRMI OutL    ;- Aktueller wert < Vorhergehender wert = Linkslauf
    BRPL OutR    ;- Aktueller wert > Vorhergehender wert = Rechtslauf

;- Vergleichen Lowbitreg. bei == Motor aus und neu messen
VergL:  CP   r2,r0
    BRNE LowSub
    LDI  r16,0
    OUT  portC,r16
    rjmp Adu

;- Pruefen des Low Speichers <;> des Vorwertes
LowSub:  SUB   r2,r0    ;- Aktueller wert - Vorhergehender wert
    BRMI OutL    ;- Aktueller wert < Vorhergehender wert = Linkslauf
    BRPL OutR    ;- Aktueller wert > Vorhergehender wert = Rechtslauf

;- Ausgabe Linkslauf == 1; Rechtslauf == 2
OutL:  LDI  r16,1
    OUT  portC,r16
    rjmp Adu
OutR:  LDI  r16,2
    OUT  portC,r16
    rjmp Adu


Danke für eure Hilfe im Voraus

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.