c#:COM1-USART-Problemchen

Gast #1359313
Lesenswert?
• ▲
▼
Hallo an alle!

Bin geradde hoffnungslos auf der Suche nach dem begangenen Fehler.

Möchte nämlich übern atmega16 einzelne Zeichen dem PC senden, welches 
auf einer textBox in einer in c# geschriebenen formanwendung dargestellt 
wird.

Ablauf: bei startreadingbuttonbetätigung öffnet sich der Port und es 
soll ein char Zeichen angezeigt werden.

µC seitig habe ich folgende c-Routine:

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
  UCSRA |= (1 << U2X);
19
  UCSRB |= (1 << TXEN) | (1 << RXEN);
20
  UCSRC |= (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0); 
21
 #else                    // UART-Schnittstelle
22
  UBRR = (TAKT / (16 * BAUD)) - 1;
23
  UCR |= (1 << TXEN) | (1 << RXEN);
24
 #endif 
25
 x = UDR;                // Empfänger leeren
26
}
27
void putch (unsigned char x)  // warten und Zeichen senden
28
{
29
 #ifdef UCSRA
30
  loop_until_bit_is_set(UCSRA, UDRE); // warte bis Sender frei
31
 #else
32
  loop_until_bit_is_set(USR, UDRE);   // warte bis Sender frei
33
 #endif
34
 UDR = x;                             // Zeichen nach Sender    
35
}

c#-mäßig sieht es so aus:

1
sing 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 aktiviert
25
            
26
          
27
            
28
        }
29

30
        private void richTextBox1_TextChanged(object sender, EventArgs e)
31
        {
32

33
            richTextBox1.Text= x.ToString();//Schreibe char variable in textbox
34
           
35
          }
36

37
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
38
        {
39
         
40
                x = (char)(serialPort1.ReadByte());//lese von COM1, konvertiere es in char(Vorsicht:c#s char ist 16 bit breit und atmegas 8, vl dort Problem?)
41
              
42
              
43
              
44
            this.Invoke(new EventHandler(richTextBox1_TextChanged));//ruft Event auf
45
        }
46

47
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
48
        {
49
            serialPort1.Close();//beim Schließen des Fensters schließt sich COM1
50
        }
51

52
        private void Stop_Click(object sender, EventArgs e)
53
        {
54
            serialPort1.Close(); //bei Betätigung des Stop buttons schließt sich der Port 
55
        }
56

57
        private void Start_Click(object sender, EventArgs e)
58
        {
59
            if(!serialPort1.IsOpen)serialPort1.Open();//bei Bet. von Start und Port noch nicht offen->öffnet sich der Port
60
          
61
        }
62

63
       
64
       
65
    }
66
}


Bitte um konstruktive Hilfe, bin am Rande der Verzweiflung

danke im Vorraus
Angehängte Dateien:

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