| Autor |
Nachricht |
m.a.r.v.i.n
Roboter Genie


Anmeldungsdatum: 24.07.2005
Beiträge: 1073
Wohnort: Berlin

|
Hallo NIBObee Fans,
in diesem Thread geht es um Erweiterungen rund um den NIBObee Roboter.
Ich mache mal den Anfang und stelle ein I2C LCD Modul vor. Das Display war eigentlich für ein anderes Projekt bestimmt, ließ sich aber recht einfach für den NIBbee anpassen.
Das Display ist ein EA DOGM163-A 3x16 Zeichen Display. Angesteuert kann es über SPI oder im 4-Bit oder 8-Bit Parallelmode. Durch einen I2C Portexpander Chip PCF8574 kann es auch im 4-Bit Mode über I2C angesteuert werden. Am NIBObee liegt am Port X4 die I2C Schnittstelle und 5V Spannungsversorgung an.
Weitere Bilder gibt es auf Flickr
Ein Video gibt es auch:
http://www.youtube.com/watch?v=gih_0ag8Mng
Fragen hierzu kann ich leider erst morgen beantworten. Dann werde ich auch Schaltpläne und den Sourcecode veröffentlichen. |
_________________ Gruß m.a.r.v.i.n
Homepages:
http://www.asurowiki.de
http://www.robotfreak.de/blog |
|
|
 |
m.a.r.v.i.n
Roboter Genie


Anmeldungsdatum: 24.07.2005
Beiträge: 1073
Wohnort: Berlin

|
Hallo,
wie versprochen (mit einiger Verspätung) Schaltplan und Sourcecode für das I2C LCD.
Schaltung:
Die Schaltung ist etwas komplexer,alssie sein müßte. Ich wollte mir aber bei dem Display alle Möglcihkeiten offenhalten, deshalb sind Anschlüsse für 4-Bit, SPI und I2C Mode vorhanden. Zudem gibt es noch ein paar Jumper um zwischen den verschiedenen Modi umschalten zu können. Es kann natürlich auch ein anderes LCD Modul verwendet werden. Die Initialisierung müßte dann angepasst werden.
Software:
Die Software besteht aus den I2C Routinen (hier wurden einfach die I2C Routinen vom Nibo2 benutzt) und den LCD Funktionen (Basierend auf der Arduino ChrystalDisplay Lib). Das ganze wurde als extra Lib gepackt und die makefiles entsprechend angepasst. Das Testbeispiel beruht auf dem NIBObee SelbstTest, erweitert um die LCD Ausgabe der Linien und Odometrie Sensoren.
Edit:
Achtung!!! Aus gegebenen Anlass eine Warnung für den Nachbau. Da das I2C LCD Modul ursprünglich für ein anderes Projekt vorgesehen war, stimmt die I2C Steckerbelegung nicht mit dem NIBObee Steckverbinder überein. VCC und GND sind vertauscht! Attachment wurde aktualisiert. |
_________________ Gruß m.a.r.v.i.n
Homepages:
http://www.asurowiki.de
http://www.robotfreak.de/blog
Zuletzt bearbeitet von m.a.r.v.i.n am 06.12.2009, 22:16, insgesamt 3 Male bearbeitet |
|
|
 |
pinsel120866

Anmeldungsdatum: 18.12.2007
Beiträge: 656
Wohnort: Hohenems

|
Hallo m.a.r.v.i.n,
Wieder mal ein feines Projekt, das du da gemacht hast!
Würde es dir etwas ausmachen, noch eine Stückliste anzugeben? Wäre nett!
Noch eine Frage: Wie sieht der Schaltplan aus, wenn ich das Display nur via I2C (ohne SPI, Jumper, usw.) an der Bee betreiben will?
Oder anders gefragt - wenn ich die Platine lt. Schaltplan mache, welche Jumper muss ich für I2C schliessen?
Danke für die Infos. |
_________________ Gruß Pinsel
http://de.wikipedia.org/wiki/Robotergesetze |
|
|
 |
m.a.r.v.i.n
Roboter Genie


Anmeldungsdatum: 24.07.2005
Beiträge: 1073
Wohnort: Berlin

