PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : usrbus



robob
01.03.2008, 07:59
hi
ich hab die experementierplatine an rp6 angeschlossen über usrbus2! so nun will ich eine led daraufgesteckt bei den y1,y2,y3... löchern! wo genau muss ich die anschließen und wie kann ich sie dann ein/ausschalten?

robob
01.03.2008, 08:05
da hab ich die led bei y1 und y2 angeschlossen
http://robhoster.ro.funpic.de/rp6bild2.jpg

robob
01.03.2008, 08:06
das datum unten rechts ist natürlich falsch ;-)

robob
01.03.2008, 08:41
oder ist es besser wenn ich die led da anschließe,am xbus2: http://robhoster.ro.funpic.de/rp6bild5.JPG

wenn ich dann rp6 anschalte dann geht die led an! aber ich will es ja so programieren dass wenn robby das signal gibt "an" dann geht sie an und wenn er sagt "aus" dann geht es aus![/img]

Dirk
01.03.2008, 08:47
Hallo robob,

das war hier schon in vielen Posts ein Thema. Geh 'mal auf die Suche!

Den USRBUS kannst du belegen, wie du willst.
Ein Vorschlag:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=32549
So, wie er da ist, ist das nur eine steckbare Kabelverbindung zwischen RP6, M32 und einer Experimentierplatine (EXP).

Auf dem RP6 gibt es die "Löcher" Y1..Y14, genauso auch auf der EXP und auch auf der M32.

Wenn du auf der EXP eine LED an Y1 und Y2 anschliessen willst, kannst du das so machen, wie dein Foto zeigt (natürlich mit Vorwiderstand!).
Wenn die aber auch leuchten soll, must du auf dem RP6 auch die "Löcher" Y1 und Y2 belegen (d.h. da was dranlöten). Im Fall der LED würde das z.B. GND und +5V (VDD) sein, wenn die LED dauernd leuchten soll.
Auf dem RP6 müßtest du also z.B. Y1 mit GND und Y2 mit +5V verbinden. Dann hättest du auf der EXP dieselbe Belegung für deine LED.

Wahrscheinlich willst du ja aber die LED auch ein-/ausschalten. Dafür brauchst du ja einen freien Port des RP6. 3 nutzbare Ports werden schon über den XBUS auf die EXP geführt.
Damit könntest du also deine LED-Versuche besser erst 'mal am XBUS machen.
Wie man da LEDs anschliessen kann, gabs schon hier ...
https://www.roboternetz.de/phpBB2/viewtopic.php?t=37696
Du hattest auch schon 'mal selbst nach Anschlußmöglichkeiten gefragt,- wurde hier ...
https://www.roboternetz.de/phpBB2/viewtopic.php?t=37740
... beantwortet.

Gruß Dirk

Dirk
01.03.2008, 11:30
Hallo robob,

ich habe 'mal einen Plan gemacht, wie man an den XBUS auf der Experimentierplatine 3 LEDs an den RP6 ohne Control M32 anschliessen kann.
Als LEDs würde ich je eine rote, gelbe, grüne 3mm-LED Low Current nehmen.
Da wo bei den LEDs das "K" steht ist die Kathode (= kurzer Draht der LED).
Als Vorwiderstände (R) nehme ich dreimal 1,5 kOhm.

Hier ein einfaches "Blinkprogramm" für die 3 LEDs:

/*
* ************************************************** **************************
* RP6 ROBOT SYSTEM - RP6 BASE TESTS
* ************************************************** **************************
* Test: Base Test 1
* Author(s): D. Ottensmeyer
* ************************************************** **************************
* Description:
* This is a small test for the RP6 ROBOT BASE.
*
* ################################################## ##########################
* The Robot does NOT move in this example! You can simply put it on a table
* next to your PC and you should connect it to the PC via the USB Interface!
* ################################################## ##########################
* ************************************************** **************************
*/

/************************************************** ***************************/
// Includes:

#include "RP6RobotBaseLib.h" // The RP6 Robot Base Library.
// Always needs to be included!

/************************************************** ***************************/
// Defines:


/************************************************** ***************************/
// Variables:


/************************************************** ***************************/
// Functions:


/************************************************** ***************************/
// Main function - The program starts here:

int main(void)
{
initRobotBase(); // Always call this first! The Processor will not
// work correctly otherwise.

// ---------------------------------------
// Write messages to the Serial Interface
// (here it is a RP6 text logo):
writeString_P("\n\n _______________________\n");
writeString_P(" \\| RP6 ROBOT SYSTEM |/\n");
writeString_P(" \\_-_-_-_-_-_-_-_-_-_/\n\n");

writeString_P("################\n");
writeString_P("<<RP6 Base>>\n");
writeString_P(" Base - Test 1 \n");
writeString_P(" Version 1.00 \n");
writeString_P("################\n\n");
mSleep(2500);

// Clear the four Status LEDs:
setLEDs(0b0000);

/************************************************** ***************************/
// Main test program:

DDRA |= (E_INT1); // PA4 (IT1) als Ausgang definieren
DDRC |= (SCL | SDA); // PC0, PC1 als Ausgänge definieren

while (true)
{
PORTA |= E_INT1; // PA4 high
mSleep(1000);
PORTA &= ~E_INT1; // PA4 low

PORTC |= SCL; // PC0 high
mSleep(1000);
PORTC &= ~SCL; // PC0 low

PORTC |= SDA; // PC1 high
mSleep(1000);
PORTC &= ~SDA; // PC1 low
}

/************************************************** ***************************/
// End of main:

return 0;
}

/************************************************** ****************************
* Additional info
* ************************************************** **************************
* Changelog:
* - v. 1.0 (initial release) 01.03.2008 by D. Ottensmeyer
*
* ************************************************** **************************
*/

/************************************************** ***************************/

Gruß Dirk

robob
03.03.2008, 05:31
danke! es funktionirt!! O:) O:) O:) O:) O:)

Pr0gm4n
03.03.2008, 14:20
Hi,

damit ist deine Frage aus dem anderen Thread ja auch hinfällig, oder??

also ich meine die, wo ich auf diesen Thread hier verwiesen habe...



MfG Pr0gm4n

robob
08.03.2008, 07:27
ja O:) O:) O:)

Pr0gm4n
08.03.2008, 13:27
Dann iss ja gut...


MfG Pr0gm4n

:)

KingArthur
05.01.2009, 10:03
Hallo
ich habe das auch gleich nachgebaut aber bei mir leuchtet die LED die ich an SCL angeschlössen habe garnicht erst habe ich gedacht ich habe nen zu großen wiederstand aber ich habe 5 verschiedene ausprobiert und sie leuchtet nicht vll. weiß jemand was
es sollen doch alle 3 LEDs leuchten oda habe ich da was falsch verstanden
ich habs nicht so mit schaltplänen
mfg Arthur

KingArthur
05.01.2009, 17:26
Eig. Sind die Kontakte auch korrekt angeschlossen
Mfg Arthur

Dirk
05.01.2009, 19:20
Eig. Sind die Kontakte auch korrekt angeschlossen
... und die LED sitzt auch richtig rum?

Gruß Dirk

Siedler_03
05.01.2009, 19:29
oder ist sie vllt. kaputt?

KingArthur
06.01.2009, 08:39
Eigendlich sind alle Kontakte richtigrum und die leds sind auch funktionstuechtig ich loete sie jetzt glaub ich erstmal an damit ich sicher sein kann das die Kontakte auch sitzen

Mfg Arthur

RobotMichi
06.10.2009, 15:23
Wie viel mA Aufnahmestrom haben denn die LEDs?
(würde mich nur mal interessieren)

lg
Michi

RobbyMartin
10.01.2010, 08:31
Ich habe ne dumme frage wie oder wo muss ich den text von dirk einfügen in programmers notepad

da ich aus der beschreibung von arexx nicht schlau werde :idea:

Dirk
10.01.2010, 10:05
... wo muss ich den text von dirk einfügen in programmers notepad
Für jedes eigene RP6-Programm:
1. Ein neues Verzeichnis in RP6BASE_EXAMPLES erstellen
2. make_all.bat, make_clean.bat und makefile aus einem anderen Beispiel (z.B. aus Example_01_LEDs) ins neue Verzeichnis kopieren
3. Die LED-Blinkdemo mit Copy/Paste in eine Datei namens RP6BaseLEDTest.c (o.ä. Nme) einfügen und auch diese Datei in dein neues Verzeichnis kopieren.
4. makefile öffnen und die Zeile TARGET = ... so ändern:
TARGET = RP6BaseLEDTest
5. Jetzt kannst du mit dem programmers notepad die Datei RP6BaseLEDTest.c öffnen.
6. Mit Tools -> Make All kannst du sie kompilieren und die HEX-Datei dann mit dem RP6Loader in den RP6 befördern.

Gruß Dirk

RobbyMartin
10.01.2010, 10:29
Hallo

danke erstmal für die schnelle antwort

bei 1 wo soll ich das neue verzeichis erstellen bei pn oder in dem ordner
bei2 wo soll ich ich das einfügen

sorry aber ich habe es leider noch nicht ganz verstanden

cucu
martin

RobbyMartin
10.01.2010, 10:31
okay hat sich schn erledigt trotzdem vielen dank

Kene
19.02.2010, 20:49
Für jedes eigene RP6-Programm:
1. Ein neues Verzeichnis in RP6BASE_EXAMPLES erstellen
2. make_all.bat, make_clean.bat und makefile aus einem anderen Beispiel (z.B. aus Example_01_LEDs) ins neue Verzeichnis kopieren
3. Die LED-Blinkdemo mit Copy/Paste in eine Datei namens RP6BaseLEDTest.c (o.ä. Nme) einfügen und auch diese Datei in dein neues Verzeichnis kopieren.
4. makefile öffnen und die Zeile TARGET = ... so ändern:
TARGET = RP6BaseLEDTest
5. Jetzt kannst du mit dem programmers notepad die Datei RP6BaseLEDTest.c öffnen.
6. Mit Tools -> Make All kannst du sie kompilieren und die HEX-Datei dann mit dem RP6Loader in den RP6 befördern.

Gruß Dirk



das geht nicht Dirk -.- also bei mir nich

Dirk
19.02.2010, 21:12
Das geht wunderbar! Auch bei dir!

Gruß Dirk

P.S.: Wenn nicht, must du mehr Informationen geben. Was hast du gemacht? Was genau geht nicht? usw ....

Martinius11
21.02.2010, 00:32
hi ich ahb mal das beispiel programm ausbrobiert um nur port it1 high
zu setzen aber an scl und sda liegen jetzt auch 5v an und zeitweise blinkt sl5.

ist das normal und was muss ich machen das ich nur den einen port high setze ?

Dirk
21.02.2010, 09:54
was muss ich machen das ich nur den einen port high setze ?
... am einfachsten alles weglassen, wo SDA und SCL drin vorkommt.

Gruß Dirk

Martinius11
21.02.2010, 09:59
das ist ja das kommische ich habe nur port it1 definert und auch nur port
it1 high gesetzt.


#include "RP6RobotBaseLib.h"
int main(void)
{
initRobotBase();

DDRA |= (E_INT1);



while(true)
{

PORTA |= E_INT1;
}
return 0;
}

Dirk
21.02.2010, 10:22
das ist ja das kommische ich habe nur port it1 definert und auch nur port it1 high gesetzt.
Dein Programm macht ja auch alles richtig, d.h. es setzt IT1 endlos lange und immer wieder auf High-Pegel.

Und was ist daran kommisch? Oder was erwartest du?

Gruß Dirk

Martinius11
21.02.2010, 10:30
wie ich geschrieben habe werden auch sda und scl high gesetzt und die led
sl5 blinkt zeitweise :-k

RobotMichi
21.02.2010, 10:33
Dass SL5 blinkt ist glaub ich normal, das ist bei mir auch so.

Warum allerdings SDA und SCL high gesetzt sind, weiß ich auch nicht.

lg
Michi

radbruch
21.02.2010, 10:55
Hallo

Wenn im Programm keine LED angesteuert wird, blinkt automatisch die SL5 als Anzeige, dass der RP6 noch eingeschaltet ist. Das kann man in der Lib deaktivieren, wenn es stören sollte:

// Power on LED flashing:
#ifdef POWER_ON_WARNING
if(leds_on < 3) {
if(leds_on == 2) {
if(!statusLEDs.byte) {
if(leds_on_timer++ % 200 == 0) {
if(leds_on_timer > POWER_ON_SHOW_TIME) {
DDRB &= ~SL5;
PORTB &= ~SL5;
leds_on = 0;
leds_on_timer = 0;
}
else {
DDRB ^= SL5;
PORTB ^= SL5;
}
}
}
else {
if(!statusLEDs.LED5) {
DDRB &= ~SL5;
PORTB &= ~SL5;
}
leds_on_timer = 0;
leds_on = 1;
}
}
else if(leds_on_timer > POWER_ON_WAIT_TIME) {
if(leds_on == 1) {
leds_on = 0;
if(!statusLEDs.LED5) {
DDRB &= ~SL5;
PORTB &= ~SL5;
}
}
else
leds_on = 2;
leds_on_timer = 0;
}
else
leds_on_timer++;
}
#endif
(Aus der Timer0-Comp-ISR in RP6RobotBaseLib.c)

