Hi
der ADC braucht eine gewisse Zeit nach dem Umschalten bis Du das Ergebnis abrufen kannst. Deswegen würd ich folgendes Vorschlagen:
Das im Initialisierungsteil festlegen
Folgendes abändern, so dass jedesmal nach dem Lesen gleich auf den nächsten Eingang geschaltet wird.Code:set_adc_channel(1); // Spannungsversorgung der Steuerelektronik
Bis dahin funktioiert nur der ADC richtig dein Probnlem ist aber das die Routine nicht aufgerufen wird, denn folgender Code:Code:/* Mess- und Sensordaten einlesen */ ad_wert1 = read_adc(); // deswegen oben im Initialisierungsteil channel(1) festgelegt weil es hier jetzt nicht mehr steht. spannung1 = (ad_wert1 / 1023) * 5; set_adc_channel(2); // Spannungsversorgung der Motoren <- !! gleich umschalten damit der ADC genügend zeit hat delay_ms(200); // und die hat er 200ms sind mehr als ausreichend! ad_wert2 = read_adc(); spannung2 = (ad_wert2 / 1023) * 12; set_adc_channel(1); // Wieder nach dem Lesen auf den anderen Kanal schalten damit dieser sich aufladen kann! eventuell hier noch ein delay(20); einfügen wenns nicht funktoniert!
Die do-Schleife wird dauernd wiederholt und erst verlassen (und mit dem weiteren Code fortgefahren) wenn der PIC ein Zeichen empfangen hat.Code:do { if(kbhit()) { for(i=0; i<=2; i++) { delay_ms(200); empfangen[i] = getc(); } } } while (empfangen == 0);
Das musst Du noch abändern ich empfehle dir das so umzuschreiben das Du einen Interuppt für anklommende Daten benutzt udn keine do-Schleife die jedesmal überprüft ob was Empfangen wurde und den Rest blockiert.
mfg
Benny







Zitieren

Lesezeichen