Hallo
Es freut mich sehr, dass euch mein kleines Projekt so viel Freude bereitet. Eigentlich sollte es nur dazu dienen, Servos für einen Roboterarm zu beherrschen. Aber es verselbständigt sich zunehmend. Hier nun der neuste Stand des Projekts.
Nachdem ich lange genug gejammert hatte, wurde mir von der besten Ehefrau von allen ein USB-ISP-Interface genehmigt. *juhu* Das Teil (ein mysmartusb für 30€) wurde gestern geliefert. Hier nun die ersten Videos und Pics nach dem Abnabeln vom RP6:
Externes Bild anzeigen Externes Bild anzeigen Externes Bild anzeigen
http://www.youtube.com/watch?v=6ZNNRiDPIao
http://www.youtube.com/watch?v=dHDhgpYCXm0
http://www.youtube.com/watch?v=Z7gb-9V5KY4
Orginalvideos: 1 2 3 4
Nach meinem heutigen ISP- und ATtiny-Marathon steuert nun ein ATtiny13 den Roboter. Bei 1,2MHz CPU-Taktfrequenz werden die Servos mit einer Counter-ISR angesteuert. Der Code hat im Moment 516 Bytes:
Lager für die Gelenke sind übrigens Reiszwecken:Code:#include <avr/io.h> #include <avr/interrupt.h> #define x_mitte 17 #define y_mitte 17 #define z_mitte 17 unsigned int x, y, z, demo; void delay(uint16_t d) // Warteschleife { uint16_t d1, dummy; for (d1=d; d1>0; d1--) dummy^=d1; } ISR(TIM0_COMPA_vect) // Servoansteuerung { static uint16_t count=0; if (count>x) PORTB &= ~(1<<PB0); else PORTB |= (1<<PB0); if (count>y) PORTB &= ~(1<<PB1); else PORTB |= (1<<PB1); if (count>z) PORTB &= ~(1<<PB2); else PORTB |= (1<<PB2); if (count < 200) count++; else count=0; } int main(void) { x=x_mitte; // Servos Basisposition y=y_mitte; z=z_mitte; demo=5; // 5 Einzelschritte DDRB = (1<<PB2) | (1<<PB1) | (1<<PB0); // Servoausgänge PORTB= (1<<PB3); // PullUp Taster ein TCCR0A = (0 << WGM00) | (1 << WGM01); // CTC-Mode TCCR0A |= (0 << COM0A0) | (0 << COM0A1); // ohne OCR-Pin TCCR0B = (0 << CS02) | (0 << CS01) | (1 << CS00); // no prescaler TIMSK0 = (1 << OCIE0A); // Interrupt ein OCR0A = 50; // nicht wissenschaltliche Frequenz sei(); while(1) { y=y_mitte+4; delay(400); // Schritt if (demo) while(PINB & (1<<PB3)); // warten auf Taste for (; x>x_mitte-12; x--) { if (x==5) y=y_mitte+7; if (x==0) y=y_mitte+5; if (x==-11) y=y_mitte+3; delay(120+x); } x=x_mitte-15; y=y_mitte+4; delay(100); y=y_mitte; delay(300); x=x_mitte+5; delay(1000); if (demo) demo--; } return(0); }
Externes Bild anzeigen
Externes Bild anzeigen Externes Bild anzeigen Externes Bild anzeigen Externes Bild anzeigen
Gruß
mic







Zitieren
Lesezeichen