mikrocontroller.net

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


Autor: C#ler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace serialPort_test
{
    public partial class Form1 : Form
    {
        private char x;
   
      
        public Form1()
        {
           
          
            InitializeComponent();
            serialPort1.ReadBufferSize = 256;//Größe des Lese-Puffers festgelegt
            serialPort1.WriteBufferSize = 256;//Größe des Schreib-Puffers festgelegt

            serialPort1.Encoding = Encoding.ASCII;//ASCII codierung-auf binary umstellen?) aktiviert
            
          
            
        }


        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
         
                x = (char)(serialPort1.ReadByte());//((welche Einstellung soll dort gewählt werden um am eine Zahl von +128-127...darzustellen) Vorschläge wären fein...)
              
        }             
    }
}



hier der µC Code:
#include<avr/io.h>
int main(void)
{
usartpar();//erforderlich zur USARTeinstellungsparametrisierung

while(1)
{
putch('a');//sendet an PC ein a
//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.
}
return 0;
}  
void usartpar(void)
{
 unsigned char x;            // Hilfsvariable
 #ifdef UBRRL                 // USART-Schnittstelle 
  UBRRL = (TAKT / (8 * BAUD)) - 1;
  UCSRB |= (1 << TXEN) | (1 << RXEN);
  UCSRC |= (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0); 
 #else                    // UART-Schnittstelle
  UBRR = (TAKT / (16 * BAUD)) - 1;
  UCR |= (1 << TXEN) | (1 << RXEN);
 #endif 
 x = UDR;                // Empfänger leeren
}
void putch (unsigned char x)  // warten und Zeichen senden
{
 #ifdef UCSRA
  loop_until_bit_is_set(UCSRA, UDRE); // warte bis Sender frei
 #else
  loop_until_bit_is_set(USR, UDRE);   // warte bis Sender frei
 #endif
 UDR = x;                             // Zeichen nach Sender    
}

Was sollte ich bei der putch Funktion abändern--HELP!!!!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Thomas L. (tom)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Thomas L. (tom)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.