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:
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
    
}//()
Viele Grüsse,
Tornado