Hallo! Ich bin neu in der Welt der Mikrocontroller und habe folgende Frage: Ich möchte mithilfe eines ATMega 8 ein LC-Display über eine 4x4 atrix Tastatur ansteuern und werde dies in der Programmiersprache C versuchen. Jetzt wollte ich mal fragen was ihr mir raten würdet wie ich am besten anfange bzw was ihr sagt wie man dieses Programm aufbauen sollte. Erstes Problem wie kann icham besteb abfragen welche Taste im Moment gedrückt ist? PS: Habe leider auch noch wenig Erfahrung mit C. Danke im Vorraus!
Lukas Eckl schrieb: > PS: Habe leider auch noch wenig Erfahrung mit C. und scheinbar auch wenig Erfahrung mit "strukturiertem Vorgehen (analysieren, beschreiben etc)" im allgemeinen. Welche Programmiersprachen kennst du denn schon? > Ich möchte mithilfe eines ATMega 8 ein LC-Display > über eine 4x4 atrix Tastatur ansteuern Ein Display kann nicht über eine Tastatur "angesteuert" werden, den Begriiff hast du etwas ungeschickt ausgewählt. Du kannst dir eine Tastatur-Einlese-Routine schreiben oder vorhandene Routinen nutzen (nur du selbst weißt welche und wieviele Tasten du nutzen möchtest, und wie die an deinem uC angeschlossen sind), und dann aufgrund von Tastenbetätigungen einen klitzekleinen Moment später "irgendwas" machen Dann kannst du eine Displayroutine schreiben oder nutzen, die "irgendwas" darstellt (nur du alleine weißt wie groß dein Display ist, ob es zeichenorientiert oder "graphisch" darstellt, und wie das Display an deinem uC angeschlossen ist) Und dann kannst du dir überlegen, WAS WO WIE passieren soll, wenn du (zuvor) bestimmte Tasten gedrückt hattest. Wenn z.B. eine Taste "^" existiert und zuvor gedrückt wurde, dann kann das bedeuten, daß in einem Menuepunkt eine Zeile hochgescrollt wird, oder der Schnurrbart vom dargestellten Super-Mario oder gar der ganze Mario nach oben zuckt. Was du mit welcher TAste zu welchem Zeitpunkt unter welchen Randbedingungen bewirken willst weißt auch nur du alleine. Alle die Dinge die nur du alleine weißt sind spezifisch. Solange du da nichts drüber verrätst, oder dir keine Gedanken zu machst, ist viel Glaskugel-Raten und Würmer-aus-der-Nase-ziehen angesagt. PS: Du hast bestimmt einen Fahrrad-Tacho oder kennst einen der einen hat? Übungsaufgabe: Versuche zu beschreiben, wie der Tacho mit den paar am Tacho vorhandenen Tasten bedient wird, und was wann passiert (du brauchst dazu keine Programmierkenntnisse, nur eine genaue Beobachtungs- und Beschreibungsfähigkeit) Danach beschreiben DEINE Anwendung die du vorhast, mit ähnlichen Worten/Methoden > Erstes Problem wie kann icham besteb abfragen welche Taste im Moment > gedrückt ist? Nö, das ist dein 59. Problem oder so (siehe das zuvor gesagte)
Okay also ich versuche mein Projekt mal einfach zu erklären. Es soll ein Stelltrafo über einen Schrittmotor angetrieben werden. Der Schrittmotor wird durch den Mikrocontroller über eine Treiberstufe angerieben. Auf dem LC-Display soll ein Menü entstehen bei dem man die gewünschten Parameter durch rauf- runterscrollen auswählen kann und dann die gewünschte Werte über die 4x4 Tastatur eingeben kann bzw ändern kann (LC-Display: 2x16 Zeichen zeichenorientiert) Und jetzt wollte ich eben fragen ob ihr Ideen habt wie man das am besten anpacken kann bzw wie so ein Programmcode ca aussehen muss?
Lukas E. schrieb: > Und jetzt wollte ich eben fragen ob ihr Ideen habt wie man das am besten > anpacken kann bzw wie so ein Programmcode ca aussehen muss? Schrittweise arbeiten! Das ist das um und auf bei der Programmierung. Zerlege dein Komplettproblem in Teilprobleme. Wähle die Teilprobleme so, dass du dich nach jedem Teilschritt ein bischen mehr an deine Komplettlösung annäherst. Empfehlenswert ist es, wenn man erst mal mit der Ausgabe anfängt. Denn eine Möglichkeit, auf der du dir in weiterer Folge Zwischenergebnnisse, dich interessierende Variablen etc. ausgeben lassen kannst, ist ein wichtiges Hilfsmittel in der Programmentwicklung. Also ist es vernünftig, wenn man diesen Teil ganz am Anfang erledigt. Und dann: Schritt für Schritt das nächste Teilproblem dazunehmen. Wenn du noch am Anfang deiner Programmierkarriere stehst, dann eher kleine Schritte als Große! Du willst bei jedem Teilschritt immer so schnell wie möglich in einen Zustand kommen, an dem du diesen Teilschritt ausführlich testen kannst. Und erst dann, wenn du mit diesem Teilschritt zufrieden bist, kommt der nächste. Was du auf keinen Fall haben willst: Einen Haufen Programmcode, der nicht funktioniert und bei dem du keinen blassen Schimmer hast, wo du mit Fehlersuche anfangen sollst. Arbeitest du schrittweise und testest du jeden kleinen Teilschritt ausführlich, dann ist die Chance hoch, dass ein fehlerhaftes Verhalten vom letzten Teilschritt herrührt, den du als letztes ergänzt hast.
Lukas E. schrieb: > Und jetzt wollte ich eben fragen ob ihr Ideen habt wie man das am besten > anpacken kann bzw wie so ein Programmcode ca aussehen muss? Die von dir benötigten Software-Module sind schon erfunden, du brauchst sie nur geeignet zusammen zu kleben. Um das zu können, mußt du aber erst mal ein paar grundsätzliche Überlegungen anstellen und festlegen. 1. Einlesen einer Tastaturmatrix Frage vorneweg: Wofür brauchst du 16 Tasten, um in einem Menue herum zu navigieren? hoch, runter, Eingabe sind grad mal 3 Tasten. Was machst du mit den anderen 13 Tasten? > dann die gewünschte Werte über die 4x4 Tastatur eingeben kann > bzw ändern kann ok, also irgendwelche "Werte": Vermutlich Ausgangsspannung oder so? dann könnten die Ziffern 0..9, evtl. noch Korrekturtaste "nützlich" sein. Wie bewegst du dich im Nenue, welche Taste soll zu welchem Zeitpunktdrückbar sein, und welche Reaktion im display oder "extern" bewirken? 2. Ausgabe: Wie sieht dein Menue aus? Beschreibe umgangssprachnlich, was zu welchem Zeitpunkt "zu sehen" ist im Display (Menuepunkte) Welche Ausgabe soll im "Wirkbetrieb" erfolgen, z.B. wenn der Motor verfährt? 3. Ansteuerung des Schrittmotors Ist dein Treiber "nur" ein Leistungstreiber, d.h. machst du die Taktung der einzelnen Phasen selbst? Oder verwendest du einen fertigen Chip? Gibt es eine (absolute oder relative) Rückmeldung über die angefahrene Position? Alles Fragen, welche noch keine einzige Zeile Code benötigen, sondern erst mal durchdacht werden wollen. Dann braucht es natürlich noch einer real existierenden Hardware, auf dem das ganze läuft. Wie sieht die denn aus?
Danke für die Antworten! 1. Die 16 Tasten werden benötigt um die Parameter eingeben zu können. Also eben 0-9,Kommataste, Korrekturtaste und Eingabetaste und dann eben die Tasten zum Rau und Runterscrollen im Menü hatte ich mir gedacht. Im Menü soll man nur die Scroll- und Eingabetaste benützen können. 2.Die Menüpunkte sind: Prüfspannung, Prüfdauer, Anstiegszeit,Abstiegszeit und "Start". Ich habe mir das so vorgsetellt das man die Parameter auswählen kann und dann die entsprechenden Werte eingibt und es dann so einen Art "Startknopf" gibt. Welche Ausgabe wenn der Motor verfährt? Du meinst eine Art Errormeldung? 3. Ist ist nur ein reiner Leistungstreiber vorhanden. Wo findet man diese einzelnen Softwaremodule? Damit ich mal einen ungefähren Überblick bekomme wie soetwas ca aussieht und aufgebaut ist. Danke für eure Hilfe!
Lukas Eckl schrieb: > Danke für die Antworten! > > 1. Die 16 Tasten werden benötigt um die Parameter eingeben zu können. > Also eben 0-9,Kommataste, Korrekturtaste und Eingabetaste und dann eben > die Tasten zum Rau und Runterscrollen im Menü hatte ich mir gedacht. > Im Menü soll man nur die Scroll- und Eingabetaste benützen können. > > 2.Die Menüpunkte sind: Prüfspannung, Prüfdauer, > Anstiegszeit,Abstiegszeit und "Start". > Ich habe mir das so vorgsetellt das man die Parameter auswählen kann und > dann die entsprechenden Werte eingibt und es dann so einen Art > "Startknopf" gibt. > Welche Ausgabe wenn der Motor verfährt? Du meinst eine Art Errormeldung? Na, das ist doch schon mal ein Anfang. Jetzt nimm dir ein Blatt Papier, und überlege dir, was wann GENAU passieren soll. nach dem Einschalten könnte z.B. für 1 Sekunde folgendes auf dem Display Stehen: +----------------+ | Motortreiber | |Lukas Eckl v 1.0| +----------------+ danach könnte als "erste Menuemaske" folgendes auftauchen +----------------+ |*Prüfspannung | | Prüfdauer v| +----------------+ und die "*" Zeile kennzeichnet die Zeile, welche beim Betätigen der Eingabetaste ausgewählt werden würde. Das v bzw ^ kennzeichnet mögliche Tastenbetätigungen, und kann genau so als Symbol dargestellt werden. Zum Navigieren im Menue gibt es verschiedene Varianten. Ich hab mir jetzt mal spontan 2 Menueideen ausgedacht. Sicherlich gibt es noch verschiende Andere Möglichkeiten. Vorgeführt jeweils: Start-Menuezeile, und dann 2 * Taste "runter" = v gedrückt) Variante A: +----------------+ |*Prüfspannung | | Prüfdauer v| +----------------+ +----------------+ | Prüfspannung | |*Prüfdauer v| +----------------+ +----------------+ | Prüfdauer | |*Anstiegszeit v| +----------------+ Variante B: +----------------+ |*Prüfspannung | | Prüfdauer V| +----------------+ +----------------+ | Prüfspannung | |*Prüfdauer V| +----------------+ +----------------+ |*Anstiegszeit ^| | Abstiegszeit | +----------------+ Nach Auswahl des Eingabethemas (Prüfspannung, Prüfdauer ...) kommt dann noch die Eingabe der Werte selbst, auch da kannst du dir Gedanken machen was wann wo wie zu lesen oder einzugeben ist. ==> Wie du in deinem Menue rumnavigierst, und welche Eingaben wann wie möglich sind, weißt nur du alleine, bzw. liegt bei deinem persönlichen Geschmack. Da mußt du erst mal ein wenig in gedankliche Vorleistung treten. Nur du weißt schlussendlich was du da fabrizieren möchtest. Und, NEIN: du brauchst zu diesem Zeitpunkt noch gar nicht "wissen", wie man feststellt, daß die Taste 'v' gedrückt wurden war, welche sich an Zeile 3, Spalte 4 deiner Tastaturmatrix befindet. Vertraue einfach darauf, daß es Tasten-Einlese-Routinen gibt (geben wird), welche dir genau eine Taste zurück liefern. Das ganze geht also "vom Großen" "ins Kleine", man nennt das auch "Top-Down" Entwurf. Beim Hausbau dennkst du vermutlich auch nicht von Anfang an darüber nach, welcher Installateur wann und wie die Deckenlampe an der Decke montieren wird. Du vertraust einfach drauf, daß das "irgendwann, irgendwie" weiter geklärt wird, und das sowas möglich ist (eine Deckenlampe an die Decke zu schrauben) Andererseits: Es gibt schon vorgefertigte Menue-Routinen (Stöbere mal hier im Forum ein wenig rum mit der Suchfunktion), vielleicht ist ja deine bevorzugte Navigation und Darstellung dabei. Wenn nicht, mußt du halt ein wenig anpassen. Setzt aber voraus, daß man a) weiß was man machen möchte (wie es nachher aussehen soll), und b) daß man versteht wie das umzusetzen ist. > Welche Ausgabe wenn der Motor verfährt? Du meinst eine Art Errormeldung? Es gibt 2 "Zustände" deiner Mimik: a) Menue- bzw. Eingabemodus b) Funktionsmodus Ich meinte jetzt eher weniger Fehlermeldungen, sondern sowas: Was während deines Eingabemodus passiert ist ja klar, aber was erscheint auf dem Display, sobald der Motor losdreht? Bleibt der Menue-Text erhalten, oder steht da z.B. +----------------+ |Motor dreht sich| |linksrum | +----------------+ Was passiert, wenn der Motor fertig ist mit fahren, was steht dann auf dem Display? Nochmal zur Error-Meldung: Dazu müßtest du ja Fehler-Zuständ erkennen können, damit du diese signalisieren kannst. Wenn du z.B. einen Encoder an dem Motor befestigt hast, könntest du durch Wieder-Einlesen feststellen, ob sich der Motor wirklich in der von dir gewünschten Richtung dreht, und wieviele Schritte er gemacht hat. > 3. Ist ist nur ein reiner Leistungstreiber vorhanden. Mann, lasß dir doch nicht so die Würmer aus der Nase ziehen. Bauteilbezzeichnung, Schaltplan?
Ich möchte eines noch in den Raum stellen: Zur 'Eingabe' von Zahlen benötigt man nicht unbedingt eine Zifferntastatur. Die jeweils relevanten Zahlen sind ja nicht beliebig gross, so dass man mit 2 Tasten ('Zahl erhöhen' bzw. 'Zahl erniedrigen') erstaunlich gut zurecht kommt. Alles was man dazu benötigt wird einem von den PeDa Entprellroutinen schon zur Verfügung gestellt, so dass eine reine Zahleneingabe auch ohne Matrixtastatur, nur mit 3 Tasten, in kurzer Zeit realisierbar ist und, das ist schliesslich ein nicht unwesentlicher Punkt, auch komfortabel benutzbar ist. Aus meiner Sicht sieht die Sache so aus, dass man mit minimal lediglich 3 Tasten eine komfortable und benutzbare Gerätesteuerung aufbauen kann, in der durchaus auch Zahleneingaben gut behandelbar sind. Speziell bei letzterem ist es der in den PeDa Routinen enthaltene Autorepeat, der ein wesentliches Schlüsselelement ausmacht.
So wie Variante A hatte ich mir das ungefähr vorgestellt. Wenn man einen Menüpunkt (z.B Prüfpsannung) ausgewählt hat habe ich mir vorgestellt das da z.b:"_ . V" erscheint und man hier den gewünschten Wert eingeben kann. Wenn der Motor in die vorgegebene Positiion gefahren ist sollen die Restwerte wie Restprüfdauer und Prüfspannung usw angezeigt werden.
Lukas Eckl schrieb: > ausgewählt hat habe ich mir > vorgestellt das da z.b:"_ . V" erscheint und man hier den > gewünschten Wert eingeben kann. und wie soll dieser Wert genutzt werden? Was soll er bewirken?
Wegstaben Verbuchsler schrieb: > Lukas Eckl schrieb: >> ausgewählt hat habe ich mir >> vorgestellt das da z.b:"_ . V" erscheint und man hier den >> gewünschten Wert eingeben kann. > > und wie soll dieser Wert genutzt werden? Was soll er bewirken? Yep. Ich fang eigentlich meistens ungekehrt an. Ich fang mit der inneren 'Maschine' an, die mit den Werten arbeitet und die entsprechenden Pulse\Spannungen\was_auch_immer generiert. Die Parameter mach ich einfach mal als Variable, die ich zum Testen einfach mal mit konstanten Werten besetzte. Und wenn die dann funktioniert, dann hab ich eine vollständige Sammlung aller notwendigen einstellbaren Parameter und überlege mir, wie eine entsprechende sinnvolle Menüsteuerung dafür aussehen könnte.
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.