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
Code:
set_adc_channel(1); // Spannungsversorgung der Steuerelektronik
Folgendes abändern, so dass jedesmal nach dem Lesen gleich auf den nächsten Eingang geschaltet wird.
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!
Bis dahin funktioiert nur der ADC richtig dein Probnlem ist aber das die Routine nicht aufgerufen wird, denn folgender Code:
Code:
do
{
if(kbhit())
{
for(i=0; i<=2; i++)
{
delay_ms(200);
empfangen[i] = getc();
}
}
}
while (empfangen == 0);
Die do-Schleife wird dauernd wiederholt und erst verlassen (und mit dem weiteren Code fortgefahren) wenn der PIC ein Zeichen empfangen hat.
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
Lesezeichen