Hi Ich habe mir bei reichelt folgendes LCD zum Hobbybasteln bestellt: http://www.reichelt.de/LCD-Module-DIP-Anschluss/EA-DIP203G-4/3//index.html?ACTION=3&GROUPID=3009&ARTICLE=129611&OFFSET=500&&SID=11U5AWlX8AAAIAAD41RiE734b8aec839358e635d6f3693d48261c&CTYPE=0&MWSTFREE=0 Ich bin jetzt schon seit längerem auf der Suche nach einer Library für LCDs für meinen ATXMEGA128A1U. Gute wäre wenn man in dieser für jeden einzelnen Pin auch den jeweiligen Port angeben könnte, so wie es in der Library von Peter Fleury funktioniert. Besitzt jemand so eine Library oder weiß wo eine solche zu finden ist? Ich hab jetzt schon eine Weile gegoogelt, leider ohne Erfolg. Allerdings kann ich mir nicht vorstellen, dass es so eine Library noch nicht gibt :-P
Gast
#3733374
Hallo Matthias, vielleicht hilft Dir das weiter: Beitrag "Re: Display DIP204-4" Grüsse, René
Matthias Frank schrieb: > Ich bin jetzt schon seit längerem auf der Suche nach einer Library für > LCDs für meinen ATXMEGA128A1U. Gute wäre wenn man in dieser für jeden > einzelnen Pin auch den jeweiligen Port angeben könnte, so wie es in der > Library von Peter Fleury funktioniert. Ich seh jetzt keinen Grund, warum die Fleury Lib da nicht auch grundsätzlich funktionieren sollte. > Ich hab jetzt schon eine Weile gegoogelt, leider ohne Erfolg. In der Zeit hättest du wahrscheinlich auch den Fleury Code schon 5 mal durchgehen können und die 3 Stellen, an denen die Hardware Zugriffe erfolgen, an die Bedürfnisse des XMega anpassen können.
Danke schonmal. Die Bibliothek umschreiben wäre natürlich das einfachste :P Dass ich statt: #define LCD_PORT PORTBA /**< port for the LCD lines */ Das hier schreiben muss ist mir klar: #define LCD_PORT PORTA.OUT /**< port for the LCD lines */ Aber wie ändere ich folgende 2 defines ab, so dass stattdessen z.B. PORTA.DIR und PORTB.IN gemeint ist und ? #define DDR(x) (*(&x - 1)) /* address of data direction register of port x */ #define PIN(x) (*(&x - 2)) /* address of input register of port x */
Keine AHnung wie die Adressverteilung der einzelnen Register beim XMEGA ist. Im schlimmsten Fall machst du eben nicht einfach nur ein
1 | |
sondern ein
1 | |
2 | |
3 | |
mit den entsprechenden Angaben für den XMega und änderst die verwendenden Stellen entsprechend ab. Da du die Makros DDR bzw. PIN aus dem Code rauswirfst, wird dir der Compiler mitteilen, wo dies notwendig ist. Die Idee hinter den Makros DDR bzw. PIN ist es einfach nur, sich die 3-fach Angabe
1 | |
2 | |
3 | |
zu sparen, da sich DDRB bzw. PINB aus PORTB und dem Wissen der Adresslage der Register errechnen lassen. Das bringt einen gewissen Komforteffekt und ist auch der Fehlersicherheit zuträglich, weil es hier so nicht mehr möglich ist. nicht zusammenpassende ANgaben, wie zb
1 | |
2 | |
3 | |
zu machen. Aber zwingend erforderlich ist es nicht Im schlimmsten Fall kann man immer noch auf die 3 Einzelangaben ausweichen.
Ich hab die Library jetzt wie folgt geändert: Dies habe ich zusätzlich eingefügt
1 | |
2 | |
3 | |
4 | |
5 | |
Für jeden Pin habe ich diese Defines erstellt:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Hier einige Ausschnitte, was ich sonst noch verändert habe: (Auskommentiertes waren die ursprünglichen Zeilen)
1 | |
2 | |
1 | |
2 | |
1 | |
2 | |
1 | |
2 | |
Das müsste von der Theorie doch Funktionieren oder? Allerdings hab ich noch ein Problem. Zuerst hatte ich DDR() komplett aus meinem Programm genommen. Beim Übersetzen hatte ich keine Fehlermeldung. Seitdem ich aber Pin() auskommentiert habe und die Befehle ersetzt habe kommt folgende Meldung:
1 | |
Damit ist folgende Zeile gemeint:
1 | |
ich versteh sein Problem nicht.... Von der Theorie hab müsste es doch so gehen.
Ich hab an einer Stelle den Strichpunkt vergessen xD Jetzt kommt keine Fehlermeldung mehr. Ich werd das ganze die nächsten paar Tage sobald das Display da ist mal testen :P Danke dir
Matthias Frank schrieb: > Seitdem ich aber Pin() auskommentiert habe und die Befehle ersetzt habe > kommt folgende Meldung: >
1 | |
2 | |
> Damit ist folgende Zeile gemeint: >
1 | |
2 | |
> ich versteh sein Problem nicht.... Von der Theorie hab müsste es doch so > gehen. DIe kann nicht gemeint sein. Das da ist eine Präprozessor-Definition. Also die Vereinbarung, welcher Text durch welchen anderen Text im Source Code zu ersetzen ist, ehe sich dann der Compiler diesen modifizierten Source Code zu Gemüte führt. Da kann ich auch schreiben
1 | |
und es interessiert keinen. Erst in der Verwendung im Source Code, also zb hier
1 | |
2 | |
3 | |
4 | |
findet dann die Textersetzung statt. Der Präprozessor ersetzt 'LCD_PORT' durch 'schnurdibur' und es ergibt sich
1 | |
2 | |
3 | |
4 | |
und wenn ich nicht zufällig eine Variable dieses Namens habe, dann ist das nun mal ein Syntax-Error. Bei Makros musst du IMMER die Stelle untersuchen, an der das Makro benutzt wird! Dort machst du dir Textersetzung und siehst dir an, was nach der Textersetzung übrig bleibt. Aber erst mal ist es dem Präprozessor völlig egal, was du als Textersetzung angibst. Und wenn du
1 | |
schreibst, ist ihm das auch wurscht. Er merkt sich, dass du in weiterer Folge das Wort 'asuifhibf' durch das Wort 'viunbeaviunq' ersetzt haben willst. Warum auch immer, das ist dem Präprozessor völlig egal. Er macht sich einen Eintrag in seine Ersetzungstabellen und damit hat sich für ihn die Sache.
ja danke. Hast wieder recht :P Der Strichpunkt hat in einer Zeile gefehlt bevor das Makro verwendet wird. Ich werd sobald ich das Display habe schreiben ob es geklappt hat und die veränderte Library (falls alles funktioniert) für andere User hochladen.
irgendwie geht das nicht.... Das Display zeigt nichts an... Hat keiner eine bereits umgeschriebene Library?
Hallo, habe für das EA DOGM204W-A (SSD1803a Kontroller) folgenden Code: - seriell (SPI) -> Atxmega.. - 8 Bit parallel -> Atxmega.. Funktioniert auch für das EA-DIP203(SSD1803 Kontroller) was brauchst du: seriell oder parallel? Gruß G.G.
Hallo, habe die Lib hier eingestellt: http://www.basteln-mit-avr.de/atxmega128a3.html#EADOGM204A Gruß G.G.
Gast
#3743166
Hi danke für deine Library :P Ich hab deine Nachricht leider zu spät gelesen und gestern abend versucht selber eine Library mit 4-Bit zu schreiben. Da diese inzwischen funktioniert lade ich sie hier öffentlich hoch. Ich werd deine Library über SPI aber auch mal die nächsten paar Tage anschauen. Danke nochmal. Gruß Matthias
Gast
#5413508
Haben Sie vielleicht code fuer lcd fuer xmega? waere es nett wenn Sie geben koennen
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.