Archiv verlassen und diese Seite im Standarddesign anzeigen : Ladestation für RP6?
Hi Leute!
Wir würden gern ne Ladestation für den RP6 bauen, hatten auch schon ein paar Ideen dafür..Die Ausgangssituation ist der RP6 mit einer Kamera obendrauf und WLAN-Anbindung an einen Rechner, der die Bildverarbeitung macht und den RP6 steuert..
Die allererste Idee war, das "normale" Ladegerät, also den runden Stecker, einfach auf der richtigen Höhe festzumachen und den RP6 hinfahren zu lassen. Allerdings glaube ich nicht, dass man die nötige Präzision rauskitzeln kann, um den RP6 wirklich zielgenau "einzustecken".
Die zweite Idee war dann eine Art Rampe, in die er reinfährt, bei der die Spuren für die Ketten anfangs breit sind, sich zum Ladegerät hin aber verjüngen, sodass er in eine feste Spur gezwungen wird.
Die dritte Idee war, ihm zwei Fühler zu verpassen, und in einem Bereich von ca 10-20cm Drähte für + und - vom Ladegerät auf verschiedenen Höhen zu spannen, an die er einfach dranfahren muss.
Einer von diesen Entwürfen wirds wohl werden..Leider haben wir noch keine Idee, wie wir es schaffen könnten, den Kleinen in den Lademodus zu versetzen, wenn er da ist, und entsprechend wieder "aufzuwecken", wenn er aufgeladen ist. Hat jemand schonmal sowas gemacht ?
Ansätze wären einmal, sich halt _auf_ dem RP6 was mit nem miniservo zu bauen, der den schalter umlegt, sobald strom auf dem netzstecker ist, und ihn dann wieder auf ON stellt, wenn das Ladegerät abschaltet..Bin mir nicht sicher, ob das nicht auch einfacher geht, habt ihr Ideen ?
RP6conrad
02.02.2009, 20:24
Jetzt ist die Schaltung so, das beim laden der RP6 komplett getrennt ist von accu. Aus sicherheitsgrunden sinnfoll : ueberspannungen / umpolung schadet dan nur die accu, und nicht die komplette Schaltung. Aber wen du vertrauen hat in ihre Ladeschaltung, spricht nichts dagegen um gleichzeitig zu laden mit der gesamt Schaltung under Spannung. Am mindest soll ich trotzdem doch eine Diode forsehen so das eine umpolung nciht fatal ist.
Dazu einfach eine klein Lott brucke zwischen ladecontact und accu, und nicht mehr ueber die Schalter gehen.
@TobeFFM: Auf alle Fälle eine coole Idee... :-) Könnt uns ja mal auf dem laufenden halten, wie ihr das gelöst habt...
mfg
benx
Joah das is wohl gar nicht so einfach. Ich weiss nicht, ob das so gesund ist, wenn der Robby beim aufladen an bleibt. Hört dann das Ladegerät jemals auf, den Akku zu laden? Eine gewisser Strom wird dann ja immer benötigt.
Aber so wies aussieht, hat das so keiner gemacht. Dann heißts wohl basteln!
So, ich hab mal ne Runde gebastelt, sieht nicht sonderlich schön aus, aber für einen ersten Test sollte es langen:
http://files.andieh.de/bilder/kontakte.jpg#
Das würde ich dann die Tage mal an den Robo machen, und auf gleicher Höhe eine Streifenrasterplatine an die Wand, is dann nur die Frage, wie er sich ausrichtet.
Geht das wirklich klar, das der RP6 eingeschaltet sein kann beim laden?
Geht das wirklich klar, das der RP6 eingeschaltet sein kann beim laden?
Laut Schaltplan ist +UB mit max. 10V angegeben. Die Ladeendspannung der Ladegeräte müßte eigentlich darunter liegen.
Also müßte das Laden eigentlich auch mit eingeschaltetem RP6 klappen, [highlight=red:6f6e1d0ed0]wenn die Motoren nicht laufen[/highlight:6f6e1d0ed0] und der RP6 in den Sleep-Modus (minimale Stromaufnahme) geht.
Ich würde aber zur Sicherheit vorher noch den Konstrukteur fragen: Schick doch eine PN an SlyD !
Gruß Dirk
Dafür war der dritte Kontakt gedacht, der dann möglichst alle Verbraucher auf dem Robo ausschaltet, wie Kamera und Router. Und natürlich dann auch die Motoren. Aber eine kurze Zeit wären die Motoren dann schon noch an, aber ich glaube, das dürfte eigentlich kein Problem sein.
Naja, irgendwann wird SylD den Thread schon entdecken, bin gespannt, was er dazu zu sagen hat.
und wieso denn auch immer das Rad neu erfinden? Ich sehe hier ja schon immer öfter die Werbung vom CleanBot (https://www.roboternetz.de/phpBB2/redirect.php?banner_id=31) oben rechts. Der fährt schließlich auch von alleine in seine Ladestation, weiss einer zufällig, wie der das macht?
Moin,
ja ab und zu lese ich hier schon mit ;)
Hinten am RP6 Mainboard gibts ein paar Anschlusspads über die Du den Hauptschalter vom RP6 komplett überbrücken kannst.
In einer selbst gebauten Ladestation mit Ladegerät und separatem Netzteil kannst Du durchaus die Akkus laden aber den Controller weiter mit Energie versorgen. Musst nur sicherstellen das zuverlässig umgeschaltet wird (z.B. über Relais - die natürlich nur dann geschaltet werden wenn der RP6 in der Ladestation steht ;) sonst wär der Akku ja schnell wieder leer).
Das Umschalten muss ausserdem solange verzögert werden, bis der RP6 100%ig sichereren Kontakt mit der Ladestation hat und sich nicht mehr bewegt.
Unbedingt ein paar Sicherungen für den Fall der Fälle vorsehen und eventuell sogar die Spannungen mit einem Mikrocontroller überwachen ;)
Zur Kontaktierung würde ich hinten am RP6 einfach irgendwelche biegsamen Metallstreifen verwenden - die Teile oben auf dem Foto sind eventuell schon zu fest und nicht biegsam genug - der Roboter muss ja dagegendrücken damit JEDER Kontakt zuverlässig verbunden wird.
(eventuell klappts ja mit ein paar Federn / Federstiften oder sowas in der Art... )
In der Ladestation kannste dann halt einfach größere Metallplatten verwenden - ja genau - ruhig etwas größer und weiter voneinandern entfernt damit der Roboter nicht die falschen Kontakte erwischt....
Den Weg in die Ladestation könnte man mit Markierungen auf dem Boden und einem entsprechenden Liniensensor im Roboter kenntlich machen.
Und zusätzlich seitliche Führungen vorsehen!
Die grobe Orientierung (wo ist die Ladestation) kann z.B. mit IR Baken gemacht werden.
MfG,
SlyD
Servus SylD, danke für deine Antwort, dann können wir das ja so machen.
Aber noch ne andere Frage zu den Baken: können die eventuell die Arbeit von den Sharp Distanzsensoren beeinträchtigen? Das wär nämlich dann ja schon doof.
Wie macht das der CleanBot (oder IRobot, keine Ahnung wie das Ding). Der sucht und findet ja auch seine Ladestation...
Christian3
15.06.2009, 16:22
Wie macht das der CleanBot (oder IRobot, keine Ahnung wie das Ding). Der sucht und findet ja auch seine Ladestation...
....
kann ich dir leider nicht sagen aber ich würd das so machen das deine lade station dauerhaft ein bestimtes IR signal aussendet und der RP6 bei eine bestimten akku spanung den signal volgt is vil nicht die beste lösung aber könnt hin haun
lg
KT-Robotik
01.02.2011, 00:15
"Zur Kontaktierung würde ich hinten am RP6 einfach irgendwelche biegsamen Metallstreifen verwenden - die Teile oben auf dem Foto sind eventuell schon zu fest und nicht biegsam genug - der Roboter muss ja dagegendrücken damit JEDER Kontakt zuverlässig verbunden wird.
(eventuell klappts ja mit ein paar Federn / Federstiften oder sowas in der Art... ) "
ich habe da letzten ne echt nette Sache gesehen. Im MiniaturWunderland haben die ja nen Flughafen gebaut und da müssen die auch die Flugzeuge aufladen. Das machen die indem die zwei Metalstifte in den Rumpf fahren und denn Flieger dann nen Stück hochheben. Das Flugzeug drückt dann mit seinem eigen Gewicht auf die Kontakte und sorgt so für den optimalen Kontakt. Da hatten die vom Wunderland zu beginn zwar auch noch ein Problem mit, denn auch die können die Flieger nicht "genau" einparken. Die sind dann einfach hingegangen und haben in den Boden jedes Fliegers zwei Trichter aus Metal eingebaut, wo durch das Flugzeug sich selbst in die richtige Lage geschoben hat.
Du könntest ja ne kleine Rampe bauen, da fährt der RP6 drauf und in das Chassie zwei Trichter setzen, die auf höhe der Vorderachse sind, die müssen ja nicht tief sein, vielleicht so 2 -3 cm und dann von unten kurze Stifte drunter fahren so das er nur noch auf der Hinterachse steht und auf die stifte drückt. Dann kannst darüber laden.
Und mit ne dritten Stift und Trichter könntest du über nen Flip Flop und nen Transistor den RP6 wieder zum leben erwecken, wenn der Accu die gewünschte Ladung hat.
MfG
KT
Es gibt doch (für den Rp6?) einen IR-Ball, oder? Den muss der RP6 ja auch irgendwie ansteuern können. Genauso könnte man an der Ladestation ein IR-Signal ausgeben, welches der Robby bei geringer Akkuspannung oder bei zu wenig Strom anfährt.
Oder kann das Probleme mit dem ACS oder den RC5-Signalen geben?
Was ich auch einmal gesehen habe, war eine Horde winziger Roboter (irgendein Uni-Projekt), welche mittels dreier Farb-LEDs kommunizieren konnten. So könnte man doch einfach die Ladestation mit blauen Leuchtdioden austatten und den Robby mit einem (zwei?) Fototransistor(en), welche diese dann ansteuern!?
Gruß,
Fabian
radbruch
06.02.2011, 14:29
Hallo
Der RP6 besitzt einen IR-Empfänger der IR-Signale mit 36kHz-Trägerfrequenz erkennen kann. Diesen nutzt er für sein ACS und auch für den Empfang von RC5-Signalen. Ebenso sendet der Ball ein 36kHz-Signal das der RP6 erkennen kann, allerdings habe ich noch von keiner Anwendung des Balls gelesen. (btw. ist die Beschreibung im C-Katalog (http://www.conrad.de/ce/de/product/191524/) quatsch: "Ideale Größe für Fußballroboter-Wettkämpfe")
Das Problem bei IR-Signalen in Räumen sind die unkontrollierbaren Reflektionen des Signals. Eine eindeutige Richtungsbestimmung der IR-Quelle ist fast nicht möglich. Ein Andocken an eine Ladestation scheint mir deshalb (nur) mit IR nicht möglich.
Das Thema scheint ja allgemein von Interesse zu sein, deshalb mal ein Denkansatz von mir: Als Basis würde ich ein System ähnlich wie bei Boxautos verwenden. Eine Grundplatte auf dem Boden bildet einen Pol und ein Schleifer über dem RP6 mit Kontakt zu einem Wasauchimmer den Zweiten. Im Aktionsbereich des RP6 malt man dann eine Linie auf den Boden die über die Bodenplatte verläuft und der der RP6 folgen kann, wenn seine Akkus zuneige gehen. Als Variante könnte man vielleicht nur einen Linientrichter um die Grundplatte anbringen und den RP6 mit einer IR-Bake irgendwie anlocken. Linienfolgen kann der RP6, wie schon gezeigt, mit seinen bordeigenen LDRs.
Zur Steuerung: Wenn man ein Ladegerät verwendet, dass bei Ladeschluß die Spannung deutlich absenkt oder gar ganz ausschaltet, könnte man mit der Ladespannung direkt ein Relais ansteuern. Der Ablauf wäre dann etwa folgender: Der RP6 fährt über die Linie und erkennt diese. Er prüft den Ladezustand seiner Akkus und entscheidet, dass er nachtanken muss. Also fährt er der Linie entlang bis er die Grundplatte erreicht und über die Schleifer kontakt zum Ladegerät bekommt. Dadurch wird das Relais eingeschaltet und trennt die Akkus vom RP6 und verbindet sie gleichzeitig mit dem Ladegerät. Sobald die Ladung endet fällt das Relais wieder ab, der RP6 wird wieder bestromt und zuckelt weiter seine Runden.
Das ist jetzt eher aus dem Handgelenk geschüttelt und nicht wirklich gründlich überdacht. Keine Ahnung, ob sich das so umsetzen läßt.
Gruß
mic
Ja, das ist wieder so was: Wenn ich nur ein IR-Signal von der Tankstelle sende, dann kann ich mir auch nicht vorstellen, dass das für den RP6 so einfach wird, genau darauf zuzufahren. Dann schon eher, dass man Zwei IR-Empfänger anbring und wie die Lichtsensoren anordnet mit einer Trennwand dazwschen. Aber dann spielen natürlich immer noch die ganzen zusätzlichen Signale durch Reflexionen... dazwischen!
Das Problem, das ich bei deiner (radbruch) Idee sehe, ist, dass du ja dann nur einen festen (evtl. nicht sehr großen) Einfangsbereich hast, eben nur soweit deine Linien reichen...
Wie funktioniert denn so ein Baken?
Wie kann sich der RP6 daran orientieren?
Gruß,
Fabian
radbruch
06.02.2011, 15:54
Hallo
Eine IR-Bake sendet einfach ein IR-Signal aus. Meist wird das mit einem NE555 umgesetzt, ich persönlich würde aber einen Tiny13 verwenden:
http://www.rn-wissen.de/index.php/Navigation#2._Aktive_Markierungen
Für erste Tests würde wohl auch eine TV-Fernbedienung als Bake ausreichen. Mit entsprechender Abschirmung könnte man vielleicht begrenzt eine Richtungsbestimmung ermöglichen.
Das Hauptproblem beim Abschirmen dürfte es wohl sein, den seitlich abgeschirmten IR-Empfänger des RP6 in den (durch eine Papprolle vor der Fernbedienung?) gebündelten IR-Strahl zu bekommen. Dazu müsste sich der RP6 um seine Achse drehen und gleichzeitig die Bake ihren IR-Strahl horizontal schwenken.
Orientierung mit Baken ist eigenlich eine Wissenschaft für sich. Gute Tipps bekommt man wohl von den Roboballspielern. Da mein RP6 fast nur steht habe ich noch keine Experimente in dieser Richtung unternommen.
Gruß
mic
Mich würde auch mal der grundsätzliche Aufbau einer solchen Ladestation interessieren, mal fernab davon, wie sie mein RP6 findet:
Einfach nur ein Ladegerät mit zwei Schleifkontakten ausstatten, kann es ja nicht sein. Ich muss ja den RP6 abschalten, den Akku abkoppeln und darf erst dann mit dem Laden beginnen. Dann muss das Laden überwacht werden und den RP6 wieder an den Akku hängen und starten, wenn der Akku wieder voll ist.
Ergo: Das ganze muss uC-Überwacht werden. Nur wie? Je nach Akkuspannung? Mache ich da einfach einen Prozess "RP6 abkoppeln", dann "laden bis x Volt erreicht sind" und dann wieder "RP6 aktivieren"?
Und in der Zwischenzeit: Irgendwie den RP6 anlocken...
Gruß,
Fabian
radbruch
02.03.2011, 12:34
Hallo
Ich glaube, ich habe jetzt eine brauchbare und kostengünstige Methode zum Anlocken des RP6 gefunden. Basis ist ein Strichlaser (Powerfix PLW2 (http://www.google.de/search?q=powerfix+plw+2)) vom Discounter als Bake, Detektor auf dem RP6 ist ein LDR hinter einer Linse (Durchmesser 40mm, Brennweite ca. 50mm) in einer Pappröhre mit Schlitzblende. Obwohl sich der LDR nicht genau im Brennpunkt der Linse befindet und weder Laserwasserwaage noch Detektor großartig ausgerichtet sind, ist das Ergebniss recht gut (besser als das Video auf jeden Fall :)
http://i1.ytimg.com/vi/dmXwCAlR7OA/2.jpg (http://www.youtube.com/watch?v=dmXwCAlR7OA)
http://www.youtube.com/watch?v=dmXwCAlR7OA
Durch die Linse wird die lichtempfindliche Fläche des Detektors so weit vergrößert, dass auch ohne exakte Ausrichtung schon Reichweiten von über 5m erreichbar sind. Probleme mit der Hintergrundhelligkeit kann man sicher durch eine bessere KI des Suchprogramms ausmerzen:
// Projekt Ladestation Step 1: RP6 anlocken mic 2.3.2011
#include "RP6RobotBaseLib.h"
// Achtung! Die PWM-Werte werden hier OHNE Rampe verändert!
void setMotorPWM(uint8_t power_links, uint8_t power_rechts)
{
extern uint8_t mleft_ptmp, mright_ptmp;
if(power_links > 210) power_links = 210;
if(power_rechts > 210) power_rechts = 210;
mleft_power=mleft_ptmp=power_links;
mright_power=mright_ptmp=power_rechts;
OCR1BL = power_links;
OCR1AL = power_rechts;
if(power_links || power_rechts)
TCCR1A = (1 << WGM11) | (1 << COM1A1) | (1 << COM1B1);
else
TCCR1A = 0;
}
int main(void)
{
initRobotBase(); // sollte man nicht vergessen
PORTA |= ADC0; // PullUp einschalten
powerON(); // Achtung! Der RP6 kann sich bewegen!
while(1)
{
setMotorPWM(0, 150); // Bake suchen
setLEDs(56);
while(readADC(ADC_ADC0) > 200);
setMotorPWM(150, 100); // in Kurve darauf zufahren
setLEDs(7);
while(readADC(ADC_ADC0) < 200);
}
while(0) // debug
{
writeInteger(readADC(ADC_ADC0), 10); // ADC Kanal 0
writeChar('\n');
mSleep(300);
}
while(1); // Notbremse
return(0);
}
Schritt "Anlocken" ist so eigentlich gelöst, nun steht das Design der Ladestation an.
Gruß
mic
_|Alex|_
02.03.2011, 13:02
moin,
Das sieht doch schonmal Super aus :)
ich hab mir auch gedanken zu einer Lade station gemacht :D
Und habe vor die Station eventuell mit Akkus zu bauen und tagsüber mit einem Solar Panel zu Laden.
Zur Ausrichtung des Panels habe ich mir schon am RP6 gedanken gemacht und mein erstes ergebniss sieht so aus:
http://www.youtube.com/watch?v=oQzT8WgnBSE
Wie verlinke ich eigentlich direkt Youtube Videos?
um auch hier die kleine Nebendiskussion anzustreben:
Wie klein könnte man die Lösung von Radbruch wohl gestalten?
Oder wäre es eine Möglichkeit, an der Station einige LEDs bestimmter Farbe anzubringen und dann in den Linsenfokus einen Sensor für exakt diese Farbe bzw. diesen Wellenlängenbereich? Hab ich doch neulich erst irgendwo gesehen... z.B
http://www.micromaus.de/
Gruß,
Fabian
radbruch
07.03.2011, 22:19
Ursprünglich wollte ich das Anlocken ja nur mit Bordmitteln des RP6 lösen:
// Projekt Ladestation Step 1: RP6 anlocken mic 9.2.2011
#include "RP6RobotBaseLib.h"
// ACS als LED-Sensor: https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=39560
uint8_t getACS(void)
{
DDRD |= ACS_PWR; // Pins als Ausgang
DDRB |= ACS_PWRH;
PORTD &= ~ACS_PWR; // Anoden gegen GND schalten
PORTB &= ~ACS_PWRH;
sleep(10); // Kurz warten und Stoppuhr starten
setStopwatch1(0);
startStopwatch1();
DDRD &= ~ACS_PWR; // Anoden als Eingang
DDRB &= ~ACS_PWRH;
while(!(PIND & ACS_PWR)); // Warten bis Pegel wieder high ist
stopStopwatch1();
// writeInteger(getStopwatch1(), 10); writeString_P("\n\r"); mSleep(100); // debug
return(getStopwatch1()); // Messwert zurückgeben
}
int main(void)
{
initRobotBase(); // sollte man nicht vergessen
powerON(); // Achtung! Der RP6 kann sich bewegen!
enableACS(); // ACS muss für die Helligkeitsmessung
setACSPwrHigh(); // eingeschaltet sein
while(1)
{
moveAtSpeed(0, 150);
while(getACS() > 20) task_motionControl();
moveAtSpeed(200, 150);
while(getACS() < 20) task_motionControl();
}
return(0);
}
Das funktioniert, aber das Ausrichten des Lasers ist quasi unmöglich.
Inzwischen habe ich den Bootlader als Problem ausgemacht. Wenn man zum Laden den Akku vom Kontroller trennt, startet der RP6 nach Beenden des Ladens nicht mehr. Also muss man wohl mit angeschlossenem RP6 laden, der Kontroller könnte dabei selbst die Ladekontrolle übernehmen. Ansatz wäre viellecht ein Sleep-Modus aus dem ihn sein Watchdog regelmässig wieder aufweckt.
Warum soll der RP6 verschiedenfarbige LEDs auf der Station erkennen können? Welche Informationen willst du ihm zublinken?
Das könnte gehen, allerdings nicht mit verschiedenfarbigen Led Farben sondern mit verschiedenen Frequenzen / Pulslängen an den LEDs der Ladestation und dem ACS Sensor des RP6. Vielleicht reicht sogar schon eine einfache Wechselblinkerschaltung mit verstellbaren Dutycycle von 40 zu 60 % bei geschätzten 100Hz und Sichtblende.
Mit NE555 als ic
http://www.ne555.at/timer-ic-ne555/grundschaltungen/146.html
Oder transistorisiert
http://www.ferromel.de/tronic_1603.htm
Wenn z.B. IR-LEDs der Station durch eine Sichtblende ähnlich wie die LDRs am RP6 voneinander getrennt sind, gibts quasi nur einen geraden "Einflugwinkel" auf die Ladestation, wo beide LEDs gleich stark empfangbar sind und eine Art Korridor aus "Dauerlicht" entsteht. Sobald du Dich vom Pfad weg bewegst muss die kurz oder lang leuchtende LED schwächer werden und es entsteht ein Rechteckimpuls dessen Breite und Ausschlag dir sagt wo Du dich ca. befindest. Ziel ist dann den Pfad z.B. über ein PID Regler wieder zu finden. Quasi ein umgedengelter Linienfolger. Natürlich muss man Reflektionen abschirmen. Das ganze funktioniert ähnlich wie die Landelichter auf einem Flugplatz. Man muss beim ansteuern halt nur schauen das man möglichst gleich viel Anteil von beiden Pulsen bekommt und wenn man von einer Sorte zu wenig hat muss man in die Gegenrichtung. Das wird genauer je näher du ran kommst da sich die Lichtkegel der LEDs auf Entfernung mischen können (wirkt wie ein Trichter), allerdings muss die Abschirmung so gebaut sein das auch wirklich bis zur "Landung" noch beide Sorten Licht zu bekommen sind, sonst kriegt die Regelschleife der Antriebsrichtung Torschlußpanik und baut mist. :) Ein Laser streut zu wenig, man braucht wirklich Lichtkegel und kein Strahl dafür. Ist also auch eine Frage des Aufbaus. Und man muss sicher stellen, das man min. ein Wechsel zwischen den LEDs bzw. mit dem Wechselblinker Dauerlicht hat, ab da beginnt dann der Zielanflug. Man könnte natürlich auch mit 2 freilaufenden Frequenzen arbeiten... und FFT... oder die IR-LEDs RC5 Signale senden lassen... die eine: weiter rechts.. die andere: weiter links... und der RP6 eiert dann auf die Station zu je nach dem welche LED er grade reinbekommt... :)
LG Rolf
Ursprünglich wollte ich das Anlocken ja nur mit Bordmitteln des RP6 lösen:
[PHP]// Projekt Ladestation Step 1: RP6 anlocken mic 9.2.2011
DDRD |= ACS_PWR; // Pins als Ausgang
DDRB |= ACS_PWRH;
PORTD &= ~ACS_PWR; // Anoden gegen GND schalten
PORTB &= ~ACS_PWRH;
ich versuche vergeblich - trotz komentare - diese befehle zu verstehen :-(
auch die suche nach "ACS_PWR" ergab, dass es die defines wohl in der "RP6Robotbase.h" gibt, aber in der "RP6Control_I2CMasterLib.h" nur in einer abgewandeltern form...
#define ACS_PWR_OFF 0
#define ACS_PWR_LOW 1
#define ACS_PWR_MED 2
#define ACS_PWR_HIGH 3
und wieder stehe ich aufm schlauch - wie schreibe ich jetzt den code so um, dass er von der m32 ausführbar ist?
Das ist die ganz normale Schreibweise wie man auf einem Atmega in die Register schreibt.
In dem Fall wird das Register DDRD (Richtungsregister für Port D) mit dem hinter ACS_PWR stehen den Wert verodert. Also eine 1 an die passende Stelle im Register geschrieben. Das selbe passiert auch mit Port B.
Danach wird das Portausgangsregister (PORTD) mit dem invertieren Wert von ACS_PWR Verundet. Also in diesem Fall wird eine Null an die passende Stelle geschrieben. Dadurch schaltet man den entsprechenden PIN auf GND.
@shepede,
danke für die erklärung für das beschreiben der register...
mir ging es aber auch um die behandlung bzw. ersatz der defines z.b. "#define ACS_PWR (1 << PIND6) // Output" in der "RP6Robotbase.h", die ja bei ausführung des programms von der m32 aus nicht mehr eingebunden wird...
Hi inka,
das Programm von radbruch läßt sich mit der M32 als I2C-Master und der Base als Slave (mit dem Standard-Slave-Programm) nicht 1:1 umsetzen.
radbruch steuert die ACS-LEDs direkt an, was auf dem Base Slave nicht vorgesehen ist.
Ich würde auch eher mit dem IR-Empfänger arbeiten: Das ist der eigentliche Empfänger für die 36 kHz IR-Signale.
Du müßtest also "nur" den PB2-Pin Zustand der Base ausgeben.
Aber auch dafür ist beim Slave keine Funktion 1:1 vorhanden, so dass man den Slave (und M32 Master) ändern müßte, um die Abfrage über die M32 zu realisieren.
Was spricht dagegen wenn du dir eigene #defines baust bzw. die benötigten einfach aus der RP6Robotbase.h in deinen Quellcode übernimmst?
Da beides (Base & M32 Board) eine M32 CPU hat, kann man auf beiden auch die Register erst mal gleich ansprechen, es macht ggf. nur einen Unterschied durch die Periherie.
(die M32 hat ja keine ACS, also macht es keinen Sinn den Port auf der M32 dann ACS zu nennen oder so anzusteuern als wäre ein ACS dran...)
Wirklich problematisch wäre das erst, wenn du unterschiedliche Prozessoren hast.
Du solltes dich aber mal mit den Ports und den Arten wie man sie schaltet genauer befassen... also Richtungssteuerung der Ports (E/A) .. anlegen von 0/1, auslesen der Ports...
Da gibts diverse Beiträge zu.. u.a. auch auf RN-Wissen.
Dann im Quellcode nachgucken wie die Ports und deren Steuerbytes definiert werden... ggf. vergleichend zwischen Base und M32.
Wenn du diese Lektion verstanden hast, schreibst du dir die #defines zukünftig mit links :)
Gruß Rolf
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.