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
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
Wo liegt denn das Problem genau? Ausgabe von Zahlen auf dem LCD? Generell Ausgabe auf dem LCD? Einlesen über ADC? Verarbeiten der ADC Werte?
Das Problem ist das Einlesen und Verarbeiten der ADC Werte
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!
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
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)
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.
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?
Hi, die Funktion das ich eine 10Bit Ausgabe auf dem LCD bekomme funktioniert. Wie bekomme ich nun die 0-1023 in 1-7?
[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.
Man kann einen Rechner auch rechnen lassen ;-)
1 | uint8_t lcd; |
2 | uint16_t adc; |
3 | |
4 | lcd=(adc*7/1023)+1; |
Korrektur: lcd=(adc*7/1024)+1; sonst ist der adc Wert 1023 schon 8.
Es geht sogar noch schneller und einfacher:
1 | lcd=(adc>>7); |
... wenn 0 - 7 erlaubt ist. Sonst die Berechnung oben...
Hallo Steffen S., wenn Dir der Anfang schwer fällt, ist vielleicht eine andere Programmiersprache für Dich einfacher. Pascal (mikroPascal) oder LunaAVR ?
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?
hp-freund schrieb: > Was soll denn kleiner oder gleich 145 sein? Jetzt wo du es sagst, da fehlt ja der "ADCW". Danke =)
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?
//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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.