Forum: Mikrocontroller und Digitale Elektronik Poti benutzen mit AVRStudio und ATmega8 MK2


von Steffen S. (steffen_s61)


Lesenswert?

Hallo,

Ich möchte auf den MK2 Board Verbauten Poti benutzen um auf einem LCD 
die Zahlen 1-7 anzeigen zulassen. Da ich nun seit fast 1 Woche das Netz 
durchsuche und nicht weiter komme, hat jemand ein Beispielprogramm das 
Ich mir Umschrieben kann oder einen Hilfreichen Link?

Bin absoluter Neuling was Mikrocontroller angeht.

Danke schon mal für die Antworten

von Sören K. (foxalem)


Lesenswert?

Hi,

einen Code kann ich dir nicht bieten, allerdings einen Anreitz.

Um das Poti gut auswerten zu können musst du erstmal feststellen welche 
Richtung gedreht wird (Rechts rum Ohm runter, Links rum Ohm hoch z.b.)
Diesen Wert kannst du mit dem ADC auswerten (Analog-Digital-Converter). 
Der Rest ist Timing, sache. Damit die Werte nicht springen solltest du 
nach jeder Registrierung eienr Drehung einen delay von z.b. 20ms 
reinbringen.

Mfg

von Thomas H. (Firma: CIA) (apostel13)


Lesenswert?

Wo liegt denn das Problem genau?

Ausgabe von Zahlen auf dem LCD?

Generell Ausgabe auf dem LCD?

Einlesen über ADC?

Verarbeiten der ADC Werte?

von Steffen S. (steffen_s61)


Lesenswert?

Das Problem ist das Einlesen und Verarbeiten der ADC Werte

von Thomas H. (Firma: CIA) (apostel13)


Lesenswert?

Bedeutet also du bist jetzt schon in der Lage Zahlenwerte auf dem LCD 
Auszugeben? Wenn dem So ist und Du auch noch beim Anschluss des LCD 
darauf geachtet hast das die Pin's für die ADC's frei sind zumindest 
einer sollte die erste Aufgabe für dich darin bestehen eine Funktion zu 
schreiben deren Funktionsparameter ein uint8_t ist und die Werte von 0 - 
255 übergeben bekommt und proportional zu dem Übergebenen Wert von 0 - 
255 auf dem Display die Zahlen 0 - 7 ausgibt. Wenn Du die Funktion hast 
kommt der nächste Schritt.

Und Vermeide dabei die Benutzung von Float!

von Dietrich L. (dietrichl)


Lesenswert?

Steffen S. schrieb:
> Das Problem ist das Einlesen und Verarbeiten der ADC Werte

Zum Einlesen hilft vielleicht das:
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Analoge_Ein-_und_Ausgabe#ADC_.28Analog_Digital_Converter.29

Je nach verwendetem µC sind die Register und Bits ggf. anzupassen. Dazu 
hilft das Datenblatt Deines µC.

Gruß Dietrich

von Steffen S. (steffen_s61)


Lesenswert?

Dietrich L. schrieb:
> Zum Einlesen hilft vielleicht das:
> 
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Analoge_Ein-_und_Ausgabe#ADC_.28Analog_Digital_Converter.29

Leider Hilft mir das nicht wirklich weiter. Hat dein keiner ein kleines 
Bsp. Programm oder zumindest mal den Anfang das ich damit Arbeiten kann? 
(auch wen dann nur eine LED aufleuchtet oder sowas)

von Hubert G. (hubertg)


Lesenswert?

Das Tut ist doch gut, wobei steckst du denn?
Wenn ich dir aus einem meiner Programme den ADC-Teil herausschneide 
kannst du damit auch nichts anfangen.
Zeig mal was du schon hast, dann kann man dir sicher weiterhelfen.

von Thomas H. (Firma: CIA) (apostel13)


Lesenswert?

