-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: NIBOBee sagt "Hallo Welt!"

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847

    NIBOBee sagt "Hallo Welt!"

    Anzeige

    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.

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Baudrate und Übertragungsparameter fehlen und das Senden wurde nicht aktiviert (TX-Enable), schau mal ins Datenblatt des Mega16 unter USART;) Hier meine Initialisierung für 2400, 8,none,1:
    Code:
     	#define UBRR_BAUD_2400 390       // Baudrate auf 2400 setzen
       UBRRH = UBRR_BAUD_2400 >> 8;
    	UBRRL = (uint8_t) UBRR_BAUD_2400;
    
    	UCSRC = (1<<URSEL)|(0<<USBS)|(3<<UCSZ0); // 8, none, 1
      	UCSRB |= (1<<TXEN); // Senden enablen
    Den Wert für das UBRR-Register (390 für 2400 Baud) errechnet man so:

    Kontrollertakt/16/Baud-1 oder 15000000/16/2400-1

    (Bei asuro und RP6 wurde der USART schon vom Bootloader richtig und komplett initialisiert)

    Zusätzlich fehlt noch die finale Endlosschleife im Programm und das obligatorische return:
    Code:
    int main(void) {
    
       writeString("NIBOBee sagt\n\r");
       writeString("Hallo Welt!\n\r");
       while(1); // ohne stürzt der Kontroller ins Nirwana!
       return(0); wird nie erreicht
    }
    btw. wird die main()-Funktion ohne Parameter aufgerufen: int main(void)...

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Danke mic, wieder was dazugelernt.

    Ich habe nun die Baudrate auf 9600 gestellt, falls es jemand ausprobieren möchte:
    Code:
    #include <nibobee/iodefs.h>
    #include <nibobee/led.h>
    #include <nibobee/line.h>
    
    void writeChar(uint8_t data ); 
    void writeString(char *string); 
    
    int main()
    
    {
    
        #define UBRR_BAUD_9600 96       // Baudrate auf 9600 setzen 
       UBRRH = UBRR_BAUD_9600 >> 8; 
       UBRRL = (uint8_t) UBRR_BAUD_9600; 
    
       UCSRC = (1<<URSEL)|(0<<USBS)|(3<<UCSZ0); // 8, none, 1 
         UCSRB |= (1<<TXEN); // Senden enablen 
    
       writeString("NIBOBee sagt 'Hallo Welt!'\n\r"); 
       while(1);
       return(0);
    } 
    
    void writeChar(uint8_t data )
    { 
       while ( !( UCSRA & (1<<UDRE)) ); 
       UDR = data; 
    } 
    void writeString(char *string) 
    { 
       while(*string) 
          writeChar(*string++); 
    }

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    27.06.2009
    Alter
    21
    Beiträge
    54
    Ist so etwas eigentlich auch mit dem RP6 möglich ihn irgendwass spechen zu lassen ?

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    wenn man am rp6 serielle übertragung macht und mit dem niobee sollte es kein problem sein. nur zwei mobile roboter mit kabel zu verbinden ist vileicht unpraktisch oder man verwendet ein funk modul
    was gibt es noch zu sagen

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Ich habe es noch nicht ausprobiert, aber der RP6 sollte die nibobee per IR-Kommunikation verstehen können. Und zwar ohne zusätzliche Bauteile nur mit Bordmitteln. Die Grundlagen mit funktionierendem Programm für den RP6 (allerdings auf eigene Gewähr, Thread bitte durchlesen!):

    http://www.roboternetz.de/phpBB2/zei...ag.php?t=32585

    Und für das IR-Senden mit der nibobee gibt es gleich zwei Ansätze:

    http://www.roboternetz.de/phpBB2/zei...=470629#470629
    http://www.roboternetz.de/phpBB2/zei...=470683#470683

    IR-Empfangen für die nibobee habe ich noch nicht fertig. Ohne TSOP könnte man dazu die Liniensensoren nutzen.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.03.2010
    Beiträge
    161
    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"));
    Angehängte Dateien Angehängte Dateien

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    20.05.2010
    Beiträge
    6

    Gleiches Problem

    Hallo zusammen,

    ich habe mir folgenden UART Wandler besorgt http://www.nbglin.com/485.htm und den TTL UART auf X5 der Nibobee verdrahtet. Ich habe das Program von Pinsel mit 9600 Baud hergenommen, lässt sich compilieren und flashen. Der USB Serial Converter scheint zu gehen es kommt aber nix auf meinem Terminal an. Ich habe HTerm und Realterm probiert. Ich bin für jede Idee wo ich etwas falsch gemacht habe dankbar.

    Salvador

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.557

    Re: Gleiches Problem

    Hallo Salvador,

    willkommen im Forum.

    Zitat Zitat von salvadordali
    ... folgenden UART Wandler besorgt http://www.nbglin.com/485.htm und den TTL UART auf X5 der Nibobee verdrahtet ...
    ... Der USB Serial Converter scheint zu gehen es kommt aber nix auf meinem Terminal an ...
    Hübsches Teil mit vielen Möglichkeiten ! ! Ein nicht unüblicher Fehler ist es, RX und TX zu verwechseln. Das passiert mir immer wieder. Daher habe ich einen Stecker (wie von RN empfohlen) mit (RX) - (GND) - (TX). Einfaches Drehen führt dann fast immer zum Erfolg *ggg*.
    Ciao sagt der JoeamBerg

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    20.05.2010
    Beiträge
    6

    TTL sollte gehen

    Thanks for the welcome,

    tja laut Beschreibung bzw. Schaltplan sollte das Modul eigentlich mit TTL auskommen, daher habe ich das Ding bestellt. Bin also wie gesagt etwas ratlos.

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •