PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : NIBOLIB V2.7 - uart1 Probleme



Hero_123
02.11.2010, 23:32
Hallo

Hat schon jemand mal beim NIBO2 den UART1 als RS232 benutzt? Da gibt es zwar Funktionen wie z.B uart1_set_baudrate(uint16_t baud), uart1_enable() usw in der NIBOLIB V2.7 - wie um alles in der Welt projektiere ich die Anzahl der Datenbits (8 Bit, no parity, 1 Stoppbit)????

Ich versuche seit Tagen verzweifelt,den UART1 (hängt ja am PORTD) zum laufen zu bringen (38400 Baud, 8 Datenbit,no parity, 1 Stoppbit), aber das verd** Ding macht keinen Mucks. An den Pins 8 und 10 des Steckers X6 habe ich RXD und TXD angeschlossen, die 5V und GND habe ich auch korrekt angeschlossen -ich will mit einem XBEE Modul Daten an den PC senden. Die XBEE-Kommunikation mit einem ATmega8 fkt problemlos, da habe ich Daten zwischen PC und ATmega8 ausgetauscht -> an den Xbee Modulen kann es also nicht liegen.

NB - habe natürlich auch schon RXD und TXD von PORTD getauscht, war aber trotzdem erfolglos.

Ich bekomme nicht einmal Sendesignale (beim Xbee ist eine Anzeige DIN, die blinkt, wenn vom Prozessor Daten geschickt werden); ich habe auch mal das file "AvoidRC.c" der NIBOLIB 2.8 getestet (dieses file ist außerdem fehlerbehaftet - da sollte nicht vorkommen!!) aber das ging natürlich auch nicht.

Generell ist die Doku der Lib "etwas dürftig", um es mal gelinde zu sagen.

mfg

Hero_123

shedepe
03.11.2010, 12:18
Initialisier den UART1 des Atmega128 halt gleich wie im Datenblatt beschrieben (In der Hoffnung dass nichts aus der Lib dem in die Quere kommt)

Hero_123
03.11.2010, 23:44
Ja, wird mir wohl nichts anderes übrig bleiben...

shedepe
04.11.2010, 13:39
So schwierig ist das gar nicht. Man ist nur auf den ersten Blick von dem Datenblatt ganz erschlagen. Aber wenn man sich erst mal damit beschäftigt hat wird es alles ganz logisch. Bei Problemen kannst du ja immer noch hier nachfragen.

Hero_123
05.11.2010, 23:14
Hi

habe es jetzt so wie vorgeschlagen gemacht - den USART1 gemäß ATmega128 Beschreibung initialisiert, lese Kommandos vom PC mittels Interrupt ein und gib sie zyklisch (timergesteuert - selbst definiert (!) - alle 500ms) wieder per HTerm auf dem PC aus - es funktioniert also (38400 Baud, 8 Datenbit, no parity, 1 Stoppbit).

Schade ist nur, daß man die NiboLib nicht verwenden kann (oder ich bin einfach zu unfähig) - ein user, der nicht so fit ist in der englischen Sprache, kann da schon seine Probleme haben, wenn er SELBST den USART deklarieren soll...

naja, ist sowieso besser, wenn man sich seine eigenen Fkt schreibt; der Lerneffekt ist da wesentlich grösser...

Hero_123

workwind
08.11.2010, 18:02
Hier ein Beispiel für die uart1 Routinen aus der NIBOlib:


uart1_set_baudrate(38400); // immer 8N1
uart1_enable();
sei();

while (1) {
if (!uart1_rx_empty() && !uart1_txfull()) {
// wenn Empfangspuffer nicht leer und Sendepuffer nicht voll
char c = uart1_get_char(); // Zeichen holen
uart1_put_char(c); // und zurückschicken
}
}