Das Blinken kann man in der Datei RP6Config.h einstellen (so ist es ausgeschaltet):

// Power on warning:

/**
* If you don't need the flashing LED that shows that the Robot is still turned
* on - outcomment this line and the code will not be compiled anymore
* (saves some programspace and execution time):
*/
//#define POWER_ON_WARNING
//#define POWER_ON_WAIT_TIME 12000
//#define POWER_ON_SHOW_TIME 4000
(Aus der Datei RP6Config.h)

SDA und SCL sind die I2C-Pins. Um diese Pins auch ohne Ansteuerung auf einen definierten Pegel zu bringen (wichtig für das I2C-Protokoll!) sind beide über je einen PullUp-Widerstand (R32+33, je 4k7) mit Vcc verbunden. Deshalb haben die Pins auch ohne Ansteuerung durch das Programm high-Pegel.

Gruß

mic

Dirk
21.02.2010, 10:57
wie ich geschrieben habe werden auch sda und scl high gesetzt
Wenn z.B. dein Multimeter sagt, dass da an SDA und SCL etwa 5V anliegen, dann stimmt das, weil SDA und SCL primär als Eingänge geschaltet sind. Daran mißt man dann 5V.
Das heißt aber nicht, dass im Programm "auch sda und scl high gesetzt" werden.

Gruß Dirk

Martinius11
21.02.2010, 10:58
würde es funktionieren wenn ich scl sda definieren würde und immer auf low setzen würde ?

Dirk
21.02.2010, 11:11
würde es funktionieren wenn ich scl sda definieren würde und immer auf low setzen würde ?
Ja, würde es.

Bleibt die Frage: Warum willst du das eigentlich?

Gruß Dirk

Martinius11
21.02.2010, 11:23
ich bin halt auf diesen thread gestoßen und wolte es halt mal ausprobieren
und dann sind diese anomalien aufgetreten. :-s

Martinius11
21.02.2010, 14:47
eine frage hätte ich noch warum heißt es eigentlich bei it1 DRRC und bei
scl und sda DRRA ? und gibt es dazu irgentwelche listen in der rp6 anleitung seht davon ja nichts.

Dirk
21.02.2010, 15:07
Hallo Martinius11,

wenn du dir diese Tabelle (RP6_Base-Ports.pdf) ansiehst:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=32677
... dann ist E_INT1 ein Portpin auf PortA (PA4), SCL ist PC0 und SDA ist PC1 auf PortC.

Klar, warum es einmal DDRA und 2x DDRC heißt?

Gruß Dirk

RP6fahrer
11.09.2010, 12:31
Hallo!
Ich habe seit kurzem auch einen RP6. bis jetzt habe ich mich mit der Programmierung und den Beispielprogrammen ein bisschen auseinander gesetzt. Ich bin noch Anfänger in Programmierung und Elektronik, allerdings wirkt sich meine Ausbildung (Elektroniker) nur positiv dafür aus.

Da ich meinen RP6 auch so schrittweise erweitern möchte, dachte ich, ich fang erstmal auf der Experimentierplatine an.
Ich möchte gern 2 LEDs anschließen, über ADC0 und ADC1.
Ich wollte nur noch mal nachfragen, wie dass dann mit der Programmierung gemacht wird.
Ich habe schon ein bisschen gesucht und nur so stückweise was passendes geunden:
DDRA |= 1; steht dafür, dass ich ADC0 als Ausgang setze oder?
und mit PORTA |= 1; auf High Pegel
* * * * PORTA &= ~1; auf Low Pegel ??

Wie muss ich dass dann aber mit ADC1 machen?
Wäre schön, wenn mir jemand diese Frage beantworten kann.
Danke schon mal voraus.

Gruß RP6fahrer

Dirk
11.09.2010, 19:17
Wie muss ich dass dann aber mit ADC1 machen?
Glückwunsch zum RP6!

Für ADC1 müßtest du das alles mit "2" machen, also z.B. DDRA |= 2.

Allgemein haben die 8 Bits eines Bytes die Werte:
1, 2, 4, 8, 16, 32, 64, 128

Das Bit P3 irgendeines Ports hat also z.B. den Wert 8.
Willst du beide LEDs an ADC0 und ADC1 einschalten, geht das mit Addition der Werte (1+2=3), also: PORTA |= 3.

Gruß Dirk

RP6fahrer
19.09.2010, 19:36
Danke. Ich denke, ich habs kapiert.
Werds aber erst ein bisschen später ausprobieren, weil ich mich noch ein bisschen mit dem allen beschäftigen muss.