NIBOBee sagt "Hallo Welt!"
Hallo zusammen,
ich habe mir einen USB UART-Wandler (http://watterott.com/FTDI-Basic-Breakout-5V) besorgt und mir ein Programm gemacht das die Bee "Hallo Welt" sagen lässt:
Code:
#include <nibobee/iodefs.h>
#include <nibobee/led.h>
#include <nibobee/line.h>
void writeChar(uint8_t data );
void writeString(char *string);
int main() {
writeString("NIBOBee sagt\n\r");
writeString("Hallo Welt!\n\r");
}
void writeChar(uint8_t data )
{
while ( !( UCSRA & (1<<UDRE)) );
UDR = data;
}
void writeString(char *string)
{
while(*string)
writeChar(*string++);
}
Lässt sich fehlerfrei kompilieren und auch flashen - nur kommt im Terminalprogramm nichts an.
Bitte um Hilfe, was ich falsch gemacht haben könnte.
Liste der Anhänge anzeigen (Anzahl: 2)
In einem völlig anderen Projekt hatte ich den seriellen Port so eingerichtet, dass die ganzen Funktionen der Standard C Library den seriellen Port als Konsole verwenden.
So kann man z.B. puts() und printf() für Ausgaben, sowie fgets() und scanf() für Eingaben benutzen. Beispiel:
Code:
char buffer[100];
int main(void) {
initserial();
while (1) {
fgets(buffer,sizeof(buffer),stdin);
if (strcmp_P(buffer,PSTR("help"))==0) {
puts_P(PSTR("Can I help you?"));
}
}
return 0;
}
Wer diese PSTR() Sachen nicht kennt: Zeichenketten belegen doppelt Speicher (und zwar RAM und ROM), wenn man es nicht so macht. Die Funktion puts_P gibt eine Zeichenkette aus, die im Programmspeicher liegt, während puts vorraussetzt, dass die Zeichenkette im RAM liegt.
Schlecht: puts("Hallo");
Besser: puts_P(PSTR("Hallo"));
Liste der Anhänge anzeigen (Anzahl: 1)
Geht doch, warum denn nicht gleich so.
So nach etwas längerer Pause bin ich wieder da.
Ich habes nun auch geschafft.
Ich habe mir mit der Anleitung vom oberallgeier eine Testschaltung gebastelt und mit dem Programm von Pinsel "U" in der Endlosschleife gesendet. Damit habe ich überprüft ob die RS232 der Biene auch richtig tut.
Ich habe ebenfalls den Baustein FTDI Basic Breakout5V von Watterot besorgt RX und TX richtig angeschlossen sowie GND mit "-" verbunden.
Und siehe da ich empfange lauter "U U U ....." wunderbar.
Ich habe die Realtermeinstellungen dokumentiert und als Attachement angefügt.
Zwei Sachen hab ich gelernt:
1. RX und TX tauschbar zu haben ist eine gute Idee.
2. Die Einstellungen von Realterm sind etwas merkwürdig.
Nachdem das neue Modul funktioniert werde ich das alte erst mal beiseite legen und später mal checken ob es noch tut.
Will jetzt erst mal an de Biene weiter basteln.
Danke noch mal für die Unterstützung!
Salvador
Hier noch der komplette Code den ich verwendet habe:
Code:
#include <nibobee/iodefs.h>
#include <nibobee/led.h>
#include <nibobee/line.h>
#include <nibobee/usart.h>
#include <nibobee/sens.h>
#include <nibobee/delay.h>
void writeChar(uint8_t data );
void writeString(char *string);
void waitForStartBySensor();
void blink();
void init();
int main()
{
init();
waitForStartBySensor();
blink();
while(1) {
//usart_putchar('U');
//usart_putchar(' ');
writeString("Hallo sagt die Biene\n\r");
}
return(0);
}
void writeChar(uint8_t data )
{
while ( !( UCSRA & (1<<UDRE)) );
UDR = data;
}
void writeString(char *string)
{
while(*string)
writeChar(*string++);
}
void waitForStartBySensor() {
int8_t start = 0;
while (start == 0) {
if(sens_getLeft() != 0 || sens_getRight() != 0) {
start = 1;
}
delay(10);
}
}
/*!
* LED 0-3 blinken auf. Kann genutzt werden um Aktionen zu bestätigen.
*/
void blink() {
int16_t iBlink = 200;
for(int8_t n=0; n<=4; n++) {
led_set(LED_L_YE, n%2);
led_set(LED_L_RD, n%2);
led_set(LED_R_YE, n%2);
led_set(LED_R_RD, n%2);
delay(iBlink);
}
}
void init() {
sens_init();
led_init();
analog_init();
line_init();
enable_interrupts();
usart_enable();
usart_setbaudrate(9600);
}
Rückversicherung: Biene - serielle Kommunikation
Hi @all!
Ich überlege, den Nibobee ins MS Robotics Studio zu integrieren. Hübsch wäre es dazu, wenn ich die SerialPort Klasse von .Net benutzen könnte. Die kann auch mit virtuellen Com Ports umgehen. Mein Bluetooth Dongle benutzt zum Beispiel einen solchen (ok, eigentlich sind es zwei und nochmal ok, eigentlich kann ich nur sagen, dass die Klasse mit dem BT Dongle kann ;)). In der Konstellation funzt auch die Kommunikation mit dem Lego NXT (in dessen Servics wird eine SerialPort Instanz verwendet) ohne Probleme.
Meine Idee war daher, den Nibobee um einen der hier genannten USB - seriell Wandler zu erweitern und den (so vermute ich wenigstens) erstellten virtuellen COM Port für die Kommunikation zu nutzen. Das sollte doch eigentlich funktionieren, oder?
Zumindest kann man ja offensichtlich auf ein Terminal schreiben und wohl auch davon lesen (zumindest hat die C Bib auch ne Funktion, um von der seriellen Schnittstelle zu lesen).
Leider habe ich momentan keine Biene zur Verfügung, um das mal eben so probieren zu können. Meine FH oder ich müssten diese dafür extra kaufen. Aus dem Grund ist es mein Interesse, das "Risiko der Anschaffung möglichst gering zu halten" ;), weil der Roboter zunächst nur dafür angeschafft werden würde und, sofern ich ihn selbst bezahlen muss, mir auch die 50 Euronen momentan schon weh täten.
Für Infos und Meinungen dazu wäre ich daher sehr dankbar!
viele Grüße
KD81