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

OP #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
Gast #4039603
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.
OP #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 ;-)
#4046271
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!?

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.