Forum: PC-Programmierung C#-atmega-COM1-binaer anstelle ascii zeichen


von C#ler (Gast)


Lesenswert?

hy @alle Experten!

Bin grade am überlegen, ob ich Daten mit einer einfachen c#applikation 
binär anstelle ASCII, da das Senden von ASCII Zeichen oft bis zu 1 ms 
dauert,
senden und empfangen kann. Meine Frage an euch ist: Was muss man c#mäßig 
und auch µCmäßig an folgenden Programmcode ändern:


1.C#:
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Text;
7
using System.Windows.Forms;
8
9
namespace serialPort_test
10
{
11
    public partial class Form1 : Form
12
    {
13
        private char x;
14
   
15
      
16
        public Form1()
17
        {
18
           
19
          
20
            InitializeComponent();
21
            serialPort1.ReadBufferSize = 256;//Größe des Lese-Puffers festgelegt
22
            serialPort1.WriteBufferSize = 256;//Größe des Schreib-Puffers festgelegt
23
24
            serialPort1.Encoding = Encoding.ASCII;//ASCII codierung-auf binary umstellen?) aktiviert
25
            
26
          
27
            
28
        }
29
30
31
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
32
        {
33
         
34
                x = (char)(serialPort1.ReadByte());//((welche Einstellung soll dort gewählt werden um am eine Zahl von +128-127...darzustellen) Vorschläge wären fein...)
35
              
36
        }             
37
    }
38
}



hier der µC Code:
1
#include<avr/io.h>
2
int main(void)
3
{
4
usartpar();//erforderlich zur USARTeinstellungsparametrisierung
5
6
while(1)
7
{
8
putch('a');//sendet an PC ein a
9
//in der textBox sollte eigentlich ein a stehen, jedoch zeigt es mir //ein "spanisches A" an, siehe angehängtes Bild(ASCII: 192), selbst, wenn ich ein anderes Zeichen schicke zeigt es immer nur dieses Zeichen an.
10
}
11
return 0;
12
}  
13
void usartpar(void)
14
{
15
 unsigned char x;            // Hilfsvariable
16
 #ifdef UBRRL                 // USART-Schnittstelle 
17
  UBRRL = (TAKT / (8 * BAUD)) - 1;
18
  UCSRB |= (1 << TXEN) | (1 << RXEN);
19
  UCSRC |= (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0); 
20
 #else                    // UART-Schnittstelle
21
  UBRR = (TAKT / (16 * BAUD)) - 1;
22
  UCR |= (1 << TXEN) | (1 << RXEN);
23
 #endif 
24
 x = UDR;                // Empfänger leeren
25
}
26
void putch (unsigned char x)  // warten und Zeichen senden
27
{
28
 #ifdef UCSRA
29
  loop_until_bit_is_set(UCSRA, UDRE); // warte bis Sender frei
30
 #else
31
  loop_until_bit_is_set(USR, UDRE);   // warte bis Sender frei
32
 #endif
33
 UDR = x;                             // Zeichen nach Sender    
34
}
Was sollte ich bei der putch Funktion abändern--HELP!!!!

von Karl H. (kbuchegg)


Lesenswert?

C#ler schrieb:

> Bin grade am überlegen, ob ich Daten mit einer einfachen c#applikation
> binär anstelle ASCII, da das Senden von ASCII Zeichen oft bis zu 1 ms
> dauert,
> senden und empfangen kann. Meine Frage an euch ist: Was muss man c#mäßig
> und auch µCmäßig an folgenden Programmcode ändern:

> //in der textBox sollte eigentlich ein a stehen, jedoch zeigt es mir
> //ein "spanisches A" an, siehe angehängtes Bild(ASCII: 192), selbst,
> wenn ich ein anderes Zeichen schicke zeigt es immer nur dieses Zeichen
> an.

Fang an daran zu arbeiten.
Wenn deine Textkommunikation schon nicht richtig funktioniert, hat es 
keinen Sinn da noch einen drauf zu legen und auf binär zu gehen. Du 
wirst damit erst recht Schiffbruch erleiden.


Wenn du auf PC-Seite kein C# Programm laufen hast, sondern ein 
Terminalprogramm, kommen die Zeichen dann richtig an?

von Thomas L. (tom)


Lesenswert?

> Wenn du auf PC-Seite kein C# Programm laufen hast, sondern ein
> Terminalprogramm, kommen die Zeichen dann richtig an?

Nein tun sie nicht - er hatte das vor einer Woche oder so schonmal 
gepostet - ich find jetzt nur den Thread nicht.

von Karl H. (kbuchegg)


Lesenswert?

Thomas Linder schrieb:
>> Wenn du auf PC-Seite kein C# Programm laufen hast, sondern ein
>> Terminalprogramm, kommen die Zeichen dann richtig an?
>
> Nein tun sie nicht

Welchen Sinn hat es dann mit einem C# Programm eine Kommunikation zu 
versuchen? Offensichtlich stimmt da irgendetwas nicht, wenn noch nicht 
mal ein Terminalprogramm das vom µC gesendete korrekt empfängt. Denkst 
du, dass dein C# Programm etwas kann, was andere nicht können?

von Thomas L. (tom)


Lesenswert?

Das hab ich ihm in dem letzten Thread auch geschrieben ;) Aber 
offensichtlich ists nicht angekommen :)

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.