- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 5 von 5

Thema: C# Kommunikation mit dem ATMEGA32

  1. #1

    Frage C# Kommunikation mit dem ATMEGA32

    Anzeige

    Praxistest und DIY Projekte
    Hallo zusammen,

    ich brauche Hilfe, was die Ausgabe über die Serielle Schnittstelle aus C# angeht.

    Erstmal allgemein. Ich habe ein Programm geschrieben und benötige nun die Funktionalität zwei verschiedene Signale auf die Serielle Schnittstelle zu schicken. Darüber werden dann Relais geschaltet, um eine Beleuchtung zu aktivieren.
    Die Schaltung an sich funktioniert und wurde von Kollegen (Elektrotechnik Studenten) gebaut. Verbunden mit der seriellen Schnittstelle sind allerdings nur die drei Leitungen TXD, RXD und GND.

    Nun zu meinem Problem:
    Das ganze über Putty anzusprechen ist kein Problem. Nutze ich allerdings mein C# Programm tut sich rein gar nichts.

    Hier einmal das wichtigste aus einem Code: (Manches ist wohl überflüssig, aber ich war so verzweifelt, alles mögliche auszuprobieren!

    Für jede Hilfe wäre ich echt dankbar!

    Code:
           private SerialPort comPort = new SerialPort("COM1", 2400, Parity.None, 8, StopBits.One);
            public const int InfiniteTimeout=0;
            
            private void button_Click(object sender, EventArgs e)
            {
                    char[] buff = new char[1];
                    buff[0] = 'J';
                    comPort.ReadBufferSize = 2048;
                    comPort.WriteBufferSize = 512;
                    comPort.ReadTimeout = InfiniteTimeout;
                    comPort.RtsEnable = true;
                    comPort.DtrEnable = true;
                    
                    comPort.Handshake = Handshake.None;
                    
                    if (comPort.IsOpen == false) 
                    { 
                        comPort.Open(); 
                    }
                    comPort.Write(buff, 0,1);
                                    
                    comPort.Close();
                }
    PS: Habe das ganze auch schon mit nem Serial Port Monitor geloggt, aber weiß einfach nicht, was der Fehler ist...

  2. #2
    Hallo nochmal,

    ich bin nun schon ein Stück weiter.

    Problem war folgendes: Das erste Zeichen eines Strings wird bei der Übertragung anscheinend verschluckt.
    Wenn man dann nur ein Zeichen überträgt kommt nichts an...

    Super Sache, stundenlanges Herumsuchen und die Lösung scheint ein beliebiges Zeichen vor dem zu übetragenden Zeichen zu sein

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Du hast aber schon gesehen, dass die übergeordnete Topic "Atmel AVR Controller und Programmierung" lautet ? Hier müsste also eher Dein AVR-Code stehen, welcher beiläufig der hier interessantere sein dürfte und nicht der PC-seitige Teil. Je nach AVR-Teil muss sich der PC-Teil entsprechend verhalten.
    Üblicherweise wird nach dem Steuerzeichen ein CR geschickt, geht aber auch ohne. Und verschluckt wir ein einzelnes Zeichen sicher nicht, jetzt wird halt ein Murks einen anderen Murks kompensieren, darum sieht's aus, als ob's richtig wäre.
    Stell doch mal den AVR-Code ein.

  4. #4
    Ja, ich war mir schon fast bewusst, dass das Thema nicht in diesem Thread richtig ist... Hatte aber sonst auf einen Moderator gehofft, der das Teil an die passende Stelle verschiebt.

    Laufen tut mein C# Code jetzt. Allerdings habe ich ein eigenartiges Problem. Die Kommunikation mit dem Mikrocontroller funktioniert nur, wenn ich auch einen Portmonitor auf dem System anhabe, auf dem auch mein C# Programm läuft.

    Hier einmal beide Codeausschnitte:
    C# Programm:
    Code:
     public SerialPort comPort = new SerialPort("COM1", 2400, Parity.None, 8, StopBits.One);
            
            
    
            public void ser_sendYes()
            {
                if (comPort.IsOpen == false)
                {
                    comPort.Open();
                }
                comPort.Write("J\r");
                comPort.Close();
            }
            public void ser_sendReset()
            {
                if (comPort.IsOpen == false)
                {
                    comPort.Open();
                }
                comPort.Write("R\r");
                comPort.Close();
            }
    
    	this.ser_sendReset();
    	this.ser_sendYes();
    Mikrocontroller (BASCOM):
    Code:
    Rem This file contains an error in the include statement
    Rem the file a.bas does not exist
    Rem It shows that the editor will load this file
    Rem and displays the error marker on this line
    Rem when you compile the main file : include.bas
    $regfile = "m32def.dat"
    $crystal = 4000000
    $baud = 2400
    
    Config Porta.0 = Output
    Config Porta.1 = Output
    Config Porta.2 = Output
    Config Porta.3 = Output
    Config Porta.4 = Output
    
    Dim X As Byte
    Dim Y As Byte
    Dim Empfangen As String * 255
    
    Declare Sub Led1()
    Declare Sub Led2()
    Declare Sub Led3()
    Declare Sub Led4()
    Declare Sub Blinken()
    Do
    
    
       X = 0
    
       Do
          Empfangen = ""
          Input Empfangen
    
          Select Case Empfangen
          Case "J"
             Led1
             X = X + 1
          Case "R"
             Porta.0 = 0
             Porta.1 = 0
             Porta.2 = 0
             Porta.3 = 0
             X = 4
          End Select
       Loop Until X = 4
    
       Wait 2
       Porta.0 = 0
       Porta.1 = 0
       Porta.2 = 0
       Porta.3 = 0
       Porta.4 = 0
    
    Loop
    
    End
    
    Sub Led1()
       If Porta.0 = 0 Then
          Porta.0 = 1
          Print "Led 1 ist an"
       Else
          Led2
       End If
    End Sub
    
    Sub Led2()
       If Porta.1 = 0 Then
          Porta.1 = 1
          Print "Led 2 ist an"
       Else
          Led3
       End If
    End Sub
    
    Sub Led3()
       If Porta.2 = 0 Then
          Porta.2 = 1
          Print "Led 3 ist an"
       Else
          Led4
       End If
    End Sub
    
    Sub Led4()
       If Porta.3 = 0 Then
          Porta.3 = 1
          Print "Led 4 ist an: Gewonnen"
          Wait 1
          Blinken
       End If
    End Sub
    
    Sub Blinken()
    
    Y = 0
    
    Do
    Porta.4 = 1
    Waitms 500
    Porta.4 = 0
    Waitms 500
    Y = Y + 1
    Loop Until Y=15
    End Sub

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Da wärst Du wohl im Bascom Thread besser aufgehoben.
    Aber zum Code: Mittlerweile sendest Du ja immerhin ein CR, dachte mir vorher schon, dass es daran scheitert. Solltest Du Input von Bascom verwenden wollen, dann musst Du darauf achten, dass dort der String auch mit nur einem CR erkannt wird. Schau' Dir dazu Config Input an, damit kann man das einstellen.
    Sonst wirf noch einen Blick auf Waitkey oder das Beispiel zu Ischarwaiting in der Hilfe. Damit kannst Du auf jedes gesendete Zeichen reagieren und musst nicht warten, bis die Input Funktion durch ein CR/LF abgeschlossen wurde. Außerdem würde ich Dir empfehlen $hwstack, $swstack und $framesize im Code zu definieren, damit die nicht zu klein sind.
    Edit:
    Schreib' Dir einen kleinen Code in Bascom, mit dem Du eine Led kurz blinken lässt sobald ein Zeichen ankam, das geht über Waitkey. Dann siehst Du ob ohne Portmonitor überhaupt Zeichen ankommen. Was ich zum Test auch noch machen würde, ist in der Systemsteuerung den Com1 Port fest auf die 2400, bzw. auch die anderen Parameter einzustellen.
    Geändert von MagicWSmoke (21.03.2012 um 08:47 Uhr)

Ähnliche Themen

  1. atmega32 <---> atmeg32 Infrarot-Kommunikation
    Von jcrypter im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 06.08.2010, 12:46
  2. ATmega32 und DataFlash - keine Kommunikation möglich
    Von nowayback im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 28.05.2009, 19:25
  3. Handy-Atmega32-Kommunikation (seriell)
    Von stoffelll im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 18.09.2007, 07:33
  4. Kommunikation zwischen C++ und ATMega32 (realisieren??)
    Von strunz im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 16
    Letzter Beitrag: 21.04.2006, 05:37
  5. Kommunikation ATMega32 <-> CmuCam2 funst nicht !
    Von Javik im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 19
    Letzter Beitrag: 26.08.2005, 10:51

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen