Hallo zusammen, habe einen Stk500 Board mit einem Atmega16 an einem Servocontroller SSC-32 über Modem Kabel verbunden um einen Servomotor zu steueren. danach habe ich ein kleines C Code geschrieben , das den servomotor steuert und es funktioniert, meine frage ist: wie kann ich diesen servomotor über die Tastatur steueren sprich wenn ich auf A drücke soll er 10 grad anfahren..... bis jetzt habe ich den servomotor nur über die Switcher(Taster) vom STK500 gesteuert. und hier ist das Code: #include <avr/io.h> #include <avr/interrupt.h> void uart_putc(unsigned char c) { while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */ { } UDR = c; /* sende Zeichen */ } void servo_cmd (char *s) { while (*s) { /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */ uart_putc(*s); s++; } } void servo_time(uint8_t ch, uint16_t position, uint16_t time) { char string[5]; uart_putc('#'); itoa(ch, string, 10); servo_cmd(string); uart_putc('P'); itoa(position, string, 10); servo_cmd(string); if(time) { uart_putc('T'); itoa(time, string, 10); servo_cmd(string); } uart_putc('\r'); } void servo_speed(uint8_t ch, uint16_t position, uint16_t speed) { char string[5]; uart_putc('#'); itoa(ch, string, 10); servo_cmd(string); uart_putc('P'); itoa(position, string, 10); servo_cmd(string); if(speed) { uart_putc('S'); itoa(speed, string, 10); servo_cmd(string); } uart_putc('\r'); } void servo(uint8_t ch, uint16_t position) { servo_time(ch, position, 0); } void uart_init() { // USART initialisieren #ifndef F_CPU #define F_CPU 3686400L // Systemtakt in Hz, das L am Ende ist wichtig, NICHT UL verwenden! #endif #define BAUD 9600L // Baudrate, das L am Ende ist wichtig, NICHT UL verwenden! // Berechnungen #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille #if ((BAUD_ERROR>10) || (BAUD_ERROR<-10)) #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! #endif // Senden aktivieren UCSRB |= (1<<TXEN); // UART TX einschalten // Setze Frame Format 8 Datenbits + 1 Stopbit UCSRC |= (1<<URSEL)|(3<<UCSZ0); // Asynchron 8N1 // Baudrate einstellen UBRRH = UBRR_VAL >> 8; UBRRL = UBRR_VAL & 0xFF; } int main(void) { uart_init(); DDRA=0x00; DDRB=0xff; PORTB=0xff; // Timer1 initialisieren TCNT1H=0x00; TCNT1L=0x00; // CTC Mode - Prescaler 256 TCCR1A = 0x00; TCCR1B = 0b00001011; // 1sec bei 3,6864 MHz OCR1AH = 0xe0; OCR1AL = 0xff; // Timer aktivieren TIMSK |= 0x10; // Globale Interrupts aktivieren sei(); while(1) { if ( !(PINA & (1 << PA0)) ) { servo_cmd(" #0p1500#1 p1500#3p1500#4 p1500#6p1500 #7 p1500 #8 p1500 #9p1500 #11 p1500 #12p1500 #14p1500 #15 p1500 t5000\r"); } ; if ( !(PINA & (1 << PA1)) ) { servo_cmd("#0P1333\r"); } ; if ( !(PINA & (1 << PA2)) ) { servo_cmd("#0P1666\r"); } ; if ( !(PINA & (1 << PA3)) ) { servo_cmd("#0P2000\r"); } ; if ( !(PINA & (1 << PA4)) ) { servo_time(0, 1520, 5000); } ; if ( !(PINA & (1 << PA5)) ) { servo_speed(0, 1700, 100); } ; if ( !(PINA & (1 << PA6)) ) { servo_time(0, 1700, 5000); } ; if ( !(PINA & (1 << PA7)) ) { servo(0, 1500); } ; if ( !(PINA & (1 << PA6)) ) { servo_time(0, 1700, 5000); } ; } return(0); } // Interrupt Routine Timer1 Compare Match SIGNAL (SIG_OUTPUT_COMPARE1A) { // Toggle LED an PortB PORTB ^= (1 << PB0); //uart_puts(servo); }
>meine frage ist: wie kann ich diesen >servomotor über die Tastatur steueren sprich wenn ich auf A drücke soll >er 10 grad anfahren 1. Möglichkeit du nimmst einen Mikrocontroller mit 2 UARTS (z.B. ATMEGA162) und kommunizierts mit der 2. UART mit dem PC. auf dem PC schreibst du ein Programm,welches die Taste A pollt und einen entsprechenden Befehl an den Mikrocontroller gibt. 2. Möglichkeit Du läßt den Mikrocontroller weg und schreibst auf dem PC ein Programm, welches die Taste A pollt und entsprechend direkt befehle an den servomotor gibt.
3. Möglichkeit Du könntest direkt eine PC-Tastatur (PS2) an den AVR hängen http://www.avrfreaks.net/index.php?module=Freaks%20Files&func=viewFile&id=2517&showinfo=1 (den Software-UART Teil kannst du weglassen) 4. Möglichkeit PC - STK500 mit Hardware-UART STK500 - Servocontroller mit Software-UART oder umgekehrt
Wolfram,Stefan B : der mikrocontroller denn ich habe bzw board stk500 hat auch 2 UART,einen mit dem Pc verbunden und den zweiten mit dem servocontroller.es funktioniert auch nur ich kann die Servos nicht über die Tastatur steueren. bin aber neuling im berich AVR deswegen habe ich nich so viel ahnung wie ich den C Code für Tastatur schreibe:-((((
Das stk500 hat zwar zwei UARTs drauf, allerdings geht nur eine zum wirklichen Mikrocontroller. Die andere UART ist nur zum programmieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.