PIC 16F ADC1 beeinflusst ADC2 Lehrer weiß auch nicht weiter bitte um Hilfe. Code beiliegend. DANKE

#1192595
Lesenswert?

Hallo PICfreunde.

Ich möchte für eine Projektarbeit eine BLDC Steuerung mit PIC
realisieren.
Benutze dazu 2PIC's 16F877A, einer fürs schalten der 3phasen
MOSFET-Brücke der mit dem TimingWert des anderen gefüttert wird und nur
fürs umschalten zuständig ist.
Der 2te Pic soll den Speed (TimingWert für ersten ausgabe an PortD; für
anzeige am BCD 7 Segmentdisplay Port B und E) aus der ADC1 an RA0
machen. Motor läuft, nimmt aber zu viel Strom, daher eine 2te ADC(2)an
RA1 für eine PWM erzeugung mit der die MOSFETS im 20khz Takt bei
unterschiedlicher DutyCycle gepulst werden. Funktioniert mit externer
PWM super...nun soll dies auch der PIC übernehmen.

Problem: ADC1 (SPEED) alleine geht, ADC2 PWM alleine geht
sobald beide zusammen kommen, werden keine korrekten werte ausgegeben.
PWM DCycle 0-100% geht nur wenn ADC1 FF hat, ansonsten wird PWM ca auf
50% reduziert. ADRESH nach ADC2 ist falsch müsste eigentlich ebenfalls 
FF liefern,
da beide Potis auf Endanschlag stehen...(ADC1 wird nicht mitgemacht) nur 
ein "sinnloser" Befehl wie CLRF/BSF im Zusammenhang mit ADCON reicht aus 
und nicht geht mehr.

Beim In-Cercuit Debugging geht alles (Einzelschritt und langsamer
testlauf (>>) aber im RUN-Modus (>) kein Erfolg.
Normalerweise hat eins mit dem anderen nichts zu tuen, weiß mir keinen
Rat mehr, der Lehrer leider auch nicht...

habe alles mögliche probiert, von größerer Zwischenzeit, andern Analog
Ports incl. E, anderer PIC....sobald für die ADC1 der ADCON beschrieben
wird (die mit ";" gekennzeichneten commands oberhalb
ADC1-RA0)funktioniert ADC2 nicht mehr. Habe im Quelltext die komplette
ADC1 nicht mehr mit ";" stillgelegt, wurde aber getestet.

Wäre super wenn mir jemand einen Tip geben könnte, habe leider nicht
mehr viel zeit bis zur abgabe...
Angehängte Dateien:
#1192636
Lesenswert?

danke für deine schnellen antworten...
@morph1
wie meinst du das mit der zeit? die erholzeit für die ADC2 nach 1 
beträgt ca. 2ms, das sollte ausreichend genug sein... oder meinst du 
noch eine Umschalt-Erholzeit?

@jadeclaw...
was bedeutet dies konkret? ich müsste als eine schleife machen, wo die 
ADC2 zweimal nacheinander abgefragt wird und derst die zweite 
hoffentlich sinnvolle zum weiterverarbeiten nehmen???

Was ich nur nicht verstehe -rein vom Logischen- was hat eine "sinnloser" 
erster befehl mit der ADC2 zu tuen? nur weil ich den ADCON0 vorher 
schonmal aufrufe bzw ihn bearbeite spinnt die ADC2 rum???? wenn ich alle 
vorhergehenden ADCON0 commands rausnehme gehts...unverständlich

THX
Gast #1192651
Lesenswert?

also:

nach einem adc-kanal-wechsel MUSS man eine pause von etlichen takten 
machen bevor man eine messung starten kann, sonst kommt müll raus, 
wielange genau steht im datenblatt, also wenn du zeit zum warten hast, 
erst umschalten, dann warten.

das mit den messungen verwerfen kommt mir grad sehr bekannt vor, kann 
aber auch sein das ich das irgendwo bei einem avr-projekt gelesen hab.

schaden kanns wohl nicht :) also einfach 2x direkt hintereinander (am 
gleichen adc-kanal) messen und nur die 2. messung werten.
Persönliche Seite #1193102
Lesenswert?

sprut sagt dazu:

"Wichtig, und oft vergessen: die "acqisition time"

Nach der Wahl des Eingangs wird der interne Kondensator am ADC-Eingang 
mit der am analogen Pin anliegenden Spannung geladen. Gemessen wird 
später die
Spannung in diesem Kondensator. Deshalb muß man dem PIC nun genügend 
Zeit einräumen, den Kondensator komplett auf die neue Spannung 
aufzuladen, bevor man die eigentliche Messung auslöst. Wie lange diese 
'aquisition time' dauern sollte, hängt von mehreren Parametern ab (z.B. 
vom Innenwiderstand der zu messenden Spannungsquelle). Typischerweise 
reichen 40 µs Pause aus. Wer es genau wissen will, findet in der 
Dokumentation zum PIC-Typ eine Formel zur Berechnung dieser Wartezeit."

Von einem Verwerfen der ersten Messung habe ich bei PICs bisher noch 
nichts gelesen und es auch nie so programmiert. Die acqisition time 
sollte aber beachtet werden.

Sven

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren