ListerStorm
21.10.2011, 15:20
Hallo liebe RN Wissens Gemeinde,
ich habe ein Problem und konnte mir leider selber nicht helfen. Und da hier wie immer die freundlichen Roboter Profis sind wollte ich mir hier Hilfe holen.
Ok zum Problem mein Roboter Goldie, der übrigens kein Asuro ist, hat ein Problem. Keine angst Goldie ist stark mit dem Asuro verwandt. Nur das er selbst gebaut ist und statt aus einer großen Steuerplatine aus vielen kleinen besteht. Also zum Beispiel hat der Motortreiber eine extra mini Platine, sowie die Stromversorgung. Stärkere Motoren? Kein Problem alter motortreiber raus den neuen auf ein Stück Lochrasterplatine gelötet wieder angesteckt fertig. KK genug von Goldie im allgemeinen. Wenn Goldie fertig ist schreibe ich sicher einen seperaten Beitrag hehe
Goldie ist in Bascom programmiert was herlich funktioniert. Da liegt das Problem. Ich habe die Ultraschallerweiterung des Asuro nachgebaut, diese ist aber nur mit einem Code in C. Tja ich habs mal versucht ich komme mit C nicht zurecht. Ich habe von RN Wissen den Bascom Code für das SRF05 probiert anzupassen. Leider funktioniert es nicht. Ich weiss garnicht ob das Asuro Forum ideal ist aber ich wollte es erstmal hier versuchen bevor ich andere teile des Forum mit meinem Problem belästige.
Tja im Prinzip muss ich die Asuroerweiterung mit Bascom zum laufen bekommen.
Bei bedarf kann ich hier auch den Asuro Code mit posten. Ach was ich mach es direkt. Hier:
#include "asuro.h"
void LocalInit(void)
{
// Change Oscillator-frequency of Timer 2
// to 40kHz, no toggling of IO-pin:
TCCR2 = (1 << WGM21) | (1 << CS20);
OCR2 = 0x64; // 40kHz @8MHz crystal
ADCSRA = 0x00; // ADC off
// Analog comparator:
ACSR = 0x02; // Generate interrupt on falling edge
ADMUX = 0x03; // Multiplexer for comparator to
// ADC pin 3
SFIOR |= (1 << ACME); // Enable muliplexing of comparator
DDRD &= ~(1 << 6); // Port D Pin 6 is input!
}
void Ping(unsigned char length)
{
count72kHz = 0;
TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
// Toggling of IO-Pin on
// generate the Chirp
while(count72kHz < length) {
OCR2 = 0x64 + length / 2 - count72kHz;
}
TCCR2 = (1 << WGM21) | (1 << CS20); // Toggling of IO-Pin off
OCR2 = 0x64; // set frequency to 40kHz
}
int main(void)
{
int pos, i;
int posmarker;
Init();
LocalInit();
while(TRUE) {
posmarker = 0;
Ping(20);
for(pos = 0; pos < 100; pos++) {
Sleep(10);
if((ACSR & (1 << ACI)) != 0) {
if(posmarker == 0) { posmarker = pos; }
}
ACSR |= (1 << ACI);
}
if(posmarker > 10) {
StatusLED(GREEN);
MotorDir(FWD, FWD);
MotorSpeed(200, 200);
}
else {
StatusLED(RED);
MotorDir(FWD, RWD);
MotorSpeed(0, 200);
for(i = 0; i<100; i++) { Sleep(200); }
}
}
return 0;
}
Wäre echt toll wenn mir Jemand helfen könnte und wäre sicher auch für andere Roboterbauer interessant. Und ja einfach ein SRF05 zukaufen wäre evtl. einfacher gewesen aber fertig kaufen ist doch langweilig hehe
MfG Lister
PS: Goldie kann mit einem Attiny2313, Atmega 8, 16, 32 ausgestattet werden, sowie mit allen möglichen Quarzen. Habe ich alles hier.
ich habe ein Problem und konnte mir leider selber nicht helfen. Und da hier wie immer die freundlichen Roboter Profis sind wollte ich mir hier Hilfe holen.
Ok zum Problem mein Roboter Goldie, der übrigens kein Asuro ist, hat ein Problem. Keine angst Goldie ist stark mit dem Asuro verwandt. Nur das er selbst gebaut ist und statt aus einer großen Steuerplatine aus vielen kleinen besteht. Also zum Beispiel hat der Motortreiber eine extra mini Platine, sowie die Stromversorgung. Stärkere Motoren? Kein Problem alter motortreiber raus den neuen auf ein Stück Lochrasterplatine gelötet wieder angesteckt fertig. KK genug von Goldie im allgemeinen. Wenn Goldie fertig ist schreibe ich sicher einen seperaten Beitrag hehe
Goldie ist in Bascom programmiert was herlich funktioniert. Da liegt das Problem. Ich habe die Ultraschallerweiterung des Asuro nachgebaut, diese ist aber nur mit einem Code in C. Tja ich habs mal versucht ich komme mit C nicht zurecht. Ich habe von RN Wissen den Bascom Code für das SRF05 probiert anzupassen. Leider funktioniert es nicht. Ich weiss garnicht ob das Asuro Forum ideal ist aber ich wollte es erstmal hier versuchen bevor ich andere teile des Forum mit meinem Problem belästige.
Tja im Prinzip muss ich die Asuroerweiterung mit Bascom zum laufen bekommen.
Bei bedarf kann ich hier auch den Asuro Code mit posten. Ach was ich mach es direkt. Hier:
#include "asuro.h"
void LocalInit(void)
{
// Change Oscillator-frequency of Timer 2
// to 40kHz, no toggling of IO-pin:
TCCR2 = (1 << WGM21) | (1 << CS20);
OCR2 = 0x64; // 40kHz @8MHz crystal
ADCSRA = 0x00; // ADC off
// Analog comparator:
ACSR = 0x02; // Generate interrupt on falling edge
ADMUX = 0x03; // Multiplexer for comparator to
// ADC pin 3
SFIOR |= (1 << ACME); // Enable muliplexing of comparator
DDRD &= ~(1 << 6); // Port D Pin 6 is input!
}
void Ping(unsigned char length)
{
count72kHz = 0;
TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
// Toggling of IO-Pin on
// generate the Chirp
while(count72kHz < length) {
OCR2 = 0x64 + length / 2 - count72kHz;
}
TCCR2 = (1 << WGM21) | (1 << CS20); // Toggling of IO-Pin off
OCR2 = 0x64; // set frequency to 40kHz
}
int main(void)
{
int pos, i;
int posmarker;
Init();
LocalInit();
while(TRUE) {
posmarker = 0;
Ping(20);
for(pos = 0; pos < 100; pos++) {
Sleep(10);
if((ACSR & (1 << ACI)) != 0) {
if(posmarker == 0) { posmarker = pos; }
}
ACSR |= (1 << ACI);
}
if(posmarker > 10) {
StatusLED(GREEN);
MotorDir(FWD, FWD);
MotorSpeed(200, 200);
}
else {
StatusLED(RED);
MotorDir(FWD, RWD);
MotorSpeed(0, 200);
for(i = 0; i<100; i++) { Sleep(200); }
}
}
return 0;
}
Wäre echt toll wenn mir Jemand helfen könnte und wäre sicher auch für andere Roboterbauer interessant. Und ja einfach ein SRF05 zukaufen wäre evtl. einfacher gewesen aber fertig kaufen ist doch langweilig hehe
MfG Lister
PS: Goldie kann mit einem Attiny2313, Atmega 8, 16, 32 ausgestattet werden, sowie mit allen möglichen Quarzen. Habe ich alles hier.