-         

Ergebnis 1 bis 2 von 2

Thema: Mobiler Roboter- Atmega 48 -AVR studio 4 - Assembler

  1. #1

    Mobiler Roboter- Atmega 48 -AVR studio 4 - Assembler

    Anzeige

    Guten Abend Zusammen,

    ich baue zur zeit einen Mobilen Roboter der nun auch noch einer linie folgen soll.
    Ich programmiere mit assembler, verwende den atmega 48 (plus den l293d, für die motoren) und das AVR studio 4.
    Als Basis habe ich den ARX- CH 09 verwendet. Der schaltplan für die motoren befindet sich im anhang.
    Per pwm hab ich nun es nun programmiert, dass mein roboter kurven fahren kann.
    Das programm hier:

    .include "m48def.inc"

    .def temp1 = r17
    .def counter = r16

    .equ XTAL = 1000000

    init:
    ldi temp1, HIGH(RAMEND) ; Stackpointer initialisieren
    out SPH, temp1
    ldi temp1, LOW(RAMEND)
    out SPL, temp1
    ; Port B auf Ausgang
    ldi temp1, 0xFF
    out DDRB, temp1
    out DDRC, temp1
    ldi temp1, 0b00101000
    out PORTC, temp1



    ;
    ; Timer 1 einstellen
    ;
    ; Modus 14:
    ; Fast PWM, Top von ICR1
    ;
    ; WGM13 WGM12 WGM11 WGM10
    ; 1 1 1 0
    ;
    ; Timer Vorteiler: 4096????
    ; CS12 CS11 CS10
    ; 0 1 0
    ;
    ; Steuerung der Ausgangsports: Set at BOTTOM, Clear at match
    ; COM1A1 COM1A0 COM1B1 COM1B0
    ; 1 0 1 0
    ;

    ldi temp1, (1<<COM1A1) | (1<<COM1B1) | (1<<WGM11) | (0<<WGM10)
    sts TCCR1A, temp1

    ldi temp1, (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11)| (0<<CS10)
    sts TCCR1B, temp1



    ;
    ; den Endwert (TOP) für den Zähler setzen
    ; der Zähler zählt bis zu diesem Wert
    ;
    ldi temp1, HiGH(1000)
    sts ICR1H, temp1
    ldi temp1, LOW(1000)
    sts ICR1L, temp1

    ;
    ; der Compare Wert
    ; Wenn der Zähler diesen Wert erreicht, wird mit
    ; obiger Konfiguration der OC1A Ausgang abgeschaltet
    ; Sobald der Zähler wieder bei 0 startet, wird der
    ; Ausgang wieder auf 1 gesetzt
    linkskurve:
    ldi temp1, HIGH(800)
    sts OCR1AH, temp1
    ldi temp1, LOW(800)
    sts OCR1AL, temp1
    ldi temp1, HIGH(300)
    sts OCR1BH, temp1
    ldi temp1, LOW(300)
    sts OCR1BL, temp1
    clr temp1
    sts TCNT1H, temp1
    sts TCNT1L, temp1
    ; sei
    geradeaus:
    ldi temp1, HIGH(800)
    sts OCR1AH, temp1
    ldi temp1, LOW(800)
    sts OCR1AL, temp1
    ldi temp1, HIGH(800)
    sts OCR1BH, temp1
    ldi temp1, LOW(800)
    sts OCR1BL, temp1
    clr temp1
    sts TCNT1H, temp1
    sts TCNT1L, temp1
    ; sei

    rechtskurve:
    ldi temp1, HIGH(300)
    sts OCR1AH, temp1
    ldi temp1, LOW(300)
    sts OCR1AL, temp1
    ldi temp1, HIGH(800)
    sts OCR1BH, temp1
    ldi temp1, LOW(800)
    sts OCR1BL, temp1
    clr temp1
    sts TCNT1H, temp1
    sts TCNT1L, temp1
    ; sei

    stop:
    ldi temp1, HIGH(0)
    sts OCR1AH, temp1
    ldi temp1, LOW(0)
    sts OCR1AL, temp1
    ldi temp1, HIGH(0)
    sts OCR1BH, temp1
    ldi temp1, LOW(0)
    sts OCR1BL, temp1
    clr temp1
    sts TCNT1H, temp1
    sts TCNT1L, temp1
    ; sei

    main:
    rjmp main


    Mein problem ist nun, dass mein roboter auch noch einer linie folgen soll. Wie ich das jedoch programmiere weis ich überhaupt nicht, da ich ziemlich nue bin hier. Ich hätte es mit zwei phototransistoren gemacht, plus einem led dass für licht unter dem roboter sorgt. Aber wo ich diese phototransistoren anschliesen muss usw. weis ich überhaupt nicht.

    Über hilfe würde ich mich sehr freuen.

    schönen abend noch.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken l293_pwm.gif  

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.544
    Es gibt 3 Möglichkeiten wie man die Fototransistoren anschließt.
    1.) Fototransistor mit dem ADC des µC verbinden. So kann man die Schwelle ab wann der Transistor anspricht (Linie erkannt bzw nicht erkannt) mit dem µC einstellen (einen Wert einprogrammieren bzw kalibrieren)
    2.) Den Fototransistor mit einem Komparator auswerten. Den Wert ab wann er die Linie erkennt muss/kann man mit einem Poti oder einen Spannungsteiler einstellen. (Der µC erkennt nur Linie erkannt bzw nicht erkannt)
    3.) Den Fototransistor direkt an einen Digitaleingang verbinden. Wie gut das funktioniert bzw wie gut er anspricht weiß ich nicht. Ich weiß auch nicht was passiert wenn der Wert im undefinierten Bereich liegt. (bei TTL=5VPegel wäre das zwischen 0,8 und 2,0V).

    MfG Hannes

Ähnliche Themen

  1. Mobiler Roboter mit WLAN und Webcam für 300 US-$
    Von just4fun im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 3
    Letzter Beitrag: 05.10.2008, 16:57
  2. Cyberdriver2 - mobiler autonomer Wohnungs-Roboter
    Von robodriver im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 5
    Letzter Beitrag: 28.12.2007, 15:48
  3. MATURAPROJEKT: mobiler Farberkennungs-Roboter
    Von Camero im Forum Konstruktion/CAD/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 2
    Letzter Beitrag: 21.09.2007, 09:22
  4. komplexes Verhalten einfacher mobiler Roboter
    Von stochri im Forum Software, Algorithmen und KI
    Antworten: 54
    Letzter Beitrag: 28.10.2006, 06:36
  5. (Mein Erster) Modularer Autonomer Mobiler Roboter
    Von CowZ im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 29
    Letzter Beitrag: 08.04.2006, 23:13

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •