PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro mit Ultraschall und Bascom Problem



ListerStorm
21.10.2011, 14: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.

danimath
21.10.2011, 14:47
Moin Lister,

vielleicht hilft Dir das: bei robotikhardware gibt's häufig Anleitungen mit bascom Beispielcode (zu meinem Leidwesen, weil ich ein C-Mensch bin ;)) Für SRF05 wäre das hier (klick) (http://www.robotikhardware.de/download/srf05doku.pdf).

viele Grüße
Andreas

Edit: oder auch hier im RN-Wissen (http://www.rn-wissen.de/index.php/Ultraschall_SRF05_an_RN-MiniControl)

ListerStorm
21.10.2011, 15:12
Hallo,

erstmal danke für deine Antwort. Die Anleitung für z.B. das SRF05 kenne ich bereits. Leider funktioniert das nicht mit dem Asuro Modul. Ich dachte auch jedes Modul wird schon gleich funktionieren. Aber anscheinend nicht. Ich meine einen Hardwaredefekt kann ich leider nicht ausschliessen, weil ich kein Ozziloskop besitze aber das müsste alles stimmen. Das Asuromodul verwendet auch 3 Leitungen (ohne Stromleitungen gerechnet). Was ich in Erfahrung gebracht habe ist das Asuro den OC2 zum erzeugen des Impuls verwendet, den ADC3 zum Empfangen und den PD6 zum unterbinden von Ultraschallkurzschlüssen. Letzteres habe ich auch nur nach gelesen. Ich denke das, dass Asuromodul anders aufgebaut und auch anders angesteuert werden muss, als das SRF05. Tja nur leider verstehe ich den C Code nicht und den Bascom auch nur teilweise weil dort dieser Vorgang mit Pulsout und Pulsin gleich mehrere Abläufe zusammen fasst.

Gruß Lister