Es hat zwar etwas gedauert, aber ich habe jetzt einen Servo zum laufen gebracht.
Diese 1ms Auflösung war wohl nicht genau genug. Mit einem Timer mit 50us geht es jetzt.
Ich kann ein Servo jetzt vor- und rückwÄrts drehen lassen.
Zum stehen kann ich es aber noch nicht bringen. Wenn er eigendlich stehen müsste, fährt er rückwärts.
Muss ich beim Servo anschliessen noch etwas beachten? Ich habe den Servo einfach an einen Ausgang von Port A gehangen. Dazwichen ist noch ein 270Ohm Wiederstand (weil ich dort vorher eine LED angesteuert hatte).
Also, der Servo dreht. Aber es gibt ein Problem...
der Pic wird heiss, sehr heiss. Ich habe mir eben die Pfoten verbrannt.
Löschen oder umprogramieren kann ich den auch nicht mehr. Der scheint hinüber zu sein. Wie habe ich das hingekriegt? Das würde ich gerne wissen, um nicht noch einen PIC zu verbrennen.
Hier kommt der fertige Code:
Viele Grüsse,Code:#include <pic1687x.h> #define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit)) //------------------------------------------------------------------------- int cont=0; //------------------------------------------------------------- void initial(){ ADCON1=6; // PortA Pins als digital definiert TRISA = 0x00; //Port A = Ausgang mit LEDs TRISB = 0b00011111; //RB0 - RB4 = Eingänge, RB5 - RB7 = //Ausgänge //RB0 brauchen wir im Moment nicht PORTA = 0b00000000; PORTB = 0b00011110; // RB5-RB7 auf Low und RB1-RB4 auf High //RB1 - RB4 auch mit Pull-up Wiederständen auf High }//initial //timer us=50us int us; void pause_1(us){ while(us){ // Schleife verlassen wenn ms=0 ist OPTION = 3; // Vorteiler auf 16 einstellen // 1/10M * 4 * 16 * x x=8 für 50us TMR0=248; //256-8=248 while (TMR0); // abwarten von 50us us--; // "50us"-1 } };//timer void job (){ // Servo fährt vorwärts if(cont==0){ PORTA = 0b00000001; pause_1(20); //timer 20 *50us = 1ms cont=1; } else{ PORTA = 0b00000010; pause_1(380); // 380 * 50us = 19ms cont=0; } }//job //------------------------------------------------------- void main (void) { initial(); do{ job(); }while (1); //immer wiederholen }//()
Tornado







Zitieren

Lesezeichen