mikrocontroller.net

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


Autor: C#ler (Gast)
Datum:
Angehängte Dateien:

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

#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;
  UCSRA |= (1 << U2X);
  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    
}

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

sing 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 aktiviert
            
          
            
        }

        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {

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

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
         
                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?)
              
              
              
            this.Invoke(new EventHandler(richTextBox1_TextChanged));//ruft Event auf
        }

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

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

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

       
       
    }
}


Bitte um konstruktive Hilfe, bin am Rande der Verzweiflung

danke im Vorraus

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

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

Autor: C#ler (Gast)
Datum:

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

Autor: Thomas L. (tom)
Datum:

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

Autor: C#ler (Gast)
Datum:

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

Autor: Thomas L. (tom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann weisst ja jetzt zumindest dass das Problem auf der uC Seite liegt 
:)

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

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.