Forum: PC-Programmierung c#:COM1-USART-Problemchen


von C#ler (Gast)


Angehängte Dateien:

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Der Fehler ist der, daß Du den Fehler nicht beschreibst.

Du beschreibst weder, was passieren soll, noch, was anstelle dessen 
passiert.

von C#ler (Gast)


Lesenswert?

Hy: die TxtBox anwendung zeigt mir ständig nur das spanische A an, was 
oben steht, selbst wenn ich ein anderes Zeichen sende, wirt dieses A 
angezeigt


gruß

von Thomas L. (tom)


Lesenswert?

Hast dir mal mit einem Terminal Programm angeschaut was du WIRKLICH 
sendest?

Du musst die serialPort1 ausserdem noch bzgl. Baudrate, startbits, 
Stopbits, Parity, FlowControl usw. konfigurieren

von C#ler (Gast)


Lesenswert?

Hy: Wenn ich mit Teraterm mir dies anschaue, sendet er trotzdem nur das 
spanische A:

gewählte Konfi.:

Port:COM1
Baud:9600
Data:8bit
Parity:none
Stop:1bit
Flow ctrl:none

von Thomas L. (tom)


Lesenswert?

Dann weisst ja jetzt zumindest dass das Problem auf der uC Seite liegt 
:)

Taktrate überprüft? Baudrate Register mit korrektem Wert geladen?

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.