Forum: Mikrocontroller und Digitale Elektronik RS232 -> Coputer


von 56645156 (Gast)


Lesenswert?

Hey Leute,
habe eine Frage
wie bekomme ich es hin das ich unter dem AVR Terminal Zahlen und 
Buchstabe bekomme?
Ich Probiere grade grade damit einwenig rum aber bekomme es nicht hin:-(
bei 9600 Baudratebekomme ich nur &@ usw.
was kann ich da machen?

von hdd (Gast)


Lesenswert?

Was sendest du denn für Daten? Sind deine Zahlen auch wirklich 
ASCII-Werte?
Dein Sender steht auch auf 9600 Baud?

Wenn du Hilfe willst, dann liefer bitte mehr Infos (Code und ggf. 
Schaltung)

von 56645156 (Gast)


Lesenswert?

Das ist das Beispiel SerilleKommunikation aus dem Buch AVR-RISC 
Emebedded Software selbst enwickeln
1
/*
2
  Serielle Kommunikation 
3
  Einfacher Befehlsinterpreter
4
5
  ATMEGA8/16/32 und kompatibel
6
  STK500 mit dem STK500 Oszillator (3.68 MHz)
7
  Baudrate: 9600 (8N1)
8
9
  Roman Mittermayr
10
  AVRBUCH.DE  
11
*/
12
13
#include <avr/io.h>
14
#include <string.h> // Für "strcmp"
15
#include <stdlib.h> // Für "itoa"
16
17
18
#define  TAKT      3680000
19
#define UART_BAUDRATE  9600
20
21
22
23
// Berechnung der Konfigurationsparameter
24
#define UART_SETTING  ((TAKT/16L/UART_BAUDRATE)-1)
25
26
27
void setup_uart()
28
{
29
  /* Baudrate einstellen */
30
  UBRRH = (char) (UART_SETTING >> 8);
31
  UBRRL = (char) (UART_SETTING);
32
33
  /* Empfänger und Sender einschalten */
34
  UCSRB = (1<<RXEN) | (1<<TXEN);
35
36
  /* Asynchron, 8N1 */
37
  UCSRC = (1<<URSEL) | (3<<UCSZ0);
38
}
39
40
void uart_putchar(char c)
41
{
42
  // Warten bis Buffer bereit ...
43
  while (!(UCSRA & (1 << UDRE)))
44
    ;
45
46
  // Senden...
47
  UDR = c;
48
}
49
50
void uart_putstring(char *str)
51
{
52
  unsigned char i;
53
54
  for (i=0;i<255;i++) /* Maximal 255 Zeichen ausgeben ... */
55
  {
56
    if (str[i] != 0)
57
      uart_putchar(str[i]);
58
    else
59
      break; // Ende des Strings erreicht
60
  }
61
}
62
63
char uart_getchar()
64
{
65
  // Ist schon ein Zeichen im Buffer?
66
  if (bit_is_set(UCSRA, RXC))
67
    return UDR;
68
  else 
69
    return -1;
70
}
71
72
void uart_readline(char *str)
73
{
74
  char c;
75
  unsigned char index;
76
  
77
  index = 0;
78
79
  while (1)
80
  {
81
    c = uart_getchar();
82
    if (c != -1)
83
    {
84
      if (c == 13) /* ASCII: NewLine */
85
      {
86
        /* Ende der Zeile erreicht,
87
           also String abschließen */
88
        str[index] = 0;
89
90
        /* Funktion beenden */
91
        return;
92
      }
93
      else /* Normales Zeichen, anhängen an die Zeichenkette */
94
      {
95
        str[index] = c;
96
        index++;
97
      }
98
    }
99
  }
100
}
101
102
int main(void)
103
{
104
  char kommando[255];
105
  char temp[10];
106
  unsigned char zahl=0;
107
108
  /* RS232 einschalten ... */
109
  setup_uart();
110
111
  /* Willkommensnachricht senden ... */
112
  uart_putstring("AVRBUCH.DE - Serielle Kommunikation gestartet ...\r\n\r\n");
113
114
  while (1)
115
  {
116
    /* Auf komplettes Kommando warten ... */
117
    uart_readline(kommando);
118
119
    /* Welcher Befehl wurde geschickt? ============ */
120
121
    /* ==== BEFEHL: "version" */
122
    if (strcmp(kommando, "version")==0)
123
    {
124
      uart_putstring("OK: Version 1.00\r\n");
125
    }
126
127
    /* ==== BEFEHL: "up" */
128
    else if (strcmp(kommando, "up")==0)
129
    {
130
      if (zahl<255)
131
      {
132
        zahl++;
133
        uart_putstring("OK: Zahl wurde erhoeht\r\n");
134
      }
135
      else
136
        uart_putstring("ERROR: Maximum erreicht (Zahl=255)\r\n");
137
    }
138
139
    /* ==== BEFEHL: "down" */
140
    else if (strcmp(kommando, "down")==0)
141
    {
142
      if (zahl>0)
143
      {
144
        zahl--;
145
        uart_putstring("OK: Zahl wurde verringert\r\n");
146
      }
147
      else
148
        uart_putstring("ERROR: Minimum erreicht (Zahl=0)\r\n");
149
    }
150
151
    /* ==== BEFEHL: "show" */
152
    else if (strcmp(kommando, "show")==0)
153
    {
154
      itoa(zahl, temp, 10);
155
      uart_putstring("OK: Zahl = ");
156
      uart_putstring(temp);
157
      uart_putstring("\r\n");
158
    }
159
  }
160
161
  return 0;
162
}
Es ist ein ATMege 16
reicht das oder braucht Ihr mehr?
Wäre sehr nett wenn Ihr mir Helfen würdet

von Helfer (Gast)


Lesenswert?

> Es ist ein ATMege 16

Werkfrisch (1 MHz) oder bereits auf die 3.68 MHz Taktrate des STK500 
Oszillators gefust?

von 56645156 (Gast)


Lesenswert?

ist gebraucht kann ich also nicht sagen
andere sachen laufen ohne probleme nur da hab ich probleme bei

von Helfer (Gast)


Lesenswert?

> ist gebraucht kann ich also nicht sagen

Lies die Fuses aus und dann kannst du es sagen.

von 56645156 (Gast)


Lesenswert?

Ok kann ich jetzt sagen ist 1MHz

von Helfer (Gast)


Lesenswert?

Das erklärt die UART Probleme. Also ist Umfusen angesagt. Die Anleitung 
zum STK500 hilft dabei vermutlich weiter.

von Neuhier (Gast)


Lesenswert?

Wer oder was ist ein Coputer?

von Helfer (Gast)


Lesenswert?

Schreibfehlerbruder vom Computer

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.