Informatik und Kram

Da wir lange nicht wußten, wo wir das für die Uni ausgearbeitete Material unterbringen sollten und auch einen schrecklichen Drang hatten der Welt diverse Sachen aufzudrücken...

Atmega8 PWM oder "Der Böse Blick"
de-flagge aktiviert en-flagge deaktiviert

Mein Infrarot-Entfernungsmesser, der Sharp GP2D12, 10-80cm, Analog-Ausgang, sollte morgen oder übermorgen kommen. Und da ich will, dass mein Robo nach links/rechts schauen kann, muss da ein Servo rein. Und wie steuert man den - Genau! - mit Pulsweiten-Modulation. Also "schnell" nen Hals gebaut und schonmal nen Plastik-Winkel draufgeschraub, Loch gefräst und ein kleines Programm geschrieben..
#include <avr/io.h>
#include <avr/delay.h>

void long_wait(int ms){
   int y=0;
   for(y=0;y<ms;y++){
      _delay_ms(10);
   }
}

int main(){
   DDRD=0x00;
   PORTD=0xFF;

   DDRC=0xFF;
   PORTC=0x00;

   DDRB=0xFF;
   ICR1=10000;
   TCCR1A |= (0 << COM1A0) | (1 << COM1A1) | (0 << COM1B0) | (0 << COM1B1) | (0 << FOC1A) | (0 << FOC1B) | (1 << WGM11) | (0 << WGM10);

   TCCR1B |= (0 << ICNC1) | (0 << ICES1) | (1 << WGM13) | (1 << WGM12) | (0 << CS12) | (1 << CS11) | (0 << CS10);

   for(;;){
      if(!bit_is_set(PIND,0) && (bit_is_set(PIND,1))){
         OCR1A = 1800;
         long_wait(100);
      }

      if(!bit_is_set(PIND,1) && (bit_is_set(PIND,0))){
         OCR1A = 650;
         long_wait(100);
      }

      if(bit_is_set(PIND,0) && bit_is_set(PIND,1)){
         OCR1A = 1300;
         long_wait(100);
     }

   }
   return 0;
}

Der Kopf

Die Testschaltung

Der Servo

Und hier das ganze in Action, statt dem Distanz-Sensor hab ich mal zwei rote LEDs reingebaut, nur um bisschen Show-Off zu betreiben, geiler blöser Blick :-)
Im Moment steuere ich den Servo noch mit Tastern, zum Ausprobieren und Einstellen, muss noch die genauen ms-Zeiten für die rechte/linke/mittlere Position finden..

Kommentare

Kommentar schreiben