|
Hallo Pinsel,
hiere zunächst mal die Stückliste als Reichelt Warenkorb.
Der PCF8591 von Conrad ist ein I2C A/D Wandler. Der ist hier nicht zu gebrauchen.
Zu erwähnen wäre noch, dass 2 x 10kOhm Widerstände als I2C PullUps notwendig sind. Die habe ich auf die NIBObee Platine gepackt. In der Stückliste sind jeweils 2 SMD und 2 Kohleschicht Widerstände mit dabei.
Leider gibt es bei Reichelt zur Zeit das von mir verwendete DOGM163W nicht, deshalb steht das DOGM162W in der Stückliste. Dieses hat nur 2x16 Zeichen. Bei Verwendung eines anderen Displays ist u.U. ein anderes Backlight und damit evtl andere Vorwiderstände nötig. Einige DOGM sind z.B. ohne Backlight gar nicht verwendbar. Im Zweifelsfall hilft ein Blick ins Datenblatt.
Bei Verwendung eines anderen LCDs als das hier verwendete DOGM ist zudem ein Kontrastregler (5-10kOhm Trimmer) notwendig.
Ein ähnlicher Schaltplan ohne SPI und Jumper wurde von mir schon mal für den Asuro verwendet (allerdings mit etwas anderer Belegung der Steuerleitungen).
2 Jumper müssen für den I2C Mode gesteckt werden, CSB auf GND und PSB auf 5V.
Der 3. Jumper ist für das Backlight (an/aus/Software). Ich sehe gerade, der fehlt komplett im Schaltplan.  |
_________________ Gruß m.a.r.v.i.n
Homepages:
http://www.asurowiki.de
http://www.robotfreak.de/blog |
|
|
 |
pinsel120866

Anmeldungsdatum: 18.12.2007
Beiträge: 656
Wohnort: Hohenems

|
|
|
 |
m.a.r.v.i.n
Roboter Genie


Anmeldungsdatum: 24.07.2005
Beiträge: 1073
Wohnort: Berlin

|
|
|
 |
pinsel120866

Anmeldungsdatum: 18.12.2007
Beiträge: 656
Wohnort: Hohenems

|
Super, danke für deine Bemühungen!
Noch eine letzte Bitte - Wie bzw wo hast du die I2C-Pullup-Widerstände angebracht? Könntest du ev. ein Foto posten?
Jetzt muss ich mir nur noch ein PCF8574P organisieren, Conrad hat die leider nicht im Sortiment und bei Reichelt brauche ich 150€, sonst versenden die nicht nach Österreich.
Schönen Tag! |
_________________ Gruß Pinsel
http://de.wikipedia.org/wiki/Robotergesetze |
|
|
 |
pinsel120866

Anmeldungsdatum: 18.12.2007
Beiträge: 656
Wohnort: Hohenems

|
|
|
 |
m.a.r.v.i.n
Roboter Genie


Anmeldungsdatum: 24.07.2005
Beiträge: 1073
Wohnort: Berlin

|
Hallo pinsel,
so sehen dieI2C PullUps bei mir aus. 2 x 10kOhm SMD Widerstände an Port X4 gegen VCC.
SRF05 ist auch nicht schlecht. Vielleicht den Sensor noch auf auf einen kleinen Servo montiert und man hätte ein Front Sonar |
_________________ Gruß m.a.r.v.i.n
Homepages:
http://www.asurowiki.de
http://www.robotfreak.de/blog |
|
|
 |
radbruch

Anmeldungsdatum: 27.12.2006
Beiträge: 3834
Wohnort: Stuttgart Alter: 47

|
Hallo
Die vielen freien Ports sind echt klasse, die AAAs dagegen eher nicht. Ein kleiner Vorgucker:
http://www.youtube.com/watch?v=uwCx0GrFykU
(Orginales 8MB-AVI)
Schönes WE
Gruß
mic |
_________________
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life! |
|
|
 |
m.a.r.v.i.n
Roboter Genie


Anmeldungsdatum: 24.07.2005
Beiträge: 1073
Wohnort: Berlin

|
Hallo mic,
cool, ein Rotor Display.
Und endlich mal eine sinnvolle Anwendung für die Plexiglaskuppel. Als Fingerkuppenabhackschutz
Da drängen sich mir direkt ein paar Fragen auf:
* Wie werden die LEDs mit Strom versorgt, Schleifkontakte oder eigene Stromversorgung die mitrotiert?
* gibt es eine Datenschnittstelle zur NIBObee über IR oder so etwas?
* Wie werden die LEDs mit dem Motor synchronisiert? |
_________________ Gruß m.a.r.v.i.n
Homepages:
http://www.asurowiki.de
http://www.robotfreak.de/blog |
|
|
 |
radbruch

Anmeldungsdatum: 27.12.2006
Beiträge: 3834
Wohnort: Stuttgart Alter: 47

|
Hallo
Jepp, das soll ein Rotordisplay werden. Das wollte ich schon immer mal bauen:) Die Grundlagen hatte ich mir schon erarbeitet (Laser-Projektor, Charlieplexing) und nun möchte ich das mit dem schwenkbaren Sharp kombinieren: http://www.youtube.com/watch?v=mR2mYKt9X94
Auf dem Rotor befinden sich nur die zwölf LEDs mit ihren Vorwiderständen und ein Auswuchtgewicht. Über vier Schleifringe (die Herstellung ist geheim weil peinlich) sind sie direkt mit den Kontrollerpins verbunden. Eine (IR-)Verbindung zum PC gibt es im Moment nur von der Biene zum PC, eine Synchronikation mit der Rotorlage findet noch nicht statt. Das ist aber alles in Planung ;)
Gruß
mic |
_________________
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life! |
|
|
 |
