PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CMUCAM2 Kommunikationsproblem



alexbu
21.12.2006, 17:28
Hallo Robotler ...

Sitze hier gerade an meiner Diplomarbeit und bin schier am verzweifeln. :evil:

Habe einen Kondo KHR-1, an einem Ethernutboard http://www.ethernutboard.de an dem Board sind 3 IR-Sensoren, 1 Ultraschall und eben die besagte CMUCAM2.

Habe die Cam über seriell am PC ----> alles OK
Schließe die Cam an das Ethernutboard und sende einen String an die Cam , bevorzugt rs \r weil dann die Cam-LED einmal rot blinkt.
Wenn ich an den Port gehe und an den PC anschließe, zeigt das Terminal Programm rs und macht ein return.
Eigentlich doch genau das was ich will ?
Kamera wieder dran ---> nix passiert.
Habe das über Usart0 und über Usart1 (TTL) (Jumper wech) probiert, aber immer das selbe Ergebnis.Nämlich gar keins.

Weiss nicht mehr was ich noch versuchen kann. Vorsichtshalber hänge ich mal den Code mit dran ...

main.c


int main(void)
{
init_uart0(); //normaler Usart
init_uart1(); //TTL

while(1) // forever
{
put_string0("rs\r"); // sende Kommando an Terminal
put_string1("rs\r"); // sende Kommando über TTL an Cam

pause();


}
}



uart.c


// -------------- INIT0 --------------------
void init_uart0(void)
{
//Baudrate bestimmen
UBRR0H =(uint8_t) (UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8);
UBRR0L =(uint8_t) UART_BAUD_CALC(UART_BAUD_RATE,F_CPU);
UCSR0B = (1<<RXEN0) | (1<<TXEN0); // enable receiver and transmitter
UCSR0C = (3<<UCSZ0); // 8 bit (default: asynchronous, no parity,1stop-bit)
return;
}

// --------------------------------End init0-------------------------------

// -------------- put_string0--------------------
void put_string0(char *s)
{
while(*s)
{
put_char0(*s);
s++;
}
}
// -------------- ende put_string0--------------------


analog dazu die USART1

Falls noch was benötigt wird, bescheid geben ...

BITTE HELFT MIR ;)

Vielen Dank im voraus Alex :evil: :evil:

x-ryder
30.12.2006, 07:07
1. miss mal mit nem oszillographen am tll-port der cam, ob dort etwas gesendet wird.
2. hast du die richtigen baudraten?
3. ich kenn mich jetz mit c nich aus, aber schreib doch mal ne routine, die sendet und gleichzeitig wartet, ob danach nen ack kommt, das sollte passieren, ansonsten issn sendefehler aufgetreten....
4. empfang einfach mal alles was die cam dir schickt, egal was und gib das auf usart1 wieder an den pc, dann haste ne gute debugging-schnitte

Martin

alexbu
30.12.2006, 13:08
Hallo ! Genau das habe ich gemacht und festgestellt, dass zwar Daten zur Cam kommen, aber leider halt gar nix zurück.

Habe nach sage und schreibe einer Woche das Problem gelöst.
Ich habe in die Routine USART1_put ein delay eingefügt, und siehe da...
Hätte kotz.... können ... Aber jetzt läuft es .... Es ist schon verrückt woran es manchmal liegt.

VIELEN DANK für die Hilfe !!! Und guten Rutsch ....

Gruss Alex

x-ryder
30.12.2006, 14:57
dann noch eine sache ^^

wenns nu ordentlich geht, benutz den raw mode, dann musste keine teils doch aufwendige stringmanipulation verwenden, sondern bekommst direkt zahlen geliefert.... geht mit dem command "RM 1", dann kannste noch die normalen strings hinsenden, aber bekommst immer den paketnamen als ascii zurück und danach zahlen
d.h. nen TC-befehl sieht dann so aus:

-> TC 31 50 60 75 30 55
<- (255)T(mx)(my)(x)(y)(npix)(conf)

ich weiß die syntax des T-packages nich mehr genau, aber alle sachen in klammern werden dann als zahlen gesendet, und nicht als zeichen, d.h. jede eingeklammerte value ist nur in EINEM zeichen
die 255 dient zur synchronisation

Martin