AVR (ATMega) - UART - <DC2> an eDIP TFT senden

#4039567
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
#4039628
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
Gast #4039655
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 ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren