- LiFePO4 Speicher Test         
Seite 5 von 8 ErsteErste ... 34567 ... LetzteLetzte
Ergebnis 41 bis 50 von 75

Thema: NIBObee Erfahrungsberichte

  1. #41
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo

    Nun funktioniert meine IR-Kommunikation auch:
    Code:
    // Nibobee IR-Kommunikation mit den LineLEDs.                          16.11.09 mic
    
    // Das Programm verwendet einen netten Effekt des USART: Bei aktivierten Transmitter
    // und aktiven Senden kann man im Hintergrund den Pegel des TX-Pins einlesen ;)
    // Diesen Effekt verwende ich hier um in der ISR des Timer2 die 36kHz-Impulse zu
    // erzeugen und an den Linien-IR-Leds auszugeben. Terminaleinstellung: 2400,8,none,1
    
    // Das funktioniert im Hintergrund mit allen Ausgaben die mit dem USART gesendet
    // werden. Ich habe zum Testen drei kleine Funktionen angehängt:
    
    // writeChar(char) sendet ein einzelnes Zeichen
    // writeString(string) sendet einen String
    // writeInteger(wert, basis) sendet Integerwerte in bin, hex und dec
    
    // Das sollte auch mit der Nibobee USART-Lib funktionieren und hätte dann sogar
    // einen Sendebuffer. Ich weiß nur noch nicht wie man die anwendet :)
    
    // Die #defines in der iodefs_nibobee.h sind mir zu umständlich ;)
    #define LineLEDs_on 		PORTB &=~(1<<PB4)
    #define LineLEDs_off 	PORTB |= (1<<PB4)
    
    #include <nibobee/iodefs.h>
    #include <nibobee/delay.h>
    #include <nibobee/led.h>
    #include <nibobee/sens.h>
    #include <stdlib.h>			// C standard functions (e.g. itoa...)
    
    void writeChar(uint8_t data );
    void writeString(char *string);
    void writeInteger(int16_t number, uint8_t base);
    
    int main(void) {
    	uint8_t c;
    	led_init();                      // IO-Ports der LEDs als Ausgänge konfigurieren
    	sens_init();                     // und Fühler aktivieren
    
    	#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
    
    	TCCR2 = (1 << WGM21) | (1 << CS20); // CTC-Mode, no prescaling, no OC2-PIN!
    	OCR2  = 208; // 36kHz @15MHz
    	TIMSK |= (1 << OCIE2);
    	
    	DDRB |= (1<<PB4); // LineLED ist ein Ausgang
    	LineLEDs_on; 		// LineLED schaltet gegen GND!
    	DDRD |= 2;  	 	// TXD Ausgang und low
    	PORTD &= ~2;
    	sei();
    
    	led_set(LED_L_YE, 1);
    	while(!sens_getLeft() && !sens_getRight());  // warten auf Taste
    	led_set(LED_L_YE, 0);
    
    	writeString("\n\rIR-Kommunikation mit nibobee\n\r");
    	writeString("Empfang über asuro/Yeti-IR-Transceiver\n\r");
    	writeString("16.11.09 mic\n\n\r");
    	while(1)
    	{
    		for(c='A'; c<='Z'; c++) writeChar(c);
    		writeChar(10);
    		writeChar(13);
    		for(c='a'; c<='z'; c++) writeChar(c);
    		writeChar(10);
    		writeChar(13);
    		for(c=0; c<16; c++)
    		{
    			writeInteger(c, 10);
    			writeChar('-');
    			writeInteger(c, 16);
    			writeChar('-');
    			writeInteger(c, 2);
    			writeString("\n\r");
    		}
    		writeChar(10);
    	   delay(500);
    	}
    	return 0;
    }
    
    // Die ISR erzeugt die 36kHz-Trägerfrequenz und "lauscht" gleichzeitig am TXD-Pin
    // um die seriellen Daten auf die Trägerfrequenz zu mischen.
    
    ISR (TIMER2_COMP_vect)
    {
    	static uint8_t status=0;
    
       if(PIND & 2) // Der TSOP invertiert die empfangenen Daten!
    	{
    	   led_set(LED_R_YE, 0); // Kontrollanzeige
    	   LineLEDs_off;
    	}
    	else
       {
    		if(status)
    		{
    			led_set(LED_R_YE, 1);
    			LineLEDs_on;
    			status=0;
    		}
    		else
    		{
    			led_set(LED_R_YE, 0);
    			LineLEDs_off;
    			status=1;
    		}
    	}
    }
    void writeChar(uint8_t data ) // Code aus ATMega16-Datenblatt
    {
    	while ( !( UCSRA & (1<<UDRE)) );
    	UDR = data;
    }
    void writeString(char *string)
    {
    	while(*string)
    		writeChar(*string++);
    }
    void writeInteger(int16_t number, uint8_t base)
    {
    	char buffer[17];
    	itoa(number, &buffer[0], base);
    	writeString(&buffer[0]);
    }
    Jetzt muss ich nur noch lernen wie man die USART-Funktionen der nibobee-Lib nutzt ;)

    Gruß

    mic

    [Edit]
    Timer-Setup ohne OC2-Pin eingefügt
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  2. #42
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    57
    Beiträge
    847
    Hallo,

    vielen Dank für die Hinweise.

    Ich habe mir jetzt einen "FTDI Basic Breakout 5V" Wandler bestellt und werde ihn an X5 anhängen.

    Ich finde ich es schade daß im Tutorial nicht auf die Kommunikation eingangen wird. In der Wiki http://www.nibo-roboter.de/wiki/Prog..._%28NIBObee%29 steht nur:
    "... beinhaltet auch komfortable Routinen für die Textausgabe auf dem optionalen Grafik-Display"

  3. #43
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    22.05.2007
    Ort
    Stolberg
    Beiträge
    111
    @pinsel120866:
    Das Grafikdisplay im Wiki ist nicht korrekt, ich habs direkt korrigiert. Die Routinen sind in der Bibliothek für den NIBO2 enthalten!

  4. #44
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    57
    Beiträge
    847
    Hi workwind,

    cool wäre eine Anleitung im Wiki, die das Anbringen eines Displays an die Bee beschreibt. Ist so etwas angedacht?

  5. #45
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Dabei ergibt sich ein etwas seltsames Verhalten der Odometrie:
    Der Motor, der sich rückwärts dreht zeigt ca. 50 Ticks. Der Motor der sich vorwärts dreht, zeigt ca. 70 Ticks. Da sich der Roboter auf der Stelle dreht, sollten beide Werte gleich sein. Wie verhalten sich eure NiboBees in der Hinsicht?
    Meine Biene spinnt auch beim Drehen: Rechtsrum sind beide Zähler fast gleich, linksrum großer Unterschied. (natürlich vorzeichenlos betrachet;)

    Weil ich das eher wissenschaftlicher angehen wollte, habe ich mir die Motoransteuerung mal genauer angeschaut. Sehr clever gelöst mit dem Demultiplexer :) Einzuordnen ist das wohl zwischen der voll steuerbaren H-Brücke des asuro (mit 6 Leitungen, Gas-Bremse-Freilauf) und der peinlichen Sparschaltung des Probots (mit 3 Leitungen, Gas).

    Mein aktueller Sofwarestand sendet Daten per Usart und IR, steuert ein Servo an X3 und zählt die Odo-Impulse beim Schieben. Die grundsätzliche Motorsteuerung ohne PWM kennt nur Vollgas und berücksichtigt die scheinbar am Würfeltisch entworfene Richtungsansteuerung (PD6/7;):
    Code:
    // Nibobee Motor- und Odometrytest                                    18.11.09 mic
    
    #include <nibobee/iodefs.h>
    #include <nibobee/delay.h>
    #include <nibobee/odometry.h>
    #include <nibobee/led.h>
    #include <nibobee/sens.h>
    #include <stdlib.h>			// C standard functions (e.g. itoa...)
    
    #define LineLEDs_on		PORTB &=~(1<<PB4)
    #define LineLEDs_off		PORTB |= (1<<PB4)
    #define DIR_R 7
    #define DIR_L 6
    #define PWM_L 5
    #define PWM_R 4
    
    void ir_init(void);
    void writeChar(uint8_t data );
    void writeString(char *string);
    void writeInteger(int16_t number, uint8_t base);
    void motorDir(uint8_t dir_left, uint8_t dir_right);
    void motorSpeed(uint8_t speed_left, uint8_t speed_right);
    
    uint8_t p=0, servo=72;
    
    int main(void) {
    
    	led_init();
    	sens_init();
    	odometry_init();
    	odometry_reset();
    	ir_init();
    	
    
    	PORTD |=(1<<PWM_L)|(1<<PWM_R); // Pullups einschalten damit der Pegel high bleibt
    	DDRD |=(1<<DIR_L)|(1<<DIR_R)|(1<<PWM_L)|(1<<PWM_R);
    
    	writeString("\n\n\r");
    	writeString("Test der Motoransteuerung\n\r");
    	writeString("und der Odometry\n\r");
    	writeString("18.11.09 mic\n\n\r");
    	delay(1000);
    
    	while(1)
    	{
    	   writeInteger(odometry_getLeft(0), 10);
    	   writeString("-");
    	   writeInteger(odometry_getRight(0), 10);
    	   writeString("\n\r");
    	   delay(200);
    	   if(sens_getLeft()) odometry_getLeft(1);
    	   if(sens_getRight()) odometry_getRight(1);
    	   if(sens_getLeft() & sens_getRight())
    	   {
    	      odometry_getLeft(1);
    			odometry_getRight(1);
    
    			motorDir(1,1);
    	      motorSpeed(1,1);
    	      delay(500);
    	      motorSpeed(0,0);
    	      delay(50);
    
    	      motorDir(0,0);
    	      motorSpeed(1,1);
    	      delay(500);
    	      motorSpeed(0,0);
    	      delay(50);
    
    	      motorDir(1,0);
    	      motorSpeed(1,1);
    	      delay(500);
    	      motorSpeed(0,0);
    	      delay(50);
    
    	      motorDir(0,1);
    	      motorSpeed(1,1);
    	      delay(500);
    	      motorSpeed(0,0);
    	      delay(50);
    		}
    	}
    	return 0;
    }
    
    // Die ISR erzeugt die 36kHz-Trägerfrequenz und "lauscht" gleichzeitig am TXD-Pin
    // um die seriellen Daten auf die Trägerfrequenz zu mischen.
    
    ISR (TIMER2_COMP_vect)
    {
    	static uint8_t status=0;
       if(PIND & 2) // Der TSOP invertiert die empfangenen Daten!
    	{
    	   LineLEDs_off;
    	}
    	else
       {
    		if(status)
    		{
    			LineLEDs_on; status=0;
    		}
    		else
    		{
    			LineLEDs_off; status=1;
    		}
    	}
    	static uint16_t count=1;
    	if(count>servo) PORTC &= ~(1<<PC3); else PORTC |= (1<<PC3);
    	if(count<1440) count++; else {count=1; if(p) p--;};
    }
    void ir_init(void)
    {
     	#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
    
    	TCCR2 = (1 << WGM21) | (1 << CS20); // CTC-Mode, no prescaling, no OC2-PIN!
    	OCR2  = 208; // 36kHz @15MHz
    	TIMSK |= (1 << OCIE2);
    
    	DDRB |= (1<<PB4); // LineLED ist ein Ausgang
    	LineLEDs_on; 		// LineLED schaltet gegen GND!
    	DDRD |= 2;  	 	// TXD Ausgang und low
    	PORTD &= ~2;
    	sei();
    }
    void writeChar(uint8_t data ) // Code aus ATMega16-Datenblatt
    {
    	while ( !( UCSRA & (1<<UDRE)) );
    	UDR = data;
    }
    void writeString(char *string)
    {
    	while(*string)
    		writeChar(*string++);
    }
    void writeInteger(int16_t number, uint8_t base)
    {
    	char buffer[17];
    	itoa(number, &buffer[0], base);
    	writeString(&buffer[0]);
    }
    void motorDir(uint8_t dir_left, uint8_t dir_right)
    {
    	if(dir_left)  PORTD |= (1<<DIR_L); else PORTD &= ~(1<<DIR_L);
    	if(dir_right) PORTD &= ~(1<<DIR_R); else PORTD |= (1<<DIR_R);
    }
    void motorSpeed(uint8_t speed_left, uint8_t speed_right)
    {
    	if(speed_left)  PORTD &= ~(1<<PWM_L); else PORTD |= (1<<PWM_L);
    	if(speed_right) PORTD &= ~(1<<PWM_R); else PORTD |= (1<<PWM_R);
    }
    Obwohl ich inzwischen je eines der Löcher für die Fühlerlagerung auf 1,4mm aufgebohrt habe, klicken die Taster immer noch nicht richtig satt. Dafür reicht jetzt aber die Rückstellkraft von SW3 nicht mehr aus um den Fühler zurückzudrücken.

    Gruß

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

  6. #46
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.653
    Hi, mic, hallo alle,

    Zitat Zitat von radbruch
    ... Obwohl ... Löcher für die Fühlerlagerung ... aufgebohrt ... klicken die Taster immer noch nicht ...
    Meine Montage habe ich ja schon beschrieben : Silberdraht NICHT festgelötet und einen halben (halbe Dicke) Papierstreifen Luft. Kabelbinder und Schrumpfschlauch stossen mit ihren Enden nicht an der benachbarten Struktur an. Das läuft sehr leichtgängig. Durch dieses Vorgehen sind die Toleranzen der Aufhängung voll auszuschöpfen. Die geringe Auslösekraft ist im Link genannt.

    ................Bild hier  
    ................Detail in höherer Auflösung ist im Bild verlinkt. Der Papierstreifen
    ................ist nur für die Aufnahme eingelegt um zu zeigen, dass der Spalt
    ................DÜNNER ist als ein 80g-Papier (=ca. 0,15mm) , etwa halb so dünn.
    ................Alufolie ist üblicherweise 0,05 mm.

    Meine Bee ist übrigens eine "sie" - das ist an den weißen, kurzen Fühlern zu erkennen. Mit meinen Softwareerkenntnissen hechel ich ein bisschen hinter euch her *schnief*.

    Zu den Achsen: Meine Reibungsprobleme speziell bei einer Getriebeseite habe ich mit großer Sicherheit auf die Paarung: Bohrung und Achsenende zurückgeführt. Die Bohrungen sind lasergeschnitten - da stehen (bei 200facher Vergrößerung) die Glasfaserabschnitte leider gelegentlich heraus und die Oberfläche ist leicht bröselig von Harzpartikeln. Die Achsenenden meiner Bee sind sauber abgerundet ABER leider ist zwischen Abrundung und Achsenschaft eine s..scharfe Kante an allen Achsenenden. Mit dieser Kante kann - (vermutlich wird - ) egal wie vorsichtig die Achsen in die Lagerbohrungen geschoben werden - Material von der Lagerwand abgeschabt werden. Diese Partikel führen zu Problemen. Abhilfe habe ich erzielt durch Abrunden der Achsenden (Kante schleifen mit 240er ! Korn) sowie Abrunden und Glattschleifen der Lagerbohrungen: einen 1cm-breiten Streifen Schmirgelpapier Korn 1000 rollen und in die Bohrung stecken, drehen und ein bisschen durchziehen. Ich habe KEIN Schmiermittel verwendet. Ich fürchte, dass durch Schmiermittel zusammen mit den Restpartikeln an den Schnittkanten eine Schleifpaste erzeugt wird, die Probleme machen könnte.
    Geändert von oberallgeier (16.11.2017 um 08:15 Uhr)
    Ciao sagt der JoeamBerg

  7. #47
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    57
    Beiträge
    847
    Zitat Zitat von oberallgeier
    Meine Bee ist übrigens eine "sie" - das ist an den weißen, kurzen Fühlern zu erkennen.
    Dann könnten wir unsere Bees (meine hat schwarze Fühler = Männchen?) zusammenbringen und einen Bienenvolk gründen.


  8. #48
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.11.2009
    Alter
    30
    Beiträge
    474
    Blog-Einträge
    4
    Hallo,
    ich möchte mir so einen Einsteiger Bausatz kaufen, schwanke aber noch zwischen dem Asuro und der NIBObee.
    Welchen würdet ihr empfehlen?
    Löten und so kann ich sehr gut mir mangelts eher an den sprachkenntnissen
    Lg Sebastian

  9. #49
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo Sebastian,

    willkommen im RN-Forum.

    Die zusätzlichen Beinchen des 40-Pinners sind meiner Meinung nach der ausschlaggebende Faktor. Deshalb empfehle ich Nibobee.

    Gruß

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

  10. #50
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.653
    Hi Sebastian,
    herzlich willkommen.
    Zitat Zitat von Sebas
    ... mir mangelts eher an den sprachkenntnissen ...
    Dafür gibt es zum NIBObee gleich einen hübschen Download - und wer es garnicht erwarten kann, findet gleich eine Handvoll fertig übersetzter Programme, mit denen das Bienchen gleich loslegt. Ich war vom Bienchen schon begeistert, als ich die Beschreibung gelesen hatte - und bin es immer noch.
    Ciao sagt der JoeamBerg

Seite 5 von 8 ErsteErste ... 34567 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen