Touch Grafikdisplay AtXmega 256a3

OP (Firma: HTL Rankweil) #3407968
Lesenswert?
• ▲
▼
Hallo zusammen,

ich und drei meiner Mitschüler arbeiten momentan in der Schule an einem 
Projekt. Für dieses Projekt haben wir von Ribu ein 7 Zoll 
Touch-Grafikdisplay gekauft. Meine Aufgabe ist es, das Display mit dem 
AtXmega256a3 anzusteuern. Bisher haben wir uns in der Schule nur mit 
einem Atmega16 beschäftigt.
Mitlerweile habe ich ein Programm geschrieben, das meiner Meinung nach 
funktionieren sollte. Die Programmierung erfolgt über den AVR MK2.
Mit dem Reset Pin wird das Display gestartet, das funktioniert. Jedoch 
sollte kurz darauf ein Startbyte über den txd Pin gesendet werden, das 
macht es aber nicht. Vielleicht könnt ihr mir da weiterhelfen.

Gruß Andi

Hier der Programmcode:

#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
#include <avr/../string.h>
#include <avr/../stdlib.h>
#include <AVR/signal.h>

#define F_CPU 32000000

unsigned char i;
unsigned char a = 1;

void init()
{
  PORTD.DIRSET = 0b11110111;  //Ein-/Ausgänge definieren
  USARTD0.BAUDCTRLA = 0b00001100;
  USARTD0.BAUDCTRLB = 0b01000000;  //Baudrate 9600

  USARTD0.CTRLA = 0b00000000;
    USARTD0.CTRLB = 0b00001000;  //Transmitter Enable
  USARTD0.CTRLC = 0b00000011;  //Character Size 8Bit
}

int main(void)
{
  init();

  char Ausgabe[11] = {0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 
0x7F, 0xFF, 0xFF};

    while(1)
    {
    if (a == 1)
    {
      _delay_ms(4000);

      PORTD_OUTSET |= 0x02;  //Reset
      _delay_ms(5000);

      USARTD0_DATA = 0x55;  //Startbyte
      _delay_ms(3000);

      USARTD0_DATA = 0x45;  //Clear Display
      _delay_ms(1000);

      a = 0;
    }

    for (i = 0; i < 11; i++)
    {
      USARTD0_DATA = Ausgabe[i];
      _delay_ms(20);
    }
    }
}
#3408410
Lesenswert?
• ▲
▼
Hallo,

so ist es richtig: PORTD.DIRSET = 0b00001000;  //Ein-/Ausgänge 
definieren


dieser Code ist besser zu lesen.

PORTD.DIRSET = PIN3_bm;  // Ausgang
PORTD.DIRCLR = PIN2_bm;  // Eingang

sonst funktioniert dein Code einwandfrei.

Solltest du mehrere Ports von  PORTD verwenden, musst du natürlich den 
Code noch verändern

PORTD.DIRSET = 0b00001000;  //jetzt nur für den USART


Gruß G.G.
OP (Firma: HTL Rankweil) #3410962
Lesenswert?
• ▲
▼
Hallo,

danke erstmal für die Antwort.
Die delay´s habe ich jetzt kleiner gemacht und in eine Schleife 
verpackt. Leider funkioniert es trotzdem nicht.
Das mit den Ein- und Ausgängen versteh ich aber nicht. Mir wurde 
beigebracht, dass 0 Eingang und 1 Ausgang ist, also wäre PORTD.DIRSET = 
0b00001000; genau falsch rum. So wäre nämlich der rxd Pin Ausgang und 
alle anderen Eingang. Liege ich da falsch?

Gruß Andi
Gast #3410991
Lesenswert?
• ▲
▼
Hi

>So wäre nämlich der rxd Pin Ausgang und
>alle anderen Eingang. Liege ich da falsch?

Du liegst auf jeden Fall falsch wenn du meinst an den TXD-/RXD-Pins 
herumfummeln zu müssen. Das Setzen von RXD und/oder TXD in CTRLB 
überschreibt die normalen Pinfunktionen. Da kannst du das 
Direction-Register setzen wie du willst.

MfG Spess
#3411021
Lesenswert?
• ▲
▼
Andreas Stadelmann schrieb:
> Hallo,
>
> danke erstmal für die Antwort.
> Die delay´s habe ich jetzt kleiner gemacht und in eine Schleife
> verpackt. Leider funkioniert es trotzdem nicht.
hm?
> Das mit den Ein- und Ausgängen versteh ich aber nicht. Mir wurde
> beigebracht, dass 0 Eingang und 1 Ausgang ist,
so ist es
> also wäre PORTD.DIRSET =
> 0b00001000; genau falsch rum.
nein

bei den Xmegea hast du jeweils 4 Zugriffsmöglichkeiten auf jedes 
Portregister!
.DIR     der übergebene Wert wird in das Register übernommen
         (wie bei den 'alten' AVR's); 1=OUTPUT, 0=INPUT
.DIRSET  jedes 1-Bit wird im Portregister gesetzt,
         0-Bits bewirken nichts
.DIRCLR  jedes 1-Bit wird im Portregister gelöscht,
         0-Bits bewirken nichts
.DIRTGL  jedes 1-Bit wird im Portregister invertiert,
         0-Bits bewirken nichts

mit PORTD.DIRSET = 0b00001000 wird PORTD.DIR_Bit 3 auf 1 gesetzt, alle 
anderen Bits bleiben unverändert.

Sascha

Antwort schreiben

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.

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.