menselchen
02.07.2009, 07:49
Hallo ich bin neu hier und auch noch ein blutiger Anfänger
was Robotik betrifft. Ich habe bereits den Asuro gebaut und Programmiert und mich jetzt an ein eigenes Fahrzeug gewagt.
Die Hardware ist soweit fertig und ein Programm welches erstmal nur das fahren meines Roboters steuern soll. Doch es tut sich einfach nichts. Entweder es liegt daran, dass der Roboter keine verbindung zum Computer hat (Programmer STK200/300) oder das Programm ist falsch. Könntet ihr vielleicht mal einen Blick darüber werfen und mir sagen wo eventuell der Fehler liegt?
/*
* alf.c
*
* Created on: May 11, 2009
* Author: Julian Hengsteler
*/
#include <avr/io.h>
#include <util/delay.h>
#define leftdir
#define rightdir
#define right_speed
#define left_speed
inline void mspeed (unsigned char right_speed, unsigned char left_speed){
/*Timer 1 für PWM intialisieren*/
TCCR1A=(1 << WGM11);
TCCR1B=(1 << WGM13) | (1 << WGM12) | (1 << CS11) | (1 << CS10);
ICR1 = 255;
DDRB |= (1 << PB1);
TCCR1A |= (1 << COM1A1);
OCR1A = left_speed;
DDRB |= (1 << PB2);
TCCR1A |= (1 << COM1B1);
OCR1B = right_speed;
}
inline void leftdir(unsigned char left_dir){
if(left_dir==FWD){
DDRC |= (1<<PC7);
PORTC |= (1 <<PC7);
}
else if(left_dir==RWD){
DDRC |= (1<<PC6);
PORTC |= (1<<PC6);
}
else if(left_dir==BRK){
DDRC |= (1<<PC7) | (1<<PC6);
PORTC |= (1<<PC7) | (1<<PC6);
}
else{
left_speed = 0;
}
void rightdir(unsigned char right_dir){
if(right_dir == FWD){
DDRC |= (1<<PC5);
PORTC |= (1 <<PC5);
}
if else(right_dir == RWD){
DDRC |= (1<<PC4);
PORTC |= (1<<PC4);
}
if else(right_dir == BRK){
DDRC |= (1<<PC7) | (1<<PC6);
PORTC |= (1<<PC7) | (1<<PC6);
}
else{
left_speed = 0;
}
unsigned char FWD;
unsigned char RWD;
unsigned char BRK;
int main(void){
mspeed(255,255);
rightdir(FWD);
leftdir(FWD);
_delay_ms(100);
mspeed(255,255);
rightdir(RWD);
leftdir(RWD);
_delay_ms(100);
mspeed(0,255);
rightdir(FWD);
leftdir(FWD);
_delay_ms(100);
mspeed(0,255);
rightdir(FWD);
leftdir(FWD);
return 0;
}
Vielen Dank
Mit freundlichen Grüßen menselchen
was Robotik betrifft. Ich habe bereits den Asuro gebaut und Programmiert und mich jetzt an ein eigenes Fahrzeug gewagt.
Die Hardware ist soweit fertig und ein Programm welches erstmal nur das fahren meines Roboters steuern soll. Doch es tut sich einfach nichts. Entweder es liegt daran, dass der Roboter keine verbindung zum Computer hat (Programmer STK200/300) oder das Programm ist falsch. Könntet ihr vielleicht mal einen Blick darüber werfen und mir sagen wo eventuell der Fehler liegt?
/*
* alf.c
*
* Created on: May 11, 2009
* Author: Julian Hengsteler
*/
#include <avr/io.h>
#include <util/delay.h>
#define leftdir
#define rightdir
#define right_speed
#define left_speed
inline void mspeed (unsigned char right_speed, unsigned char left_speed){
/*Timer 1 für PWM intialisieren*/
TCCR1A=(1 << WGM11);
TCCR1B=(1 << WGM13) | (1 << WGM12) | (1 << CS11) | (1 << CS10);
ICR1 = 255;
DDRB |= (1 << PB1);
TCCR1A |= (1 << COM1A1);
OCR1A = left_speed;
DDRB |= (1 << PB2);
TCCR1A |= (1 << COM1B1);
OCR1B = right_speed;
}
inline void leftdir(unsigned char left_dir){
if(left_dir==FWD){
DDRC |= (1<<PC7);
PORTC |= (1 <<PC7);
}
else if(left_dir==RWD){
DDRC |= (1<<PC6);
PORTC |= (1<<PC6);
}
else if(left_dir==BRK){
DDRC |= (1<<PC7) | (1<<PC6);
PORTC |= (1<<PC7) | (1<<PC6);
}
else{
left_speed = 0;
}
void rightdir(unsigned char right_dir){
if(right_dir == FWD){
DDRC |= (1<<PC5);
PORTC |= (1 <<PC5);
}
if else(right_dir == RWD){
DDRC |= (1<<PC4);
PORTC |= (1<<PC4);
}
if else(right_dir == BRK){
DDRC |= (1<<PC7) | (1<<PC6);
PORTC |= (1<<PC7) | (1<<PC6);
}
else{
left_speed = 0;
}
unsigned char FWD;
unsigned char RWD;
unsigned char BRK;
int main(void){
mspeed(255,255);
rightdir(FWD);
leftdir(FWD);
_delay_ms(100);
mspeed(255,255);
rightdir(RWD);
leftdir(RWD);
_delay_ms(100);
mspeed(0,255);
rightdir(FWD);
leftdir(FWD);
_delay_ms(100);
mspeed(0,255);
rightdir(FWD);
leftdir(FWD);
return 0;
}
Vielen Dank
Mit freundlichen Grüßen menselchen