m.a.r.v.i.n
Roboter Genie


Anmeldungsdatum: 24.07.2005
Beiträge: 1073
Wohnort: Berlin

|
Hallo NIBObee Fans,
der Speicher des ATmega16 könnte bei größeren Programmen schonmal eng werden.Klar könnte man ohne weitere auch einen ATmega32 verwenden, der ist Pin und Sourcecode kompatibel.
Es gibt aber auch die moderneren Prozessoren wiedem ATmega164, 324, 644. Diese sind zwar pin, aber nicht ganz Sourcecode kompatibel. Die Änderungen an der NIBObee Lib halten sich aber in Grenzen.
Anbei sind die geänderten Files beigefügt, damit man die NIBObee Lib auch mit den ATmegaxx4 Prozessoren verwenden kann. Ausprobiert habe ich das ganze mit einem ATmega644.
Zum Übersetzen der Lib oder eines Programmes kann man einfach ein anderes Device angeben:
make DEVICE=atmega644
Edit: Dateianhang wurde aktualisiert. Jetzt wird auch der ATmega644p unterstützt. |
_________________ Gruß m.a.r.v.i.n
Homepages:
http://www.asurowiki.de
http://www.robotfreak.de/blog
Zuletzt bearbeitet von m.a.r.v.i.n am 04.12.2009, 20:12, insgesamt 2 Male bearbeitet |
|
|
 |
oberallgeier
Robotik Einstein


Anmeldungsdatum: 01.09.2007
Beiträge: 3946
Wohnort: Oberallgäu

|
| m.a.r.v.i.n hat folgendes geschrieben:: |
| ... der Speicher des ATmega16 könnte bei größeren Programmen schonmal eng werden ... |
Das hatten ja die bei nicai auch so gesehen . |
_________________
Ciao sagt der JoeamBerg |
|
|
 |
pinsel120866

Anmeldungsdatum: 18.12.2007
Beiträge: 656
Wohnort: Hohenems

