hd44780 mit ATXmega / Ansprechen einzelner Pins

Gast #2207545
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
Gast
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.
Gast
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...
Gast
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
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.
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.