Ich kann mir nicht vorstellen wo sonst der Fehler liegen sollte ... hoffe ja doch dass ich ne übergabe eines Wertes in ein Nebenprogramm zusammenbringe.
Ich verwende die Erweiterungsplatine M32 und IO_PC6 (in diesem Fall) ist in der Library RP6ControlLib.h definiert.Code:#include "RP6ControlLib.h" //Beschreibung: imp ist die Impulslänge (0.1ms=1) //Servo an PC5 void servo_io5 (int imp) //Kanal als Ausgang //Impuls für imp . ms //Pause bis zum nächsten Impuls { DDRC |= IO_PC5; PORTC |= IO_PC5; mSleep(imp); PORTC &= ~IO_PC5; mSleep(200-imp); } int main(void) { initRP6Control(); initLCD(); showScreenLCD("RP6 Control", "RP6"); clearLCD(); sleep(500); showScreenLCD("Servobewegung", ""); sleep(1500); int i=0, x; while(i<100) //2000ms { servo_io5(13); //i=i+1; } i=0; x=10; while(true) { while(i<10) //200ms { servo_io5(x); } x=x+1; if (x>=20) { x=10; } } while(true) { showScreenLCD("Endlosschleife", ""); } return 0; }
Man kann mit den Befehlen dann die verschiedensten Sachen machen:
aus der Beschreibung des M32 ModulsWenn man einen I/O Pin als Ausgang verwenden will, um z.B. eine LED zu schalten,
muss man das entsprechende Bit im DDRx Register auf 1 setzen.
Beispiel:
DDRC |= IO_PC7; // PC7 ist nun Ausgang
DDRC = IO_PC7 | IO_PC6 | IO_PC5; // PC5, PC6, PC7 sind nun Ausgang,
// alle anderen Pins sind Eingänge!
Dann kann man über das PORTx Register den Ausgang auf high oder low pegel schalten.
Beispiel:
PORTC |= IO_PC7; // High
PORTC &= ~IO_PC7; // Low
Ist ein Bit im DDRx Register 0, so ist der zugehörige Pin als Eingang konfiguriert.
Beispiel:
DDRC &= ~IO_PC6; // PC6 ist nun Eingang
Dann kann man über das PINx Register den Zustand des Pins auslesen, also ob high
oder low Pegel am Pin anliegt.
if(PINC & IO_PC6)
writeString_P("PC6 is HIGH!\n");
else
writeString_P("PC6 is LOW!\n");
Ich habe den Code jetzt auf PC5 umgeschrieben. Ich bin mir allerding bei der Sache mit sleep(.ms) mittlerweile nicht mehr sicher.
Wie sollte ich die imp - Variable sonst deklarieren? Müsste doch eigentlich passen.
Lesezeichen