Hallo
Ein Bild sagt mehr als tausend Worte:
Bild hier Bild hier Bild hier
Die Videos dazu:
Bild hier Bild hier Bild hier
http://www.youtube.com/watch?v=uL_am_61jfU
http://www.youtube.com/watch?v=KLWulyIWCak
http://www.youtube.com/watch?v=IAP3Z-bAb-g
Die Drähte der Potis sind leider zu kurz und müssen verlängert werden. Viel Spass beim Nachbau.
Beide Servos erhalten das selbe Signal und können deshalb auch parallel angeschlossen werden:
(Für einen 8MHz-Mega32)Code:#include <avr/io.h> // I/O Port definitions #include <avr/interrupt.h> // Interrupt macros uint8_t i, x, y, z; volatile uint8_t p; void init(void) { TCCR0 = (0 << WGM00) | (1 << WGM01); // CTC-Mode TCCR0 |= (0 << COM00) | (0 << COM01); // ohne OCR-Pin TCCR0 |= (0 << CS02) | (0 << CS01) | (1 << CS00); // kein prescaler TIMSK = (1 << OCIE0); // Interrupt ein OCR0 = 79; // 100kHz DDRA |= 16; // E_INT1 als Ausgang DDRC |= 3; // SCL und SDA als Ausgang sei(); } void pause(uint8_t dauer) { p=dauer; while(p); } int main(void) { x=y=z=140; init(); pause(200); while(1) { x=y=z=60; pause(100); x=y=z=220; pause(100); } return(0); } ISR(TIMER0_COMP_vect) { static uint16_t count; if(count>x) PORTA &= ~16; // E_INT1 (Pin8) else PORTA |= 16; if(count>y) PORTC &= ~1; // SCL (Pin10) else PORTC |= 1; if(count>z) PORTC &= ~2; // SDA (Pin12) else PORTC |= 2; if(count<2000)count++; else { count=0; if(p) p--; } };
Gruß
mic
[Edit]
26.03.2016: Bilder neu verlinkt







Zitieren

Lesezeichen