Hero_123
08.11.2010, 21:17
NIBOLIB - Woher weiß ich, daß es immer 8N1 ist? Das steht nicht in der Doku (Habs jedenfalls nicht gefunden, weder in den *.c-files noch in den header-files).
Was ist, wenn ich eine andere Parametrierung will (z.B. O2)? Ich kann zwar die Baudrate einstellen, mehr aber nicht.
NIBOLIB V2.8 - versuch mal, das "AvoidRC.c" zu compilen...(-> #define STATE_TURNLEFT 3AvoidRC.o)...

mfg

Hero_123

workwind
09.11.2010, 17:01
Die USART des ATmega128 ist nach dem Reset per Default auf 8N1 eingestellt. Eine andere Einstellung mach bei Verwendung der Bibliothek wenig Sinn, da von den Routinen keine Parity Fehler geprüft werden und das Datenformat fix auf 8 Bit ausgerichtet ist. Die einzige sinnvolle Einstellmöglichkeit (bei Verwendung der Bibliothek) sind 2 Stop-Bits. Das ist möglich wenn man das USBSn Bit im UCSRnC Register setzt.

Hero_123
09.11.2010, 21:53
Hi workwind

Es wäre hilfreich, wenn diese Info in der Doku der lib stünde; viellecht kann man das in die nächsten NIBOLIB ja einfließen lassen


Jedenfalls Danke für den Hinweis

mfg

Hero_123

HJBB49
01.12.2010, 22:01
Nach längerer Zeit habe ich mich mal wieder dem NIBO2 zugewandt.
Ich versuche Daten per UART1 an meinen PC zu senden.
Funktioniert jedoch nicht.

Nibo2 Test UART1:

AVR Studio 4.18
WinAVR - 20100110
NiboLib 2.8


PC-Terminal -> MAX 232 -> X6/10 (RXD1) sendet im Loop 1 Zeichen (mit 10 msec Verzögerung)

X6/8 (TXD1) kommt jedoch nichts an

gemessen mit Oszi.

Kompilierung ok

Code:

....
int main()
{
// Initialisierung
sei();
bot_init();
spi_init();
// floor_init();
display_init();
// leds_init();
// pwm_init();
gfx_init();

// Initialize serial interface (RS232)
#ifdef USE_UART
uart1_set_baudrate(9600);
uart1_enable();
#endif

// Operation loop
while (1)
{
if (!uart1_rxempty() && !uart1_txfull())
{
// wenn Empfangspuffer nicht leer und Sendepuffer nicht voll
char c = uart1_getchar(); // Zeichen holen
uart1_putchar(c); // und zurückschicken
}
}

return 0;
}

Hero_123
01.12.2010, 22:15
Hi

mußte da nicht auch GND angeschlossen werden?

mfg

Hero_123

Hero_123
01.12.2010, 22:29
Hi

anbei ein file, das ich bei mir getestet habe (und es hat funktioniert)

habe auch den NIBO2

als Terminalprogramm habe ich HTerm benutzt, Du kannst mittels HTerm einen String senden, dieser wird unverzüglich wieder auf dem Terminal ausgegeben (habe es mit 2 Xbees gemacht, muß aber mittels MAX auch gehen)

mfg

Hero_123

HJBB49
02.12.2010, 08:58
@Hero_123
Vielen Dank für den Code. RS232 Kommunikation funktioniert hiermit einwandfrei.
Ich frage mich allerdings, warum die NiboLibs und HeaderDatei für UART1
von Nicai NICHT funktionieren.

Man könnte ja für jede Funktionalität ein kleines Beispiel Prog liefern, sonst ist der Frustfaktor sehr hoch. Die Dokumentation ist eher bescheiden!

mfg
hjbb49

Lisbeth2010
02.12.2010, 16:43
@Hero_123 und HjBB49: was für einen Steckertyp verwendet ihr? Ich habe den Nibo ohne Zahl und einen 10-poligen Stecker des gleichen Typs wie der 6-polige ISP. An meinem Notebook habe ich keine RS232, aber ich habe einen USB-RS232 Konverter mit -leider- SubD-Stecker. Ansonsten hab ich noch vom Asuro die IR-Schnittstelle. Könnte man die evtl. auch benutzen?
Mfg
Lisbeth2010

Hero_123
02.12.2010, 21:06
Hi

@HJBB49 - freut mich,daß es klappt. Ich hatte mich vorher auch mit der Lib (UART1-Fkt) des NIBO2 (NiboLib V2.7) herumgeärgert, dann mir selbst diese Fkt geschrieben.

@Lisbeth 2010 - Ich verwende den Wannen-Stecker X6 des NIBO2 (ist auch ein 10-PIN Stecker - siehe Schaltplan des NIBO2), davon allerdings nur
- RXD = PIN10
- TXD = PIN8
- GND = PIN2 und
- VCC =5Volt = PIN7 als Powersupply für mein XBEE

Ich habe mir einen 10-poligen Gegenstecker organisiert, den enstprechend "aufgedröselt" und angeschlossen.


IR-Schnittstelle - da habe ich keine Erfahrung damit; ich übertrage die Daten vom NIBO2 zum PC mittels 2Xbee-Modulen (Funk)
mfg

Hero_123

HJBB49
03.12.2010, 08:57
@Hero_123 und HjBB49: was für einen Steckertyp verwendet ihr? Ich habe den Nibo ohne Zahl und einen 10-poligen Stecker des gleichen Typs wie der 6-polige ISP. An meinem Notebook habe ich keine RS232, aber ich habe einen USB-RS232 Konverter mit -leider- SubD-Stecker. Ansonsten hab ich noch vom Asuro die IR-Schnittstelle. Könnte man die evtl. auch benutzen?
Mfg
Lisbeth2010

Mit USB-RS232 Konvertern habe ich leider keine Erfahrung. Mein PC hat ausreichend RS232 (COMx) Schnittstellen.
Um von RS232 (-12 / 12 V) <-> Nibo2 UARTx Daten auszutauschen benötigst Du noch einen Pegelwandler (zB MAX232).

Datenaustausch via IR: Nibo2 hat IR Empfänger (Sender)
Der IR-Empfänger funktioniert bei mir mit einer UniversalFernbedienung einwandfrei. Ersitzt jedoch sehr ungünstig. Ich habe ihn ausgelötet und auf das Grafikmodul aufgeklebt.

Nibo2 IR-TX hat bei mir nicht funktioniert (ist jedoch schon einige Zeit her, vielleicht funktioniert es mit den neuen Libs)

HJBB49
03.12.2010, 09:10
Hi

@HJBB49 - freut mich,daß es klappt. Ich hatte mich vorher auch mit der Lib (UART1-Fkt) des NIBO2 (NiboLib V2.7) herumgeärgert, dann mir selbst diese Fkt geschrieben.

@Lisbeth 2010 - Ich verwende den Wannen-Stecker X6 des NIBO2 (ist auch ein 10-PIN Stecker - siehe Schaltplan des NIBO2), davon allerdings nur
- RXD = PIN10
- TXD = PIN8
- GND = PIN2 und
- VCC =5Volt = PIN7 als Powersupply für mein XBEE

Ich habe mir einen 10-poligen Gegenstecker organisiert, den enstprechend "aufgedröselt" und angeschlossen.


IR-Schnittstelle - da habe ich keine Erfahrung damit; ich übertrage die Daten vom NIBO2 zum PC mittels 2Xbee-Modulen (Funk)
mfg

Hero_123


Hi
Ich versuche auch Telemetrie Daten per Funk zu übertragen.
Die XBee Funkmodule mit 130 Euro pro Stück sind mir jedoch zu teuer.
Ich versuche mit RFM12 Funkmodulen (Stückpreis < 10 Euro)
eine RS232 Funkstrecke aufzubauen (Hierzu gibt es ein Projekt im Forum Microcontroller Net ) Testaufbau zur Zeit auf Breadboard funktioniert einwandfrei.

Das NXB2 Modul würde mich auch interessieren (Kosten 12,90 Euro)
Warenmindestbestellwert ist jedoch 15 Euro. Da ich sonst alle Module habe weiss ich nicht was ich bei Nicai noch bestellen könnte.
Reichelt hat dieses Modul nicht im Angebot!

mfg

Hero_123
03.12.2010, 20:22
Hi

ich habe mir von watterott (www.watterrott.com) folgendes bestellt:
- 2 Xbee-Module (je 25 Euro)
- 1 Xbee Explorer USB (ca 20 Euro, für den USB Anschluß am PC)
- 1 Xbee Explorer Regulated (ca 9 Euro für den Anschluß am NIBO2)

bei embedded projects habe ich mir ein 10-adriges Steckerset für den Stecker X6 (NIBO2) gekauft

Summe also ca 85 Euro.

Das mit dem NXB2 Modul habe ich erst später gesehen...es hängt am ISP-Stecker -> bei jedem Programmieren des NIBO2 muß dieser Stecker abgezogen und auf den ucom-ir gesteckt werden..naja, wer das mag..., verwendet wird offensichtlich der UART0 (Port E, PIN0 = PE0 =RXD und PIN1 = PE1 = TXD)..leider ist die Beschreibung ausbaufähig (welche Fkt haben die 2 LED und die 2 Jumper?)

Andererseits nehme ich mir mit meiner Lösung die Möglichkeit, dieses NDS3 anzuschliessen (macht aber nichts, da ich nicht vorhabe, es anzuschliessen, da es lt WIKI 2(!!) sek für einen -90° - +90° scan benötigt und die Distanzmessung von 10 cm - 80 cm wirkt)

mfg

Hero_123