www.mikrocontroller.net

Forum: Projekte & Code pic HD44780 graphic demo


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: helferlein (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
16F688, HD44780, 20Mhz Quartz, 1k pullup für MCLR,
10k Spannungsteiler für audiomasse,
audio auf porta.2, button auf porta.1

http://www.youtube.com/watch?v=ikDbasRm2cc
http://www.youtube.com/watch?v=QrRBPopTP5E


danke an das forum und seine community.

Autor: [P] (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr hübsch und erinnert mich daran das ich schon lange mal in die neue 
Portishead reinhören wollte.

Autor: Julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Respekt. Sieht nicht schlecht aus.

Könntest du evtl. sagen, welches Display du bei dem Video
http://www.youtube.com/watch?v=QrRBPopTP5E benutzt hasst?
Könntest du auch evtl. den Quellcode (oder Teile) offen legen?

MfG
Julian

Autor: helferlein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bei beiden videos wird das gleiche HD44780 kompatible
textdisplay aus einem alten fax verwendet.
einmal original, und einmal mit gedrehtem polfilter,
zwei farbigen filterfolien und led hintergrundbeleuchtung.

der sourcecode im anhang beinhaltet alles was auf den videos
zu sehen ist, es sind keine weiteren header oder libraries notwendig.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
helferlein wrote:

> der sourcecode im anhang beinhaltet alles was auf den videos
> zu sehen ist, es sind keine weiteren header oder libraries notwendig.

Kann nicht sein.
Wo sind die Funktionen wie setup_adc_ports usw.?
Ebenso sieht z.B. die printf nicht nach dem aus, was ein normaler C 
Compiler mitliefert.

PS: Krasser Programmierstil.

Autor: helferlein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
setup_adc_ports ist eine compilerfunktion von CSS.
diese "funktionen" schreiben alle nur das byte
ins passende register.ich denke damit halten sie
den compiler flexibel für alle controllertypen.

read_adc(1) = adc nur starten
read_adc(6) = adc nur auslesen
read_adc() = beides (blockierend)

gibt es abs() und bit_test() für den avr ?

das printf übergibt die bytes(chars) seriell an den
angegeben stream. normal ist das dput,
die gput-funktion ist für graphik. beide sind im code.
als ersatz könnte man vielleicht einen zeiger über
den text laufen lassen.(mit sprintf für zahlen)

ich weiß nicht wie diese dinge bei anderen compilern
gelöst sind, ich helfe aber gerne beim portieren.

PS: danke :)

Autor: Ben ■. (bloxx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: Du bist unter Hackaday geadelt ;-)

http://www.hackaday.com/2008/09/05/lcd-pic-graphics-demo/

Autor: holger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier eine Version für AVR und Winavr.
Ist nur ein Quickhack, aber geht bei mir.
Könnte man noch einiges optimieren was den RAM Verbrauch angeht.

Nicht für Anfänger geeignet!

@ Benedikt K.
>PS: Krasser Programmierstil.

Du sagst es.

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> @ Benedikt K.
>>PS: Krasser Programmierstil.
>
> Du sagst es.

Naja, du brauchst zumindest keinen Obfuscator mehr ;-)

MfG
Thomas Pototschnig

Autor: feel_the_bass (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Please can you publish a circuit scheme.I want to experiment with it in 
Proteus.

Autor: UBoot-Stocki (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe versucht zu verstehen, was hier 
(http://www.youtube.com/watch?v=ikDbasRm2cc) passiert. Allerdings 
erschliesst es sich mir nicht 100% wie das funktioniert.
Dass ich pro Display 8 frei definierbare Zeichen habe ist mir klar. Mir 
ist auch klar, dass im Video, mindestens bei den Zahlen, die 
Cursor-Zeilen mitverwendet sind.
Da geht es aber schon los: Meine Displays haben eine Unterbrechung (ohne 
Pixels) zwischen Zeile 1 und 2. Daher würden die Zahlen in der Mitte 
immer Unterbrochen werden. Im Video scheint das nicht der Fall zu sein 
(kann ich nicht ganz genau erkennen - zu unscharf).
Das display im Video hat anscheinend 16x2 Zeichen. Es sieht so aus, als 
ob hier 4x8 frei definierte Zeichen verwendet werden. das würde aber nur 
gehen, wenn das Display 4x pro Zyklus geschrieben wird.
Genau dies konnte ich aber dem c-Code nicht entnehmen ...

Also wie wirds gemacht ?

Gruß

Andreas

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Also wie wirds gemacht ?

Ich habe auch ein zweizeiliges Display benutzt.
Die Ausgabe erfolgt nur in der ersten Zeile.
Die öffnende und schliessende Klammer und die Zahlen
werden im Textmodus ausgegeben. Also ganz normal.
Zwischen den rechteckigen Klammern werden die Zeichen
0,1,2,3,4,5,6,7 nebeneinander gelegt. Nicht die ASCII
Zeichen 0,1,2...7 sondern die selbstdefinierten Zeichen.
So hat man quasi ein 8*5 = 40 Pixel breites und 7 Pixel hohes
Minigrafikdisplay. Die Ausgabe erfolgt dadurch das man einfach
das CG-RAM beschreibt, bzw. simple gesagt die selbstdefinierten
Zeichen dauernd verändert.

Autor: Verliebter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Holger,

was Du beschreibst ist klar - so habe ich es auch schon gemacht. Auch 
die Balkengrafik kann man so machen, da 7 Zeichen für Beliebig viele 
Balken ausreichen.

In der obigen Demo wird allerdings das KOMPLETTE Display grafisch 
angesteuert - er hat die dreistellige, doppelthohe Zahl, was 6 Zeichen 
verbraucht und dann hat er noch das Oszi-Teil anscheinend gleichzeitig.

Da man pro CONTOLLER nur 8 freidefinerte Zeichen haben kann, würde ich 
gerne Wissen ob er das Display in 4 Zyklen nacheinander beschreibt 
(4*8=32 Zeichen - 16 pro Zeile) oder was der Trick ist.

Gruß

Andreas

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>In der obigen Demo wird allerdings das KOMPLETTE Display grafisch
>angesteuert

Nein, das stimmt nicht.

printf(dput,"%c%Lu   ",126,get_timer1());

//###################################################################### 
#############
void dbyt(uint8_t r, uint8_t n)
//###################################################################### 
#############
{
  if(r) {LCD_RS_ON;}
  else {LCD_RS_OFF;}
  LCDWriteNibble(n>>4);
  LCDWriteNibble(n&15);
  delay_us(25);
  delay_us(25);
}  // min delay may vary with lcd

//#########################
void dput(uint8_t c)
//#########################
{dbyt(1,c);}

Ganz normale Textausgabe!

Autor: Verliebter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe mir das besagte Video nochmals genauer angesehen. Im 
anhängenden Bild sieht man, dass es ein 16x1 Display ist - Alles klar! 
Du hast recht ist "standard".

Gruß

Andreas

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




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.