Hallo,
ich habe ein Problem. Ich habe ein C# Programm geschrieben mit den ich
daten über den Com Port schicken kann. Mein uC soll diese nun empfangen.
Sobald Daten empfangen werden, soll die LED am Port-D leuchten.
Vorher aber erstmal die 2 programme.
einmal mein uC Programm (Kommt aus den AVR Tutorial, also wird es wohl
nicht daran liegen):
1 | .include "m8def.inc"
|
2 |
|
3 | .def temp = R16
|
4 |
|
5 | .equ F_CPU = 3686400 ; Systemtakt in Hz
|
6 | .equ BAUD = 9600 ; Baudrate
|
7 |
|
8 | ; Berechnungen
|
9 | .equ UBRR_VAL = ((F_CPU+BAUD*8)/(BAUD*16)-1) ; clever runden
|
10 | .equ BAUD_REAL = (F_CPU/(16*(UBRR_VAL+1))) ; Reale Baudrate
|
11 | .equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000) ; Fehler in Promille
|
12 |
|
13 | .if ((BAUD_ERROR>10) || (BAUD_ERROR<-10)) ; max. +/-10 Promille Fehler
|
14 | .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
|
15 | .endif
|
16 |
|
17 | ; Stackpointer initialisieren
|
18 |
|
19 | ldi temp, HIGH(RAMEND)
|
20 | out SPH, temp
|
21 | ldi temp, LOW(RAMEND)
|
22 | out SPL, temp
|
23 |
|
24 | ; Port D = Ausgang
|
25 |
|
26 | ldi temp, 0xFF
|
27 | out DDRD, temp
|
28 |
|
29 | ; Baudrate einstellen
|
30 |
|
31 | ldi temp, HIGH(UBRR_VAL)
|
32 | out UBRRH, temp
|
33 | ldi temp, LOW(UBRR_VAL)
|
34 | out UBRRL, temp
|
35 |
|
36 | ; Frame-Format: 8 Bit
|
37 |
|
38 | ldi temp, (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)
|
39 | out UCSRC, temp
|
40 |
|
41 | sbi UCSRB, RXEN ; RX (Empfang) aktivieren
|
42 |
|
43 | receive_loop:
|
44 | sbis UCSRA, RXC ; warten bis ein Byte angekommen ist
|
45 | rjmp receive_loop
|
46 | in temp, UDR ; empfangenes Byte nach temp kopieren
|
47 | out PORTD, temp ; und an Port D ausgeben.
|
48 | rjmp receive_loop ; zurück zum Hauptprogramm
|
und mein C# programm
1 | using System;
|
2 | using System.Collections.Generic;
|
3 | using System.ComponentModel;
|
4 | using System.Data;
|
5 | using System.Drawing;
|
6 | using System.Linq;
|
7 | using System.Text;
|
8 | using System.Windows.Forms;
|
9 | using System.IO.Ports; //Einfügen
|
10 |
|
11 | namespace WindowsFormsApplication1
|
12 | {
|
13 | public partial class Form1 : Form
|
14 | {
|
15 |
|
16 | SerialPort AktuellerComPort = new SerialPort ("COM3",9600,Parity.None, 8,StopBits.One); // ComCort erzeugen
|
17 |
|
18 |
|
19 | public Form1()
|
20 | {
|
21 | InitializeComponent();
|
22 | }
|
23 |
|
24 | private void button1_Click(object sender, EventArgs e)
|
25 | {
|
26 | string[] schnittstellen = SerialPort.GetPortNames(); // Gibt alle aktuell verfügbaren Comports zurück
|
27 | foreach (string comport in schnittstellen)
|
28 | {comboBox1.Items.Add(comport); }
|
29 |
|
30 |
|
31 | }
|
32 |
|
33 | private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
|
34 | {
|
35 | try
|
36 | {
|
37 | AktuellerComPort.PortName = comboBox1.Text; // dem ComPort Objekt einen Comport zuweisen
|
38 | }
|
39 | catch (Exception ex)
|
40 | {
|
41 | MessageBox.Show(ex.Message);
|
42 | }
|
43 |
|
44 | }
|
45 |
|
46 | private void button2_Click(object sender, EventArgs e)
|
47 | {
|
48 | try
|
49 | {
|
50 | AktuellerComPort.Open();
|
51 | AktuellerComPort.Write(textBox1.Text); // sende inhalt der Textbox an ComPort
|
52 | AktuellerComPort.Close();
|
53 | }
|
54 | catch (Exception ex)
|
55 | {
|
56 | MessageBox.Show(ex.Message);
|
57 | }
|
58 | }
|
59 |
|
60 | private void button3_Click(object sender, EventArgs e)
|
61 | {
|
62 | try
|
63 | {
|
64 | AktuellerComPort.ReadTimeout = 300; //Wartezeit (Timeout Zeit) (in ms) auf Antwort bevor der Lesevorgang abgebrochen wird
|
65 | AktuellerComPort.Open();
|
66 | textBox2.Text = AktuellerComPort.ReadLine(); //einlesen
|
67 | AktuellerComPort.Close();
|
68 | }
|
69 | catch (Exception ex)
|
70 | {
|
71 | MessageBox.Show(ex.Message);
|
72 | AktuellerComPort.Close();
|
73 | }
|
74 | }
|
75 | }
|
76 | }
|
hier noch die Form dazu
Bild im Anhang form1.JPG
dabei ist der Button "Daten Senden" Button2 und links daneben die
Textbox1
So als Programmer habe ich den myAVR mySmartUSB MK2 bzw habe das
kommplette uC Board. Hier ein Bild vom Programmer:
Bild im Anhang mysmartusb_g.png
Ausgangssituration: Programm auf uC und das uC Board am PC via USB
angeschlossen. Rote LED vom Programmer leuchtet
Wenn ich jetzt das myAVRControlcenter benutze (hier ein Bild)
Bild im Anhang programm.JPG
und die Verbindung herstelle (Start Button oben rechts) dann geht die
rote Led von den Programmer aus und die 2 grünen Leds an.
Gebe ich dann im myAVR Controllcenter unter Daten Senden was ein und
klicke Senden werden die Daten übertragen (grüne LEDs blinken) und der D
Port vom uC wird gesetzt. -> Die Led Leuchtet (Port D PIN2 ist mit einer
Led verbunden)
Wenn ich das ganze über mein C# Programm probiere, geht die rote LED vom
Programmer nicht aus. Gebe ich in der Textbox was ein und klicke den
Butten "Daten Senden" leuchten zwar die beiden grünen LEDs vom
Programmer kurz auf (also es wird wohl etwas übertragen), aber der uC
bzw das Programm macht nichts. Also die LED am D Port leuchtet nicht.
Wie kann ich das Problem lösen?
Wäre super wenn einer eine Lösung weiß
Schonmal vielen Dank für die Antworten!
mfg André