Hallo, habe eine kurze Frage, und zwar versuche eich ein Display mit hd44780 kompatiblen Controller mittels eines Xmega im 4-bit Modus anzusteuern. Sehr hilfreich war mir bis jetzt folgendes Tutorial für den ATmega: http://www.mikrocontroller.net/articles/Erweiterte_LCD-Ansteuerung Soweit sollte der Code ja kompatibel sein, bis auf die Ansteuerung der einzelnen Pins mittels PC1, PC2, .... wie es beim ATmega noch möglich war und nicht mit PORTC.OUT. Fällt von hierzu irgendwem eine "einfache" Möglichkeit ein, wie man diesen Code adaptieren könnte? Oder gibt es eine andere Möglichkeit beim ATxmega einzelne Pins anzusprechen? Freue mich auf Antworten lg Markus
Habe zwar mit den xMegas momentan nichts am Hut, aber ich hab grad mal kurz gegoogelt. Hier (http://www.stromflo.de/dokuwiki/doku.php?id=xmega-c-tutorial) gibt es ein Tutorial. Von einzelnen Pins steht da auch was - wäre schon sehr seltsam wenn das nicht mehr gehen sollte ^^
Gerade noch mal drüber geschaut... Das scheint doch mehr oder weniger noch zu funktionieren wie schon immer... Nur heißen die die Pins jetzt nicht mehr PCx, sondern an jedem Port PINx.
Nochmal ^^ Deine Defines müssten dann wohl so in der Art aussehen (ohne Garantie :))...
1 | #ifndef LCD_PORTS
|
2 | #define LCD_PORTS
|
3 | |
4 | #define LCD_PORT PORTE.OUT
|
5 | #define LCD_DDR PORTE.DIR
|
6 | |
7 | // 4 Bit LCD Datenbus DB4-DB7, das unterste Bit DB4 kann auf den Portbits 0..4 liegen
|
8 | |
9 | // LCD DB4-DB7 <--> PORTC Bit PC0-PC3
|
10 | #define LCD_DB PIN0
|
11 | |
12 | // LCD Steuersignale RS und EN
|
13 | |
14 | // LCD RS <--> PORTC Bit PC4 (RS: 0=Data, 1=Command)
|
15 | #define LCD_RS PIN4
|
16 | |
17 | // LCD EN <--> PORTC Bit PC5 (EN: 1-Impuls für Daten)
|
18 | #define LCD_EN PIN5
|
19 | |
20 | #endif // LCD_PORTS
|
Und so weiter...
Vielen Dank erstmal für deine Antwort, habs mal umgeschrieben, und nun sind es auch nur noch 7 Fehler, aber da stehe ich doch auch shcon wieder an: ../lcd.c:16: error: invalid operands to binary | (have 'PORT_t' and 'int') Bitte weiter um Hilfe. lg Markus
Stell' doch bitte mal den kompletten Code rein. Mit den Schnippseln ist es schwierieg zu erraten :)
Markus K. schrieb: > Vielen Dank erstmal für deine Antwort, > > habs mal umgeschrieben, und nun sind es auch nur noch 7 Fehler, aber da > stehe ich doch auch shcon wieder an: > > ../lcd.c:16: error: invalid operands to binary | (have 'PORT_t' and > 'int') Da ist der Compiler aber heikel Er bemängelt dass er in PORTE.OUT |= ( 1 << PIN0 ); (denn darauf läuft es hinaus, wenn man die Makros substituiert) auf der linken Seite einen PORT_t Datentyp hat, während die rechte Seite zu einem int evaluiert. Formal ist das alles korrekt und der Compiler hat recht, wenn ein PORT_t Datentyp nichts ist, was automatisch in einen int konvertiert werden kann. Mach halt erst mal ein paar Vortests mit einfachen Programmen ala
1 | #include <avr/io.h> |
2 | |
3 | int main (void) |
4 | {
|
5 | PORTE.DIR = 0xff; |
6 | |
7 | while(1) { |
8 | PORTE.OUT |= (1<<PIN0); |
9 | }
|
10 | |
11 | return 0; |
12 | }
|
und sieh dir ein wenig an, wie du das schreiben musst, damit der Compiler nix mehr zu meckern hat. Und mit dem Wissen gehst du dann daran, die lcd.h (oder auch den Code in lcd.c) anzupassen. Wenn man Makros schreibt oder an eine andere Syntax anpassen muss, dann fängt man 'hinten' an. Zuerst muss klar sein, was nach der Makro Substitution überhaupt rauskommen soll. Und erst dann schreibt man das Makro und verpackt somit Teile aus dem gewünschten Ergebnis in Makros und gibt ihnen Namen.
Hallo, vielen Dank für eure Antworten(meine ist jetzt leider ein bisschen spät) Karl Heinz Buchegger, du hattes vollkommen recht, wieder etwas klüger. So wie ich das sehe(nur kompiliert und noch nicht ausgeführt 0 Fehler :) )reicht es einfach in lcd.c (siehe AVR Tutorial) an "LCD_PORT" ein ".OUT" anzuhängen, was das ganze natürlich etwas klarer macht ;). lg und vielen Dank Markus
Hallo, Markus K. schrieb: > Bitte weiter um Hilfe. schau dir mal den Code an! http://blog.frankvh.com/2010/10/18/atmel-xmega-hd44780-lcd-support/ Gruß XMEGA
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.