Hast Du denn schon die Funktion fertig, die Dir aus dem 8 oder 10 Bit 
ADC Wert deine gewünschte Ausgabe  von 0 - 10 auf dem LCD realisiert, 
oder möchtest Du die auch von anderen programmiert bekommen?

von steffen_s61 (Gast)


Lesenswert?

Hi, die Funktion das ich eine 10Bit Ausgabe auf dem LCD bekomme 
funktioniert. Wie bekomme ich nun die 0-1023 in 1-7?

von Hubert G. (hubertg)


Lesenswert?

[c]
if ((adcw >0)&&(<= 145)){
   lcd=1;
   }
if ((adcw >=146)&&(<=290)){
   lcd=2;
   }
[c/]
Und so weiter. Switch/case geht natürlich auch.
Den Wert von lcd gibst du dann auf deinem LCD aus.

von hp-freund (Gast)


Lesenswert?

Man kann einen Rechner auch rechnen lassen ;-)
1
uint8_t lcd;
2
uint16_t adc;
3
4
lcd=(adc*7/1023)+1;

von hp-freund (Gast)


Lesenswert?

Korrektur:

lcd=(adc*7/1024)+1;

sonst ist der adc Wert 1023 schon 8.

von Steffen S. (steffen_s61)


Lesenswert?

Vielen Dank für die schnellen Antworten und Hilfen.

von hp-freund (Gast)


Lesenswert?

Es geht sogar noch schneller und einfacher:
1
lcd=(adc>>7);

von hp-freund (Gast)


Lesenswert?

... wenn 0 - 7 erlaubt ist. Sonst die Berechnung oben...

von Steffen S. (steffen_s61)


Lesenswert?

Erlaubt ist nur 1-7 ;-)

von hp-freund (Gast)


Lesenswert?

Na dann wirds wohl nichts mit schieben ...

von Karl M. (Gast)


Lesenswert?

Hallo Steffen S.,

wenn Dir der Anfang schwer fällt, ist vielleicht eine andere 
Programmiersprache für Dich einfacher.

Pascal (mikroPascal) oder LunaAVR ?

von Steffen S. (steffen_s61)


Lesenswert?

Hallo Karl M.,

leider bin ich an C und den AVR gebunden.

von Steffen S. (steffen_s61)


Lesenswert?

Leider kommt bei mir die Fehlermeldung "expected expression before '<=' 
token"
der C-Code sieht so aus:

if ((adcw >0)&&(<= 145)) // LCD Ausgabe 1
{
   lcd=1;
}

usw.

Wo liegt der Fehler?

von hp-freund (Gast)


Lesenswert?

Was soll denn kleiner oder gleich 145 sein?

von Steffen S. (steffen_s61)


Lesenswert?

hp-freund schrieb:
> Was soll denn kleiner oder gleich 145 sein?

Jetzt wo du es sagst, da fehlt ja der "ADCW".

Danke =)

von Steffen S. (steffen_s61)


Angehängte Dateien:

Lesenswert?

Leider bekomme Ich auf dem LCD immer noch 0-1023 angezeigt.
Hab mal den C-Code mit angehängt. Kann mir jemand sagen wo der Fehler 
jetzt ist?

von hp-freund (Gast)


Lesenswert?

//ADC Wert einlesen auf kanal 0
  analogwert = adc(0);


  //Wandeln des Int in Ascii und Ausgeben
  lcd_string(itoa(analogwert, buffer, 10));


es wird ja auch analogwert ausgegeben nicht lcd

von Hubert G. (hubertg)


Lesenswert?

Das mit dem zweiten ADCW habe ich wohl zu schnell hingeschrieben. Aber 
ein bisschen mitdenken schadet ja nicht.
Den ADC bei jedem Aufruf neu initialisieren ist auch nicht notwendig.

von Steffen S. (steffen_s61)


Lesenswert?

Ok, wer mitdenkt findet die Fehler ;)

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.