Hallo,
Mikrocontroller haben fast immer diverse Hardwaremodule fix auf bestimmte Pins gelegt (I2C, UART, PWMs, ADCs, usw) und das natürlich über alle Ports verteilt und somit ist keiner der Ports komplett frei für 6 Status LEDs.
Die LEDs sind völlig unkritische Komponenten und können daher einfach an den Pins angeschlossen werden die übrig bleiben.
Einzelne LEDs setzen ist also kein Problem - um alle gemeinsam zu setzen musst Du Dir eine passende Funktion schreiben.
(s. RP6RobotBaseLib.c Zeile 104 bis 141 - sieht komplizierter aus als es ist
)
Beim RP6 können die LED Ports auch noch als Eingänge verwendet werden. An SL3 und SL6 hängen zusätzlich z.B. die Bumper des RP6 mit dran. Um die auszuwerten muss man einfach nur kurz die Portrichtung umschalten (das geht so schnell das man das natürlich nicht sehen kann).
-----
Noch ein paar allgemeine Hinweise:
-----
Du kannst natürlich die RP6Lib teilweise als Vorlage verwenden und davon das was Du brauchst in Assembler umsetzen. Ein paar Sachen darin sind nicht ganz so trivial wie LEDs setzen - z.B. die ACS Ansteuerung.
Die Pinbelegung und die standard Pinrichtungen und Pegel findest Du z.B. in rp6lib/rp6base/RP6RobotBase.h
Das solltest Du auch so übernehmen.
Also was Eingang/Ausgang ist und was im Ausgangszustand auf low/high steht. Im Programm selbst muss man das dann teilweise dynamisch wieder ändern damit es funktioniert.
Vorsicht bitte insbesondere beim IRCOMM Pin (da hängen über ein MOSFET die beiden nach oben gerichteten IR Sendedioden dran)!
Den Pin dauerhaft auf low Pegel schalten (DDRD Pin7 = 0 und PORTD Pin7 = 0 ) bevor Du Dir nicht im Umgang mit den Timern sicher bist. Wenn Du keine Infrarot Kommunikation zwischen zwei RP6 Bots realisieren möchtest - lass den Pin am besten erstmal ganz in Ruhe
Die IR LED darf mit hohem Strom gepulst werden um die Reichweite zu erhöhen aber eben nicht dauerhaft damit belastet werden. 5kHz Modulationsfrequenz sollten es minimal schon sein, Sollfrequenz ist 36kHz.
Wie man das implementieren kann siehst Du in der RP6RobotBaseLib.c ab Zeile 1060
(ISR (TIMER2_COMP_vect) ),
da ist auch gleich die Ansteuerung der ACS IR LEDs mit dabei, die sind aber unkritisch da hier nur sehr geringe Ströme geschaltet werden.
Wichtig ist noch die Timer Initialisierung für die Motoransteuerung.
Am besten die Registereinstellungen aus
void initRobotBase(void) (Zeile 1757)
übernehmen damit alles passend ist.
MfG,
SlyD
PS:
Bitte keine Crosspostings (
http://www.arexx.com/forum/zeigebeitrag.php?t=881 ) mehr,
das gilt allgemein in jedem Forum als schlechter Stil.
Lesezeichen