|
Hallo m.a.r.v.i.n,
ich habe versucht deine I2C-Lib in die LIB der NIBOBee einzubinden und kriege beim Übersetzen eine Latte von Fehlern:
Build started 7.12.2009 at 12:39:52
avr-gcc -mmcu=atmega16 NibobeeTest.o -L"C:\Program Files\NIBObeeLib\lib" -lnibobee_line -lnibobee_utils -lnibobee_base -o NibobeeTest.elf
NibobeeTest.o: In function `print_hex':
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:38: undefined reference to `usart_putchar'
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:39: undefined reference to `usart_putchar'
NibobeeTest.o: In function `main':
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:47: undefined reference to `usart_setbaudrate'
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:48: undefined reference to `usart_enable'
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:54: undefined reference to `i2c_init'
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:55: undefined reference to `lcd_init'
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:56: undefined reference to `lcd_setBacklight'
NibobeeTest.o: In function `usart_txempty':
C:\Users\HP\Documents\NibobeeTest\..\..\..\..\Program Files\NIBObeeLib\include/nibobee/usart.h:102: undefined reference to `usart_txbuf_begin'
C:\Users\HP\Documents\NibobeeTest\..\..\..\..\Program Files\NIBObeeLib\include/nibobee/usart.h:102: undefined reference to `usart_txbuf_end'
NibobeeTest.o: In function `main':
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:97: undefined reference to `usart_putchar'
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:99: undefined reference to `usart_putchar'
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:101: undefined reference to `usart_putchar'
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:102: undefined reference to `usart_putchar'
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:135: undefined reference to `lcd_setCursor'
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:140: undefined reference to `lcd_setCursor'
make: *** [NibobeeTest.elf] Error 1
Build failed with 15 errors and 0 warnings...
Was habe ich vergessen? |
_________________ Gruß Pinsel
http://de.wikipedia.org/wiki/Robotergesetze |
|
|
 |
m.a.r.v.i.n
Roboter Genie


Anmeldungsdatum: 24.07.2005
Beiträge: 1073
Wohnort: Berlin

|
|
|
 |
pinsel120866

Anmeldungsdatum: 18.12.2007
Beiträge: 656
Wohnort: Hohenems

|
Vielen Dank m.a.r.v.i.n, jetzt hat es geklappt.
Noch eine Frage zur Ausgabe der Daten via RS232:
Beim Übersetzen von folgendem (Codeschnipsel):
lcd_setCursor(0,1);
printf("L: %3x %3x %3x ", rval,cval,lval);
writeString("Liniensensoren: ");
writeInteger(rval);
writeInteger(cval);
writeInteger(lval);
odoL += odometry_getLeft(1);
odoR += odometry_getRight(1);
lcd_setCursor(0,2);
printf("O: %4d %4d", odoR,odoL);
writeString("Odometriesensoren: ");
writeInteger(odoR);
writeInteger(odoL);
_delay_ms(500);
schimpft er mit:
Build started 7.12.2009 at 17:24:18
avr-gcc -I"C:\Users\HP\Documents\NibobeeTest\..\..\..\..\Program Files\NIBObeeLib\include" -mmcu=atmega16 -Wall -gdwarf-2 -std=gnu99 -D_NIBOBEE_ -DF_CPU=15000000UL -Os -fsigned-char -MD -MP -MT NibobeeTest.o -MF dep/NibobeeTest.o.d -c ../Nib
obeeTest.c
../NibobeeTest.c: In function 'writeInteger':
../NibobeeTest.c:53: warning: implicit declaration of function 'itoa'
../NibobeeTest.c: In function 'main':
../NibobeeTest.c:220: error: too few arguments to function 'writeInteger'
../NibobeeTest.c:221: error: too few arguments to function 'writeInteger'
../NibobeeTest.c:222: error: too few arguments to function 'writeInteger'
../NibobeeTest.c:229: error: too few arguments to function 'writeInteger'
../NibobeeTest.c:230: error: too few arguments to function 'writeInteger'
../NibobeeTest.c:112: warning: unused variable 'speed_r'
../NibobeeTest.c:111: warning: unused variable 'speed_l'
make: *** [NibobeeTest.o] Error 1
Build failed with 5 errors and 3 warnings...
Was ist hier wieder falsch von mir?
P.S. Danke an m.a.r.v.i.n! Anbei ein Foto meiner Bee mit LCD-Display |
_________________ Gruß Pinsel
http://de.wikipedia.org/wiki/Robotergesetze |
|
|
 |
m.a.r.v.i.n
Roboter Genie


Anmeldungsdatum: 24.07.2005
Beiträge: 1073
Wohnort: Berlin

|
Hallo Pinsel,
sieht toll aus, deine Biene. Schön, das es doch noch noch funktioniert hat.
Zu den Fehlermeldungen. Der Funktion writeInteger werden zuwenig Parameter übergeben. Wo ist denn diese Funktion? Zur NIBObee lib gehört sie zumindest nicht. |
_________________ Gruß m.a.r.v.i.n
Homepages:
http://www.asurowiki.de
http://www.robotfreak.de/blog |
|
|
 |
pinsel120866

Anmeldungsdatum: 18.12.2007
Beiträge: 656
Wohnort: Hohenems

|
OK, danke.
Diese Funktionen (von Radbruch übernommen) stehen zur Auswahl:
void writeChar(uint8_t data )
{
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]);
}
Welcher Parameter fehlt hier? |
_________________ Gruß Pinsel
http://de.wikipedia.org/wiki/Robotergesetze |
|
|
 |
radbruch

Anmeldungsdatum: 27.12.2006
Beiträge: 3834
Wohnort: Stuttgart Alter: 47

|
writeInteger(odoR);
writeInteger(odoL);
Die Zahlenbasis fehlt. Das writeInteger() erwartet als zweiten Parameter die Basis des Zahlensystems: 2, 10, 16...
Diese drei Funktionen reichen für eine einfache blockierende Kommunikation. Die nibobee-Lib bietet zusätzlich noch gepuffertes Senden und Empfangen, das ist aber entsprechend kompliziert...
btw. habe ich nun eine bessere Anwendung des asuro-IR-Transceivers in Betrieb:
http://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=473845#473845
Gruß
mic |
_________________
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life! |
|
|
 |
pinsel120866

Anmeldungsdatum: 18.12.2007
Beiträge: 656
Wohnort: Hohenems

|
Hallo Zusammen,
ich möchte ans Bee-Port X3 einen Miniservo anschliessen, um ein Front-Sonar mit meinem SRF05 zu machen.
Dazu müsste es doch möglich sein, den Servostecker direkt anzustecken, natürlich muss ich vorher plus und minus beim Servostecker vertauschen - was meint ihr?
Bitte kurz um Hilfe ob das geht, ich will meinen einzigen Miniservo nicht schrotten...  |
_________________ Gruß Pinsel
http://de.wikipedia.org/wiki/Robotergesetze |
|
|
 |
Virus
Roboter Experte


Anmeldungsdatum: 15.09.2009
Beiträge: 524
Wohnort: Duisburg Alter: 15

|
welchen stecker hat der miniservo? JR oder FUTABA?
für experimente gibst beim großen C einen miniservo für 5euro oder so. Da ist der Verlust verschmerzbar :^) |
_________________ Mit hochohmigen Grüßen
Virus
Es lebe der Digitalkäse ! |
|
|
 |
|
|
|
|