Forum: Mikrocontroller und Digitale Elektronik AVR (ATMega) - UART - <DC2> an eDIP TFT senden


von Woflgang T. (electric_ghost)


Lesenswert?

Hi, ich habe ein kleines Problem mit der Datenübertargung zu einem eDIP 
TFT Display.

Um von dem Display eine Antwort zu erhalten, wird eine Codefolge 
erwartet. Eingeleitet wird diese mit einem <DC2> (0x12).

Wenn ich nun aber dieses Byte sende, bleibt der µC in der 
"while-Schliefe" von der Funktion Byte senden hängen:

1
///////////////////////////////////
2
// UART Initialisierung
3
///////////////////////////////////
4
5
void uart_init (void)
6
{
7
  UBRR0H = UBRR_VAL >> 8;  
8
  UBRR0L = UBRR_VAL & 0xFF;      
9
  
10
  UCSR0B = (1<<TXEN0) | (1<<RXEN0);          
11
  UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);          // Frame Format: Asynchron 8N1
12
  
13
  do
14
  {
15
    UDR0;                      // Sendepuffer löschen
16
  }
17
  
18
  while (UCSR0A & (1 << RXC0));            // Warten bis Sendepuffer gelöscht
19
}
20
21
22
23
///////////////////////////////////
24
// UART Byte Senden
25
///////////////////////////////////
26
27
void uart_send_byte (const uint8_t c)
28
{
29
  while (!(UCSR0A & (1 << UDRE0)));  
30
  UDR0 = c;    
31
}


Und hier der eigentliche Aufruf:
1
...
2
  //<- DC2 ->//
3
  uart_send_byte(0x12);                // Senden von DC2
4
  bcc = 0x12;
5
...


Ich muss dazu sagen, dass jedes andere Zeichen (oder Byte) funktioniert, 
nur eben nicht das <DC2>.
Ist dieses intern reserviert?

Ich hoffe es weiß jemand Rat.
Schon mal Danke

Grüße
electric_ghost

: Bearbeitet durch User
von Moby (Gast)


Lesenswert?

Woflgang Tämerl schrieb im Beitrag #403956
>   //<- DC2 ->//
>   uart_send_byte(0x12);                // Senden von DC2
>   bcc = 0x12;

Keine Lösungsidee (progge in Asm), mich macht aber just gerade das 
BCC=0x12 stutzig... Wie kommst Du da drauf? Die LCD Buffer Anforderung 
lautet doch <DC2> 1 S BCC.

von Woflgang T. (electric_ghost)


Lesenswert?

"bcc" ist die Prüfsumme.
D.h. es müssen alle (zumindest fast alle) gesendeten Bytes 
zusammengezählt werden und am Ende ebenfalls gesendet werden.
Da das erste Byte "0x12" ist, initialisiere ich bcc gleich mit diesem 
Wert.

Die "1" und Das "S" wird nachträglich noch dazugezählt. Das kommt aber 
erst später im Code, welcher für mein Anliegen keine Bedeutung hat, da 
das Programm ja noch nicht einmal so weit kommt.

Grüße

von Moby (Gast)


Lesenswert?

Woflgang Tämerl schrieb:
> Ich muss dazu sagen, dass jedes andere Zeichen (oder Byte) funktioniert,
> nur eben nicht das <DC2>.
> Ist dieses intern reserviert?

<DC2> hat eigentlich nichts besonderes an sich.
Die Sendebuffer-Anforderung sollte so wie in der Doku beschrieben 
funktionieren (tut sie bei mir jedenfalls, ausgegeben UDRE-Interrupt 
gesteuert ;-)

von Rene H. (ballibou)


Lesenswert?

Hätte eine Library aber leider für i2c. Ist allerdings riesig da ich 
sämtliche Funktionen des Datenblattes implementiert habe. Die Funktionen 
sind bis auf das senden und empfangen jedoch vorm compilieren ein-/ 
ausschaltbar.

Vielleicht kannste dir den code ja raussuchen und vll abändern!?

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.