Forum: Mikrocontroller und Digitale Elektronik ASCII Problem


von Sascha (Gast)


Lesenswert?

Hallo Ihr Freaks da draußen-vielleicht kann mir jemand bei meinem 
Problem helfen.
Ein Gerät gibt seriell mit 9600,N,8,1 Daten aus, welche direkt in
einen TVT-VGA von www.tvterminals.de geleitet werden.
Dieser Baustein treibt einen VGA-Bildschirm.
Das System dient zur Großanzeige der Meldungen des Gerätes.
Klappt alles einwandfrei, lediglich wenn das Gerät die Sonderzeichen
ä..ö..ü..ß sendet, erscheint auf dem Display {..|..} (Punkte nur zur 
besseren Darstellung). Großbuchstaben Ä..Ö..Ü analog als [..\..]
An der Ausgabe vom Gerät lässt sich nichts ändern, am TVT-VGA Controller 
auch nicht.
Ich bräuchte "zwischendrin" etwas, was die Daten umwandeln kann.
Elektronik kein Problem, von Microcontrollern habe ich lediglich 
Grundkenntnisse.
Wer hat eine Idee ? Danke für Eure Antworten.

Noch etwas am Rande:
Statt des TVT-VGA Controllers habe ich auch schon PC mit Hyperterminal 
verwendet. Mit der Standardschrift habe ich genau gleiche Anzeige der 
Umlaute, wie bei Ausgabe über den Controller. Wechsle ich zu WST_Germ 
stimmt die Anzeige.

von Timmo H. (masterfx)


Lesenswert?

Wahrscheinlich kann nur ASCII-Zeichensatz (also 7 Bit). Das "Gerät" gibt 
ä ö ü als 0x5B 0x5C und 0x5D aus. Das folgt natürlich nicht dem 
ASCII-Zeichensatz.
Laut handbuch kann der TVT-VGA wohl auch den ANSI Zeichensatz (also 
weitere 127 Zeichen). Da sind die Umlaute drin
ä = 0xE4
ö = 0xF6
ü = 0xFC

Die Umwandlung lässt sich ohne Probleme mit einem uC machen. 
Vorzugsweise einen mit 2x UART, damit man das nicht alles per Software 
machen muss.
Der kleinste Atmel ist glaub ich der ATmega164 oder ATmega162, kostet 
2,95€ bei Reichelt als PDIP. Der hat 2x UART.
Die Beschaltung würde minimal ausfallen:

TVT-VGA <=== MAX232 <==> ATmega164 <==> MAX232 <== GERÄT

Kosten weniger als 10€.

Das Programm wäre auch nur ein paar Zeilen lang.

von Frank S. (Firma: HSCS) (linuxerr)


Lesenswert?

im prinzip würde auch ein controller mit einem fullduplex uart reichen, 
die rx+steuerleitungen zum gerät und tx+steuerleitungen zum tvt. das 
geht schon mit recht kleinen controllern.

von Timmo H. (masterfx)


Lesenswert?

>im prinzip würde auch ein controller mit einem fullduplex uart reichen
Stimmt, soweit habe ich gar nicht gedacht. Hatte irgendwie im Kopf, dass 
es hätte Bidirektional sein müssen, aber geht ja nur ein eine Richtung. 
dann kann man schon nen ATtiny2313 oder nen ATmega48 nehmen, kostet nur 
1,20€.

von Frank S. (Firma: HSCS) (linuxerr)


Lesenswert?

wenn man es geschickt anstellt, könnte man alles in einem gehäuse 
(doppelstecker wie zb für leitungsbooster, dongles etc, 2serielle 
stecker links und rechts in einem kleinen steckergehäuse) unterbringen 
und die schaltung evtl aus den statusleitungen mit spannung versorgen.

von Sascha S. (sascha112)


Lesenswert?

Vielen Dank mal für Eure Anregungen. Habe mir mittlerweile etwas 
Hardware beschafft (ATMEGA48 und ATTINY2313) ISP läuft auch, ein paar 
Grundfunktionen sind auch schon erfolgreich programmiert und getestet. 
Jetzt arbeite ich mich grade in die Programmierung rein, das geht aber 
mangels Zeit doch nicht ganz so schnell. Vielleicht kann mir jemand mit 
einem Proggi noch und einem Schaltungsvorschlag nachhelfen :-)

seriell TTL mit 9600,8,N,1 7-Bit ASCII kommen vom Empfänger
Sollen rein in den ATTiny, die Zeichen Hex 7B,7C,7D,7E nach Ansi Hex 
E4,F6,FC;DF und die Zeichen 5B,5C,5D nach Ansi Hex C4,D6,DC.
Rest vom Eingangszeichensatz kann so wieder ausgegeben werden.
Das ganze wieder raus aus dem Attiny und rein in meinen TV-VGA 
Controller, der kann Ansi.

Bei der Grundschaltung mit den "falschen" Sonderzeichen kam ich ohne MAX 
aus. Lediglich für Versuchszwecke mit dem PC hatte ich natürlich einen 
benutzt. Wenn durch den Attiny RS-232 +/-12 durchgejagt werden müssen 
ist das natürlich kein Problem. 
Empfänger->MAX232->ATTINY2313->MAX232-TVT VGA-Controler...

unsere Feuerwehr und Ich freuen uns, wenn jemand bissl helfen möchte...

P.S Anfangs beschriebenes "Gerät" ist ein DME in der Wache.

von Timmo H. (masterfx)


Lesenswert?

Erstmal UART TX und RX sowie den RX interrupt anschalten:
1
UCSRB = (1 << RXEN) | (1 << TXEN) | (1 << RXCIE);
Und dann die ISR müsste denke ich so aussehen:
1
ISR(USART_RXC_vect)
2
{
3
  unsigned char temp;
4
  temp = UDR;
5
  while (!(UCSRA & (1<<UDRE)));     // warten bis Senden moeglich
6
  switch(temp){
7
    case 0x7B:
8
      UDR = 0xE4;
9
      break;
10
    case 0x7C:
11
      UDR = 0xF6;
12
      break;
13
    //usw.
14
    default:
15
      UDR = temp;    //Zeichen so senden wie empfagen
16
  }
17
}
Habs jetzt nicht getestet, aber das Prinzip sollte klar sein

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Also ich würd das warten aufs senden nicht in den Interupt packen, dann 
doch lieber in die Hauptschleife, eventuell sogar mit nem Buffer...

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.