Forum: Mikrocontroller und Digitale Elektronik Ausgabe ADC auf HDD44780


von Andreas G. (beastyk)



Lesenswert?

Moin Leute,

ich hab mal ein Poti mit dem AN1 des PIC18F4455 verbunden und wollte mir 
die Spannung auf meinem DV-20208 (HDD44780 komp.) ausgeben lassen.
Nachdem ich wegen float2string einige Probleme hatte habe ich mich 
entschlossen mit Proteus durchzuspielen.
Mein Problem ist nun wenn ich die Prozessor Clock auf 4MHz hab in 
Proteus der Wert immer wieder korrekt an die Stelle geschrieben wird wo 
ich es hinhaben möchte (XLCDCommand(0x86)). Stelle ich nun aber 20 MHz 
ein springt er nicht auf diese Stelle zurück sondern überschreibt alles 
fröhlich, immer wieder und über beide Zeilen des LCD.
Bei der XLCD Erstellung über Maestro hab ich 20MHz eingegeben, bei der 
Berechnung der Delays bin ich auch von 20MHz ausgegangen.
Ich hab das Gefühl ich hab da was falsch gemacht, nur komm ich nicht 
drauf was es sein könnte...
Bin froh über jede Hilfe!

Gruß
Andi

von Karl H. (kbuchegg)


Lesenswert?

Tja.

Nur ist das hier
1
XLCDInit();                             //initialize the LCD module
2
XLCDDelay4ms;

kein Funktionsaufruf!

So...
1
  XLCDDelay4ms();
... wäre es einer.

(und das ganze in weiterer Folge noch ein paar mal)

von Andreas G. (beastyk)


Lesenswert?

Ja, da haste recht!!!
Das Delay dort hab ich eigentlich eingeführt weil ich dachte ich mach da 
vom Timing irgendwas falsch.
Mit oder ohne dem Delay an der Stelle bleibt das Problem bestehen!
Aber danke für den Hinweis!
Ohh, noch mehr davon, hatte eben nicht zuende geschaut, ich mach das mal 
schnell wieder ok....

Gruß
Andi

von Karl H. (kbuchegg)


Lesenswert?

Andreas G. schrieb:
> Ja, da haste recht!!!
> Das Delay dort hab ich eigentlich eingeführt weil ich dachte ich mach da
> vom Timing irgendwas falsch.
> Mit oder ohne dem Delay an der Stelle bleibt das Problem bestehen!
> Aber danke für den Hinweis!

Ich weiß ja nicht, ob du nicht in den LCD-Funktionen denselben Fehler 
gemacht hast. Auf jeden Fall stinkt deine Fehlerbeschreibung 20 Meter 
gegen den Wind nach einem Timing-Problem.

von Karl H. (kbuchegg)


Lesenswert?

Mal was anderes
1
....
2
ConvertADC(); 
3
while(BusyADC())
4
ADCresult = ReadADC();
5
....

so, so. Solange der ADC busy ist liest du ihn aus. Nur wenn er dann 
fertig ist, dann liest du nichts mehr aus. Hmmmm. Das erscheint mir ... 
nicht besonders logisch. ALso ich würde warten, solange der ADC busy ist 
und erst danach auslesen. Aber jeder wie er will.

von Andreas G. (beastyk)


Lesenswert?

Ohhh, danke Karl Heinz!
Auf einmal findet er die Zeit sich auch um den Sprung zu kümmern (hach).
Ich werde es jetzt gleich mal auf den Breadboard ausprobieren.

Gruß
Andi der Schussel

von Karl H. (kbuchegg)


Lesenswert?

Andreas G. schrieb:

> Andi der Schussel

Das hat mit Schussel nichts zu tun. Eher schon damit, dass die 
Einstellung "Den Code mach ich erst hinterher optisch schön" der falsche 
Weg ist.

von Andreas G. (beastyk)


Lesenswert?

Aber ich muß doch das ConvertADC abwarten und erst wenn er damit fertig 
ist kann ich den Wert übergeben. Natürlich gehen mir danach alle 
Messwerte flöten bis wieder ConvertADC aufgerufen wird. Darüber hab ich 
im Moment aber nicht weiter nachgedacht weil mir erstmal wichtig war das 
mein LCD einen Messwert anzeigt.

von Karl H. (kbuchegg)


Lesenswert?

Andreas G. schrieb:
> Aber ich muß doch das ConvertADC abwarten und erst wenn er damit fertig
> ist kann ich den Wert übergeben.

Ja, musst du.
Tust du aber nicht.
Rück mal deinen Code sauber ein, vielleicht siehst du es dann.

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.