Ich glaube, da eine 100 bei den Widerständen erkennen zu können. Würde mich aber da jetzt nicht darauf festlegen wollen :|
Druckbare Version
Ich glaube, da eine 100 bei den Widerständen erkennen zu können. Würde mich aber da jetzt nicht darauf festlegen wollen :|
Wie wärs wenn jeman mal einen Wiki-Eintrag macht über die Anbsteuerung von graphischen LCDs? Mit hochaulösendem Plan etc...
Werde gerne was schreiben wenn dann mal ein Plan funktioniert hat. Aber bis jetzt hab ich weder das Display, noch einen großartigen Plan erstellt. Bin grad in der Diplomarbeit und ziemlich beschäftigt. Hoffe aber trotzdem, dass ich mal ein bissle Zeit nebenher fürs Hobby finde und wenn dann alles geklappt hat, dann isses nicht schwer mal was zusammenzuschreiben und ein Bild anzuhängen, auf dem man auch was erkennen kann.
Kann mir jemand sagen, ob diese 7372800 Hz was zu bedeuten haben (also im Sinne von "ich brauch unbedingt diesen Quarz, sonst stimmt mein Timing fürs Display nicht"?) oder ob der Mensch, der das Ding gebaut hat, einfach so einen übrig hatte und ihn deshalb nahm? Weil wenn es nix ausmachen würde, dann würde ich wohl lieber den 16MHz nehmen, der hier noch in meiner Kiste wartet anstatt mir einen neuen zu kaufen.
Ich denke mal, dass du jeden Quarz nehmen kannst, sonst würde das ausdrücklich in der BASCOM-Hilfe stehen.
jon
Hallo,
die Reihenwiderstaende fuer PF0 - PF3 vom Touchscreen haben jeweils einen Wert von 100 Ohm.
Und der ATMega128 - den ich hier zur Ansteuerung verwendet habe - wird mit nem 16Mhz Quarz getaktet. Man darf nicht vergessen, es handelt sich um ein T6963-Display. Das ist nichts besonderes. Ich denke da kann man vom internen 1Mhz Takt bis hin zum externen 16 Mhz alles benutzen. Das ist wohl eher unkritisch.
MfG Digitali
So ich habe mein Display von der Post abgeholt.
auf den ersten Blick
JA ES IST UNBESCHADET ANGEKOMMEN
Ware erhalten/1. Zustellung am Do. 23.08.2007
Bild hier
Die Briefsendung war als 'Gift' also Geschenk deklariert und wurde per Einschreiben zugestellt.
Die Bundezollbehörden IPZ FFM haben den Brief geöffnet und kontrolliert (Vermerk/Aufkleber).
IPZ = Internationales Postzentrum, FFM Frankfurt am Main
Der "Brief" war sehr gut gepolstert, so dass das LCD unbeschadet ankam
(Luftpolster-Umschlag uns das LCD auch vielfach mit Schaumstofffolie umwickelt).
Auch der SMD-ZF Stecker für das Touch-Screen war beigepackt.
Grmpf...
Noch nix da...
Naja, das zwingt mich wenigstens in der Planungsphase zu bleiben bis endlich was kommt. Hab mich endlich mal mit Eagle beschäftigt und hab jetzt wahrscheinlich immernoch genug Zeit die fehlenden Teile zu bestellen bis das Teil ankommt.
Wann is denn dein Status auf "shipped" gegangen? Bei mir kam am 15. die Email mit "your order ...blah... shipped". D.h. 8 Werktage seither. Kann wohl noch dauern aber ich erwarte schon, dass ich nächtes Wochenende was zum Spielen hab.
Also ich habe die MailZitat:
Zitat von BiGF00T
- New Status is:
__________________________________________________ __________
Shipped
__________________________________________________ __________
am 14.08.07 16:52:06 Uhr erhalten,
- Bestellt am So. / Mo. (5.8./6.8.)
Überweisung am Fr. (12.8.)
Status Shipped am Di. 14.08. (Mi. 15.8.) Ich hab sogar eine eMail-Benachrichtigung über die Auslieferung erhalten
Ware erhalten am Do. 23.08.2007
Also zw. Überweisung (Einreichung bei der Bank) und dem Statuswechsel sind dann nach Albert Einstein 2 Tagevergangen (ohne Berüchsichtigung der Zeitwerschiebung / Datumsgrenze)
Und zwischen Zahlungseingang und erhalt der Lieferung sind es dann wieder 9 Tage geworden.
Es hätte mich nicht gewundert wenn es doppelt so lange gedauert hätte.
Alles in allem sind 11 Tage eigentlich ganz akzeptable Zeiten.
PS: Ich hab gerade mal grob meine EAGLE-LIB Kontrolliert,
also die V2 sieht garnicht so schlecht aus.
Lediglich bei den Montagebohrungen (oben) bin ich mir nicht ganz sicher,
das könnte aber auch am Ausdruck (Papier hat sich etwas gewellt) liegen.
Hmmm... Ok, also ich hab es am 6. oder so bestellt, am 11. bezahlt und (dein Kalender geht falsch... 12.08. war ein Sonntag ;)) Ok, könnt so passen. Hat bei mir dann auch noch 3 Werktage von der Überweisung bis zur "shipped"-Meldung gedauert. Ab da sollte es ja dann - falls es so wie bei dir klappen sollte - noch vielleicht bis nach diesem Wochenende dauern. Ok, das kann man echt abwarten. Auch wenn ich gierig bin das Ding endlich zu haben. Die Zeiten sind echt in Ordnung.
Dann werd ich heut wohl ne Reichelt-Bestellung rausjagen. :) Sonst wart ich nächstes Wochenende dann auf andere Kleinigkeiten.
Wie erstellt man denn eigentlich seine eigene Lib von einem Bauteil, das es so noch nicht gibt? Hab mal einen Eintrag in die Wiki-Wunschliste heute hinterlassen. Das würde mich echt mal interessieren. Hast du für das LCD ein vorhandenes Bauteil editiert das ungefähr gleich war oder hast kann man mittels irgendeines Editors da Bauteile erstellen mit Beschriftung und Form und allem, was so dazu gehört?Zitat:
Zitat von darwin.nuernberg
Hmmm... Ein tutorial im RN-Wissen könnt glaub trotz allem nicht schaden. Eine leicht(e?) Aufgabe ist es für Anfänger trotzdem nicht.Zitat:
Zitat von eagle webseite
EDIT: Ok, hab mal was geschrieben... Is aber weder überragend, noch komplett.
https://www.roboternetz.de/wissen/in...lber_erstellen
Es gibt eine Einführung als PDF bei Cadsoft:
ftp://ftp.cadsoft.de/eagle/program/4...torial-ger.pdf
ftp://ftp.cadsoft.de/eagle/program/4...manual-ger.pdf
Der Rest muss man sich selber beibringen,
am besten man kopiert sich eine Lib und "bastelt" damit herum.
Ich habe mit das Bauteil komplett selbst erstellt unter Zuhilfenahme des Datenblattes.
- Erst mal eine neue Lib erstellt,
- dann ein neues Package erstellt
- Den Raster entsprechend umgestellt (mm)
- Dann erstmal das "Outline" un die Pad's erstellt
- Symbol gezeichnet
und die beiden dann als Device zusammengewurstelt.
Im Symboleditor ist es allerdings nicht möglich zwei gleiche Pins mit gleichem Namen zu vergeben, also bekommen die einen Zusatz (z.B. VCC@1 und VCC@2 beide als PWR Im Schaltplan sieht man dann nur VCC) im Device werden die dann jeweils einem PAD zugeordnet (connect).
EDIT:
Achja nochwas: Du kannst auch zwei Symbole in einem Device zusammen verweden. z.B. VCC und GND (beide PWR) als seperate Symbole und z.B. ein TTL-Gatter.
Die Power-Symbole stellst Du im Device den Add-Level auf Request, dan werden die nur auf Anforderung (invoke) im Schaltplan gezeichnet.
Im Device musst Du wieder die Zuordnung von PAD und Pin richtig verbinden. Jetzt werden Im Schaltplan die Power-Planes garnicht gezeichet aber im Layout dennoch berücksichtigt. (Schau Dir doch Mal die TTL-Library 74ttl-din.lbr an).
Alles halb so Wild, je nachdem wie Detailgenau das ganze werden soll (blos nichts übertreiben). Wenn man erst mal die Grundlagen hat ist der Rest doch ziemlich einfach, Aufwand ist es dennoch, besonders je mehr Pins das ganze Teil hat.Zitat:
Zitat von BiGF00T
Man sollte sich auf jeden Fall immer einen Ausdruck mit dem Echten Bauteil vergleichen, um sicher zu stellen dass auch wirklich alles passt.
Tja das kommt, zumindest bei mir, häufiger vor als gedacht.Zitat:
Zitat von eagle webseite
Manchmal ist das selber erstellen sogar schneller als nach einem Passenden Device zu suchen, dass dann auch noch kontrolliert und ggf. geändert werden muss.
Klarsoweit?
Cool, könntest du ein bissle auf meinem neu angelegten RN-Wiki-Artikel mit dem Wissen wüten? Ich hab bissle was zusammengepfuscht aber da ich vorgestern das erste Mal überhaupt mal Eagle benutzt habe, konnte ich halt nur mal den generellen Ablauf reinschreiben. Du scheinst mehr Erfahrung damit zu haben.
Irgendwie sind alle Files vom Cadsoft FTP bei mir nicht verfügbar :/ (Error 404)
So, ist schonmal ein Anfang. Allerdings fehlt noch etwas: Wenn du deine Lib gespeichert hast, kannst du sie direkt verwenden. Du solltest aber in Eagle hinter deine Lib den grauen Punkt durch anklicken grün färben, damit die Lib mit geladen wird.
Ich will ja nicht motzen oder mosern, hätte es dann selber machen müssen,
aber ein bisschen mehr berücksichtigen hättest Du schon können:
- invertierte Eingänge
- Takteingänge
- Powerpins
- Swaplevel
usw. usf.
Ich müsste das ganze komplett umschmeißen um die Anleitung entsprechend anzupassen, drum lasse ich es.
Momentan ist bei mir eh alles ausgelastet, durm sag ich
"Toll".
Ich habe ein wenig drin rum"gemurkst" und erweitert, musst mal schauen...
@ darwin.nuernberg: Ich denke, dass er deine genannten Dinge noch nicht kennt, ist ja erst seine erste Lib ;-) Ich habe leider auch keine Zeit, mich mehr darum zu kümmern. Kommt schon mit der zeit, am besten einen Ausbauwunschaufklebergrünesding draufpappen...
Hehe, ich weiß nicht mal, wie diese grünen Aufbauwunschaufkleberdingese funktionieren :P
Ich kam mir auch komisch vor, beim ersten Mal mich gleich anzumaßen jemand anderem Tipps zu geben wenn ichs noch nicht mal selber richtig peil. Aber wenn schonmal was existiert isses manchmal mehr Anreiz für andere was hinzuzufügen als wenn noch gar nix da is.
Und ja, ich kannte besagte Dinger nicht wirklich. Wobei ich mir wirklich nen invertierten Reset überlegt hatte. Naja, kommt Zeit kommt Tutorial... Momentan isses halt mit der Zeit echt so ne Sache. Aber mit dem Problem is man wohl nie allein.
Jaja,
Zeit ist Geld,
Geld ist Luxus,
und Luxus kann sich keiner leisten. :-b
So ich hab mal ein kleines Bild erstellt,
welches mit dem Bascom Graphic Converter in ein BGF umgestellt werden kann.
Bild hier
Für diejenigen, welchen 'grad nix schöneres einfällt :-b
[rosarotebrille]
Ohhhh, das ist aber schön *verliebtguck*
[/rosarotebrille]
:D
Mach mal was richtig schönes zum Staunen!
Hallo erstmal,
wollt' nur mal nachfragen, habt ihr das LCD über ebay geholt, oder direkt irgendwo bestellt ?
Denn bei der Beschreibung im ebay steht nix von diesem Stecker, nur vom AD-Wandler :-k
Wenn ich aber nochmal überfliege, bei dem ebay-Teil handelt es sich um eins mit KS0108, hier lese ich T6963, also doch ein anderes :-k
http://cgi.ebay.de/ws/eBayISAPI.dll?...m=170003104844
PS:
aja, und es ist sowieso grösser, wo hat er denn da wieder hingschaut #-o
Stecht doch alles da... https://www.roboternetz.de/phpBB2/vi...=304446#304446
www.ledsee.com
Ich finde keine Beschreibung zu
Wenn ich den Prozessortyp auf Mega32 umstelle bekomme ich die Meldung,Code:Ddrf.1 = 0 ' Sets port F.1 as input
Ddrf.3 = 0 ' Sets port F.1 as input because we need
dass diese Befehle nicht unterstützt werden,
bei Mega128 jedoch schon.
Was ist das für eine Ding das "Ddrf" ???
Sicherlich lässt sich das auch anders lösen, mit dem Touch,
aber ich würde schon gerne wissen was das ist...
Mir ist schon klar PortF hat der M32 nicht, aber was hat es damit auf sich?
Das ist Data Direction Register für Port F oder war deine Frage eine andere?
Wenn man 0 reinschreibt hat man nen Input, bei 1 nen Output-Pin.
Beim Atmega32 Datenblatt bei mir auf S64f.
Vielleicht funktioniert das auch nicht, mit dem Punkt da auf ein einzelnes Bit zuzugreifen... Ich mach es immer als komplette Hex-Zahl aber es kann auch mit dem Punkt funktionieren :|
PortF scheint beim 128 der ADC zu sein.
Ok, ich hatte jetzt auch grad Probleme zu verstehen, was da im Code passiert. Ich versuch mir das mal herzuleiten. Keine Gewähr auf Richtigkeit...
EDIT: Warum werden hier die Ports 0 und 2 auf High bzw. Low gesetzt? Ist das nötig, damit der Touchscreen funktioniert? Gibt es zum Touch auch ein Datenblatt? Ich hab vom Display eines von der ledsee-homepage aber da ist nichts vom Touchpanel dabei soweit ich gesehen habe.[/EDIT]Code:Config Pinf.0 = Output ' Makes port F.0 output
Config Pinf.2 = Output ' Makes port F.0 output
Set Portf.0 ' Sets port F.0 High
Reset Portf.2 ' Sets port F.2 Low
Ddrf.1 = 0 ' Sets port F.1 as input
Ddrf.3 = 0 ' Sets port F.1 as input because we need it now as ad input
Waitms 20 ' Wait until the port is stable
Y = Getadc(3) ' Read the ad value for the y
Y = 1024 - Y ' Invert the reading
Dann die beiden (1,3) die man braucht um Y auszulesen als Eingang setzen und den Wert mit Getadc() abgreifen. Hab leider keine Ahnung von Basic...
Was ich hier noch nicht so genau verstehe ist:
Auf dem Bild von Application-Note 128 sieht das Schaltzeichen des Touchpad aus wie ein paar Widerstände. Wenn ich aber Pin 1 und 3 als Inputs setz und dazwischen zwei Widerstände klatsche, wie bekomm ich dann ein Ergebnis?! Oder ist das nur ein Schaltzeichen und spiegelt nicht die Realität wider (sprich: Irgendwo liefert das Ding Spannung)?
EDIT: Oh halt mal... hat dieses Set Portf.0 was damit zu tun? setzt man die anderen Ports als High und Low und schaut dann, wie viel dann bei Pin 3 ankommt?
Blub... Bitte klärt mich jemand auf :-s
Na wenn, wie irgendwo erwähnt, das Touch "nur" ein Widerstand ist,
welcher sich je nach Position verändert (natürlich für jede Achse seperat),
dann bräuchte man eingentlich nur noch einen zweiten "Vorwiderstand" um einen Spannungsteiler zu realisieren. Der wird dann am Touch abgegriffen und vom ADC ausgewertet.
Wieso so kompliziert gearbeitet wird,
erschliesst sich mir momentan (noch) nicht.
(warum einfach wenn es auch kompliziert geht?)
Wäre dann evtl. auch ein guter "Frostschutz" :-b
Ich stell mir das dann so vor:
So ein (einfacher) Spannungsteiler funtioniert soCode:_____ _____
(+5V) ----|_____|-----+-----|_____|----- (GND)
R-v | R-touch(X)
|
zum ADC X-Achse
_____ _____
(+5V) ----|_____|-----+-----|_____|----- (GND)
R-v | R-touch(Y)
|
zum ADC Y-Achse
Rv/Rtouch = U1/U2
Anders:
das Verhältniss von Widerstand1 zu Widerstand2 entspricht den an den Widerständen abfallenden Spannungen.
Wenn nun ein Widerstand geändert wird, ändert sich auch die Spannung welche an diesem abfällt.
Die Summe der Teilspannungen ergibt die Gesamtspannung (+5V)
Ich messe einen effektiven Widerstand von 0,8kR bzw. 1.1kR je nach Sensorachse (ohne Touching)
Anschlussreihenfolge am 4-Pol Stecker:
R1a - R2a - R1b - R2b
Wenn ich die beiden Sätze und dieses Bild richtig verstehe;
Bild hierZitat:
Touchscreen x read, Set PF0 high and PF2 low and read PF1 or PF3.
Touchscreen y read, Set PF1 high and PF3 low and read PF0 or PF2.
kann man wohl auswählen, welchen Layer man ausließt. Bei dem einen bekommt man nur eine negative Spannung, mit der man erstmal nichts anfangen kann, da man diese in eine positive Spannung umwandeln muss, da ein AVR das sonst nicht auswerten kann.
Habe ich das so richtig verstanden? Bin mir nicht ganz sicher, könnte mir das aber so vorstellen.
Viele Grüße,
jon
Also wir arbeiten nicht mit +5V und -5V sondern mit GND und +5V
Bei den Batterien steht ja auch + und - drauf wobei das - an GND kommt (Potential 0)
Ich sehe das so:
X (+) und X (-) sind auf einer Lage (Layer) der oberen (TOP)
Y (+) und Y (-) sind auf der anderen Lage (Layer) der unteren (Bottom)
Und der Widerstand eines (beider) Layer ändert sich bei Druck je nach Position mehr (+) oder weniger (-).
Wenn man die Layer separieren könne/würde sollten diese auch für sich funktionieren.
Natürlich könnte ich auch total auf dem Holzweg sein,
und ich kann es auch mmt. nicht ausprobieren.
Jetzt könnte man ja einfach Blind das Ding nachbauen genz nach dem Motto "TEchnik ist, wenn es trozdem funtioniert", aler WIR (ich) will ja wissen warum dies wie funtioniert. Außerdem möchte ich mit einem M32 arbeiten und nicht mit 'nem M128.
MANF: Hilfäää
Jemand der weiss, wieviel man wissen muss um zu wissen dass man nichts weiss,
weiss mehr als jemand welcher nicht weiss wieviel man wissen muss um zu wissen dass man nichts weiss.
Zitat:
Zitat von darwin.nuernberg
Ich glaub für sich is jede Folie einfach ein platter Widerstand mit leitender Oberfläche.Zitat:
Zitat von AN #148
Bild hier
Hmm... das mit den Beschriftungen üb ich wohl besser nochmal. Unten an diesem Ende von R10 liegt GND, oben an R12 +5V. Blöde Kreuze von Eagle...
Ich sah das eher so, dass im Urzustand die gegenüberliegenden Widerstände einfach in Reihe geschalten sind und man so eben keine Spannung misst, da man ja immer die andere Folie an Spannung liegt, die man eben grad nicht am ADC hat (also wenn man x misst, dann liegt y an Spannung und umgekehrt). Sobald dann einer draufdrückt, teilt sich der Widerstand der unter Spannung stehenden Folie auf und wird am ADC-Eingang gemessen (??)
So richtig weiß ichs leider auch nicht...
Wäre auch dankbar für eine endgültige Aufklärung. Muss mich dem Vorredner (-schreiber?) anschließen, dass es schöner ist es auch zu verstehen...
ACHTUNG HALT STOPP
Wer sagt denn dass diese "AN #148" und das weiter oben aufgeführte Bild auch tatsächlich mit dem hier besprochenen Typ übereinstimmen???
Nicht dass wir uns in da was verrennen, nur weil jeder meint, das dies auch tasächlich die gleichen Funktionen hat.
(Ich habe jedenfalls keinerlei Merkmal, welches das Touch identifiziert, außer dass es eben auf dem Display "pappt")
Aaahsooo... Ich dachte das wäre so O_o
Ok, dann hab ich mich womöglich verrannt, womöglich auch nicht.
Habe gestern nen Zettel im Briefkasten gehabt, dass ich was abholen soll. Hoffentlich ist es das Display und nicht irgendwas anderes. Erstmal nen Blick drauf werfen und dann kann man vielleicht mal vermuten.
Wobei ich schon glaube, dass es sich hier um diesen Typ handelt. Naja, mal abwarten, was die Post so bringt...
EDIT: Ok, hab mein LCD jetzt bekommen. Was ist denn dieser Chip, der mit diesem Connector zusammen in dem Tütchen war oder ist der da aus versehen reingefallen?
"BBADS 7843E"
Muss man den erst auch noch einbauen um es zum Funktionieren zu bringen? Finde leider kein Datenblatt. Ein paar chinesische Seiten findet man zwar, aber da bekommt man dann immer sowas wie "对不起!没有相关资料信息!!!"
Gleich mit drei Ausrufezeichen "Sorry! Es gibt kein passendes Datenblatt!!!"
Bild hier
Irgendwie will ich das Ding nicht löten müssen. Hab grad nur nen Monsterlötkolben.
Nee bei mir war der nicht extra dabei,
schau mal ob der irgendwo auf dem Modul fehlt ;-)
Ich habe aber auch im anderen (Einstiegs-) Beitrag gelesen dass "nur" der Stecker dabei war.
PS sowas keines hab ich auch (sogar fünfmal) das wird's einem schon beim Layouten warm ums Herz, und ich kann sogar das noch Toppen.
(wenn ich meine Kamera gereinigt habe gibt's auch 'ein Foto)
EDIT: Ich kriegs einfach nicht scharf, da muss wohl mein Mikroskop ran....
Lol, das wär die Härte...Zitat:
Zitat von darwin.nuernberg
Aber ich nehm an, dass ich das einfach als Gratisbonus bekommen hab (reingefallen).
Sowas kleines hab ich zum Glück nicht. Habs heut mit meiner Zitterhand schon fast beim auf die ESC-Taste legen zerstört :|Zitat:
Zitat von darwin.nuernberg
Danke für die Aufklärung. Bin ich mal froh, dass ich das Ding aller Wahrscheinlichkeit nach nicht brauchen werd. :)
EDIT: Eine Makrolinse wird wohl mal auf meine Wunschliste geschrieben... Das Foto scharf zu machen war echt ein Problem. Wobei da auch gleich noch ein Stativ dazu muss...
Also alle meine Recherchen zum Touch Screen scheinen alle auf die selbe Technik hin zu deuten wie bereits beschrieben:
Bild hier
Eine sehr schöne Beschreibung habe ich in der Wikipedia gefunden:
http://de.wikipedia.org/wiki/Touchscreen
---------------------------------------------
Eine andere Beschreibung als "Nur noch Geil" finde ich für dei folgenden Links nicht.
Schaut Euch die Video's an:, es lohnt sich....
https://www.roboternetz.de/phpBB2/vi...c.php?p=310748
Check This:
Jeff Han's Multi-Touch Sensing
http://www.youtube.com/watch?v=89sz8...t Touch Screen
http://www.youtube.com/watch?v=iaKeh...ch touchscreen
Ich mach mal einen Neuen Thread hierfür auf....
https://www.roboternetz.de/phpBB2/vi...c.php?p=310748
Ok, also hatten wir das mit dem Touchscreens schon richtig vermutet.
Wow, so ein Multitouch wär perfekt für nen Club. Die Tanzfläche ein Riesentouchpad bei dem alle Füße und Bierpfützen miteinander durch Linien verbunden, und ein Haufen LSD-Druffis auf dem Boden rumliegend mit den Fingern Figuren malen würden :P
W00tage!!
Endlich mal ein Bild!
Hatte vergessen, dass Reset active low ist...
Ausserdem ist das Datenblatt irgendwie blöd, weil RS (Register Select) in der Tabelle als D/I (Data/Instruction) steht. Hatte erst überlegt, warum ich nen Reset machen sollte (wegen RS)... Naja, der Reset kriegt mich immer wieder. Ist wie das erste mal, als ich nen AVR programmiert hatte. Da war auch der Reset dran schuld, dass es nicht tat.
Jetzt muss ich erstmal ne Reichelt-Bestellung losjagen (war bisher zu faul).
Schon lange kein C mehr programmiert gehabt aber Basic wollt ich nicht :)
Jetzt noch ein stolzes Bild:
Bild hier
Sieht Klasse aus!
Ich habe meine Reicheltbestellung mit den Teilen, die ich zum Anschließen des Displays brauche schon los getreten. Jetzt warte ich auf die Teile von Reichelt und auf das Display!
jon
Vielleicht kanns ja wer brauchen...
C-Code
(Kritik ausdrücklich erwünscht)
Bisher initialisiere ich nur das LCD, mal das Bild hin und park den µC dann im while(1)
Code:// Project : LCD
// Author : BiGF00T
// Date : 2007-09-02
// AVR : ATMega16 @ 1MHz
//
// Blah :
// - RESET is ACTIVE LOW!!!
/*
CONTROL PORT D: DATA PORT B:
=============== ===============
CSA PD0 DB0 PB0
CSB PD1 DB1 PB1
DI/RS PD2 DB2 PB2
RW PD3 DB3 PB3
E PD4 DB4 PB4
RST PD5 DB5 PB5
-NC- PD6 DB6 PB6
-NC- PD7 DB7 PB7
=============== ===============
*/
#include <avr/io.h>
#define F_CPU 1000000UL // 1 MHz
// DIRECTIONS
#define RIGHT 0
#define LEFT 1
// PINS
#define CSA 0x01
#define CSB 0x02
#define DI 0x04
#define RW 0x08
#define E 0x10
#define RST 0x20
unsigned char Data[]= {
0,0,0,0,0,0,0,0,0,0,240,24,12,14,6,7,7,3,3,3,3,3,3,3,3,3,3,7,6,14,14,28,
60,120,240,224,192,0,252,6,6,7,15,15,15,14,14,14,14,14,140,252,124,28,4,0,0,0,0,0,192,224,112,56,
56,48,48,60,126,108,108,204,220,220,152,24,24,24,56,48,48,48,48,48,48,48,48,48,48,48,48,48,48,240,240,48,
0,0,128,192,32,32,48,48,48,48,48,48,48,48,56,56,24,24,24,24,24,24,24,24,24,28,28,12,12,12,14,254,
0,0,0,0,0,0,0,0,0,255,193,64,96,48,16,8,140,116,12,0,0,0,240,204,66,98,54,28,0,0,0,0,
0,128,225,63,31,0,3,126,192,0,0,0,0,0,0,0,240,252,131,1,0,0,128,224,56,12,2,1,0,0,0,0,
0,128,128,128,128,128,128,0,192,121,15,1,128,224,16,16,16,16,16,24,8,8,8,8,8,8,16,24,15,195,96,176,
152,134,67,64,64,96,32,32,32,32,32,96,192,0,0,0,0,0,0,0,0,128,128,192,64,64,64,32,32,32,32,63,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,62,3,0,0,0,0,0,0,0,0,0,0,0,48,56,120,246,
227,129,0,0,0,0,0,0,31,48,48,16,16,16,16,16,55,63,191,224,56,12,3,0,0,0,0,192,112,28,6,3,
1,0,192,112,14,1,1,3,3,0,32,60,55,56,56,56,24,24,24,248,248,120,24,0,0,0,0,6,3,3,1,1,
0,0,0,0,0,0,0,0,0,0,128,124,3,0,0,0,0,128,127,1,1,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,192,124,3,0,0,0,0,0,0,224,16,32,192,128,0,0,0,0,0,0,
1,7,15,30,248,240,48,12,14,14,14,14,14,14,30,28,60,30,147,112,48,0,0,0,0,240,30,3,240,16,24,24,
24,31,25,24,24,24,216,120,120,16,192,64,64,64,64,64,128,248,31,29,13,28,60,124,240,224,128,128,64,64,32,48,
48,120,120,240,224,192,0,0,0,240,31,0,0,0,0,0,240,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,192,124,7,0,0,0,0,0,0,128,112,15,0,0,0,1,3,6,12,240,0,0,
0,0,0,0,0,7,252,0,0,0,0,0,0,0,0,192,56,14,1,0,0,0,0,224,254,129,144,190,99,32,32,0,
0,0,0,192,56,7,1,224,60,7,1,128,192,112,48,32,96,192,0,0,0,0,0,0,1,15,255,248,64,64,128,128,
0,0,0,0,3,15,255,252,240,31,0,0,0,0,0,0,255,255,254,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,128,240,112,224,224,192,192,60,3,0,0,0,0,0,0,128,240,255,0,0,0,0,0,0,0,192,112,29,7,0,
0,0,0,128,224,62,3,0,0,0,0,0,0,0,248,15,0,0,0,0,0,0,0,7,7,7,3,1,0,0,0,0,
0,224,60,3,128,120,14,1,0,0,124,227,128,128,0,128,128,129,231,56,0,0,0,0,0,224,255,128,0,128,128,129,
254,0,0,0,0,0,224,63,7,0,0,0,0,0,0,0,15,255,255,248,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,255,0,0,0,1,3,3,2,0,0,0,0,0,0,6,7,7,7,7,7,7,7,7,7,3,128,128,128,192,96,
48,24,12,3,0,0,128,128,128,128,128,128,0,0,255,96,32,32,16,16,16,16,16,16,240,32,32,32,64,192,128,0,
252,7,192,248,143,0,0,0,0,0,0,3,7,7,7,3,3,129,128,128,64,96,56,204,135,0,3,3,3,3,1,1,
0,0,0,192,112,30,3,0,0,0,0,0,0,0,0,0,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,3,2,2,6,4,4,8,8,8,8,8,8,8,8,4,4,4,4,4,6,2,2,34,49,29,31,11,12,4,6,
2,2,3,1,1,1,0,0,0,0,0,1,1,3,7,14,0,0,0,0,0,0,16,30,17,16,16,16,16,16,16,19,
51,120,15,0,1,1,2,6,4,6,2,2,2,2,2,1,1,1,0,0,0,0,0,0,1,1,1,1,1,2,34,58,
47,19,17,17,16,24,8,8,8,12,4,4,4,4,4,4,4,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0
};
// set a bit of PORT D
inline void set(unsigned char what)
{
PORTD |= what;
}
// clr a bit of PORT D
inline void clr(unsigned char what)
{
PORTD &= ~(what);
}
// send an instruction to the LCD
int writeInstruction(unsigned char data)
{
clr(E);
clr(DI);
PORTB = data;
set(E);
clr(E);
return 0;
}
// send data to the LCD
int writeData(unsigned char data)
{
clr(E);
set(DI);
PORTB = data; // instruction on port
set(E);
clr(E);
return 0;
}
// select one of the two sides
void selectSide(unsigned char side)
{
if(side == RIGHT)
{
set(CSA);
clr(CSB);
}
else
{
set(CSB);
clr(CSA);
}
}
// initialize LCD
int initLCD(void)
{
writeInstruction(0x3f); // DISPLAY ON
writeInstruction(0x40); // SET ADDRESS Y (0-63)
writeInstruction(0xb8); // SET PAGE X (0-7)
writeInstruction(0xc0); // DISPLAY START LINE
return 0;
}
// TEST 0.1
int main (void)
{
char pageAdr = 0xb8;
int col = 0;
int page = 0;
// set pins
// Control Pins (Port D)
PORTD = 0x00; // All Pins are Low
DDRD = 0xFF; // All Pins are Outputs
// Data Pins (Port B)
PORTB = 0x00; // All Pins are Low
DDRB = 0xFF; // All Pins are Outputs
set(RST); // <<---- AAAAAAAAAAARGH, F*** Reset ist Active LOW!!!!!11!1one
selectSide(RIGHT);
initLCD();
selectSide(LEFT);
initLCD();
for(page = 0; page < 8; page++)
{
pageAdr++;
// write the first part of the picture inverted "~"
for (col = 0; col <= 63; col++)
writeData(~Data[(128*page)+col]);
writeInstruction(pageAdr);
selectSide(RIGHT);
// write the second part of the picture inverted "~"
for (col = 64; col <= 127; col++)
writeData(~Data[(128*page)+col]);
writeInstruction(pageAdr);
selectSide(LEFT);
}
while(1)
{
}
return 0;
}
Wie viel kB des Speichers von deinem ATMega16 braucht das Programm?
jon
Mann mann mann, kann das auch mal irgendwann untereinander stehen?!Code:Size after:
main.elf :
section size addr
.text 422 0
.data 1024 8388704
.bss 0 8389728
.noinit 0 8389728
.eeprom 0 8454144
.stab 876 0
.stabstr 132 0
.debug_aranges 20 0
.debug_pubnames 114 0
.debug_info 714 0
.debug_abbrev 280 0
.debug_line 456 0
.debug_str 172 0
Total 4210
Das ist das, was mir WinAVR beim Kompilieren anzeigt.
4,21 kB ist für so ein recht großes Bild noch akzeptabel. Da kann man dann nur nicht viele Bilder auf den ATMega16 laden...
jon
Naja, ich will ja auch keinen Film abspielen ;)
Später will ich eigentlich gar kein Bild anzeigen. Mehr Zahlen und Buchstaben und die kann man relativ klein machen und wieder verwerten :)