www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Grafisches Display und analoge Uhr


Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute,

2 Fragen, wozu ich Info oder Links bräuchte (In der Suche war nicht so
das dabei, was ich brauche).

1. Wie könnte ich auf einem grafischen Display eine "analoge" Uhr
realisieren? Ich dachte da bisher an ein Bild im Speicher, wo der Kreis
drauf ist (Der braucht dann nicht mehr gezeichnet werden). Anschließend
muss ich irgndwie über eine Lookup-Table die Position der Linie auf dem
Display über die Sekunden/Stundenzahl herausfinden und anschließend dort
zeichnen. Würde mir gerne aber mal andere (einfachere?) Realisierungen
ansehen.

2. Ich bräuchte eine einfache Routine um eine Zahl durch 8 zu teilen,
und gleichzeitig den Rest, der überbleibt herauszukriegen. Das teilen
ansich ist ja durch ein paar Schiebebefehle zu erreichen, aber was ist
mit dem Rest? Kann ich den irgndwie durch shiften des Carrybits in ein
zweites Register berechnen?

Ich danke euch schonmal.

Autor: Thorsten Fritzke (thorsten)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zu 2.

in c oder asm?

gruß

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Würde mir gerne aber mal andere (einfachere?) Realisierungen
> ansehen.

Wobei hast du Schwierigkeiten?
Eine Lookup Tabelle, die dir für Zahlen von 0 bis 59
die jeweiligen Endpunkte der Linie angibt, sollte doch
kein Problem sein.

> aber was ist mit dem Rest?

Den Rest kriegst du indem du mit 0x07 eine UND-Verknüpfung
machst. Geht aber nur deshalb, da 8 eine 2-er Potenz ist.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zur Uhr:
ansonsten ist das eine simple Anwendung von Trigonometrie
in einem rechtwinkeligen Dreieck.

  x = center.x + cos(alpha) * radius;
  y = center.y + sin(alpha) * radius;

Die Linie wird dann von center.x/center.y nach x/y gezogen.

Das ist das Grundprinzip von Radiusvektoren die von einem
Punkt aus in einem bestimmten Winkel weggehen.
An den Details muss man natürlich arbeiten:
* die Winkelfunktionen laufen gegen den Uhrzeiger
  -> irgendwo muss es einen Vorzeichenumkehr geben
* die Uhr hat ihren 'Nullpunkt' 'oben', wohingegen die
  Winkelfunktionen ihren 'Nullpunkt' 'rechts' haben.
  Einfach mal ein bischen tüfteln. Ist nicht so schwer zu
  lösen.
* Und dann brauchst du natürlich Winkelfunktionen.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du könntest wie bereits erwähnt mit LookUp-Tables für die Position der
Endpunkte der Linie arbeiten.
Wenn du den Bresenham-Algorithmus für Linien verwendest, brauchst du
nix mit Winkelfunktionen (ausser auf dem Papier für die Endpunkte).

Ralf

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Das Projekt ist in Assembler schon halbfertig.

Ok, dann war meine Idee mit der Endpunkte-Tabelle doch nicht so
schlecht grüübel. Einen passenenden Algorithmus zum Linien zeichnen
werde ich schon finden (Karl Heinz Buchegger's oder Ralf's
Bresenham). Bei Karl Heinz's Algo bräuchte ich noch ne Cosinus/Sinus
Tabelle... Aber Bresenham sagt mir da mehr zu.



>>Den Rest kriegst du indem du mit 0x07 eine UND-Verknüpfung
machst. Geht aber nur deshalb, da 8 eine 2-er Potenz ist.

Danke. Jep, habe mir schon gedacht, dass es bei 2er Potenzen einfacher
ist. Aber mehr brauche ich halt nicht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Linien zeichnen werde ich schon finden (Karl Heinz Buchegger's
> oder Ralf's Bresenham)

Du hast mich missverstanden:
Ich gehe genaso davon aus, dass du eine Linienzeichnen-
Funktion bereits zur Verfügung hast. Mit den sin/cos berechnest
du lediglich wo die Linie enden soll. Gewissermassen ersetzt
du damit die Tabelle durch eine Formel.

Dein neues erstes Ziel muss also lauten:
Linien zeichnen. Und dazu nimmt man nun mal sein Urzeiten
(also seit den 60-er Jahren :-) den 'Bresenham'

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.