Forum: Mikrocontroller und Digitale Elektronik TCP IP STACK Microchip POT wird nichtangezeigt


von sven (Gast)


Lesenswert?

Servus,

Wieder mal eine Frage zum TCP/IP Stack von Microchip.

Ich nutze den den PIC24EP und spiele mit der Demoapp von Microchip ein 
bissel rum.

Dort ist auch ein Poti initialisert (wie an meinem Board an AN0)

Der Code aus dem Stack für das Poti ist wie folgt:
1
<p>Poti: <span id="pot0" style="font-weight:normal">?</span></p> ...
2
// Update the POT value
3
  document.getElementById('pot0').innerHTML = getXMLValue(xmlData, 'pot0');

Hier habe ich auch nichts dran geändert. Trotzdem wird bei mir auf der 
Webseite andauernd nur das "?" angezeigt. Eigentlich sollte dort ja die 
dynamische Variable stehen, richtig?

Vielleicht liegt es am ADC?
1
 // ADC
2
    ANSELBbits.ANSB0 = 1;   // AN0 is analog
3
    TRISBbits.TRISB0  = 1;    //input
4
    AD1CON1 = 0x84E4;            // Turn on, auto sample start, auto-convert, 12 bit mode (on parts with a 12bit A/D)
5
    AD1CON2 = 0x0404;            // AVdd, AVss, int every 2 conversions, MUXA only, scan
6
    AD1CON3 = 0x1003;            // 16 Tad auto-sample, Tad = 3*Tcy
7
// AD1CSSL = 1<<5;                // Scan pot
8
        AD1CSSLbits.CSS0 = 1;   // scanne AN0

Irgend welche Hinweise oder Ideen woran es liegen könnte?

von Stampede (Gast)


Lesenswert?

HAst du mal versucht einfach einen fixen String stattdessen auszugeben?

von sven (Gast)


Lesenswert?

hmm was meinst du mit fixen string??

Das "?" wird natürlich einfach ausgegeben.
Wenn ich mit ~pot0~ etwas ausgebe funktioniert es auch, aber eben nur 
statisch. An AN0 hängt bei mir nen Temp.sensor dran, deswegen scheinen 
mir Werte für ~pot0~ zwischen 3 ung 6 nicht gerade plausibel. Klar muss 
der Wert dann noch an die Geradengleichung angepasst werden.

Aber das ist ja nicht das Problem. Ich muss erstmal die dynamische 
Anzeige des Potis hinkriegen. Was genau meinst Du mit fixen Strings, 
Stampede?

Das Problem ist das für den PIC24E keine Voreinstellungen vorhanden sind 
und ich nicht sicher bin ob ich die ADC initialisierungen richtig 
gemacht habe:

Für den PIC33F und PIC24H heisst es ja beispielsweise im Code:
1
// ADC
2
        AD1CHS0 = 0;                // Input to AN0 (potentiometer)
3
        AD1PCFGLbits.PCFG5 = 0;        // Disable digital input on AN5 (potentiometer)
4
        AD1PCFGLbits.PCFG4 = 0;        // Disable digital input on AN4 (TC1047A temp sensor)

Diese Kommandos gibt es beim PIC24E aber nicht:

ich habe (siehe oben) einfach folgendes gemacht:
1
// ADC
2
     ANSELBbits.ANSB0 = 1;   // AN0 isanalog
3
    TRISBbits.TRISB0  = 1;    //input
4
    AD1CON1 = 0x84E4;            // Turn on, auto sample start, auto-convert, 12 bit mode (on parts with a 12bit A/D)
5
    AD1CON2 = 0x0404;            // AVdd, AVss, int every 2 conversions, MUXA only, scan
6
    AD1CON3 = 0x1003;            // 16 Tad auto-sample, Tad = 3*Tcy
7
AD1CSSL = 1<<5;                // Scan pot

Der Ansel Befehl setzt BO (da ist AN0 dran) als analogen Input, sollte 
also dem Befehl vom PIC24H
1
AD1CHS0 = 0;                // Input to AN0 (potentiometer)
 gleichgestellt sein.
1
 AD1CSSL = 1<<5;                // Scan pot
 ist dann wohl das gleiche wie
1
 AD1CSSL = 0x1
  und scannt den Ausgang AN0. Ich hoffe das man das so machen kann, habe 
da aber noch keine Erfahrungen mit dem ADC, bzw. dem PIC24E. Vielleicht 
liegt der Fehler auch wonanders????

von Stampede (Gast)


Lesenswert?

Mit fix meine ich einen einfach Text wie "Hallo". Wenn ich deine 
BEschreibung richtig verstehe, wird die Variable ~pot0~ aber richtig 
aufgelöst.

Was du mal testen solltest ist folgendes. Du schreibst dir eine 
Ausgabefunktion für die Temperatur  Spannung  wasauchimmer.
So gebe ich zB eine Messpannung aus. "vsup" muss natürlich entsprechend 
definiert sein (im index.htm und status.xml).
1
void HTTPPrint_vsup(void)
2
{
3
  char VoltageString[6];
4
  WORD voltage;
5
  voltage = (WORD)GetADCSupply() * 100ul * 825ul / 13568ul;
6
  sprintf(VoltageString, "%d.%.2dV\r\n", voltage/100, voltage % 100);
7
  TCPPutString(sktHTTP, (BYTE *)VoltageString);
8
  return;
9
}

Irgendwo im Hauptprogramm schreibst du dir eine Funktion die 
GetADCSupply() heißt. Im ersten Schritt lässt du die dann mal einen 
konstanten Wert zurückgeben, zb 500. Die Zahl lässt du ausgeben. Wenn 
das korrekt funtkioniert, implementierst du die eigentlich ADC Routine.
Mit PIC24 Code kann ich dir nicht dienen, nutze nur die PIC32 und PIC18.

von sven (Gast)


Lesenswert?

Hallo Stampede,

recht herzlichen Dank für deine Antwort. Es (die nicht Anzeige des 
Pot-Wertes) lag nich etwa wie vermutet an der Initialisierung des ADC, 
sondern da ich die Demo WEB Page genutzt habe und einige der LEDs 
rausgenommen habe, hätte ich auch den Code:
1
// Loop over all the LEDs
2
  for(i = 0; i < 8; i++)
3
    document.getElementById('led' + i).style.color = (getXMLValue(xmlData, 'led' + i) == '1') ? '#090' : '#ddd';

angleichem müßen.

Sprich wenn ich LED 1 bis 5 nutze:

1
// Loop over all the LEDs
2
  for(i = 1; i < 6; i++)
3
    document.getElementById('led' + i).style.color = (getXMLValue(xmlData, 'led' + i) == '1') ? '#090' : '#ddd';

So konnte der Pot Wert nicht angezeigt werden.

Ich werde aber auf jeden Fall auch mal deine Idee mit der Funktion 
aufgreifen. Schönen Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.