Forum: Compiler & IDEs ATmega8 Usart will nicht :-(


von Stephan M. (Gast)


Lesenswert?

Hallo
Ich probiere mich grade an der Kommunikation zwischen PC und usart des 
Atemga8 nur will der leider nicht so wie Ich es gerne hätte.

Ich habe die Schaltung fast so wie in den Tutorials von 
mikrocontroller.net 
(http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART)
nur habe ich ein SUB-D9-Male für den direkten anschluss an den PC ohne 
gekreuztes Kabel
entsprechend pin 2 und 3 , 7 und 8 getauscht

und ich habe ein st232cn anstelle eines MAX232


und mein Code sieht so aus

1
#include <avr/io.h> 
2
#define F_CPU 1000000 /* evtl. bereits via Compilerparameter definiert */
3
#define BAUD 2400
4
#include <util/setbaud.h>
5
6
void uart_init(void)   
7
{
8
   UBRRH = UBRRH_VALUE;
9
   UBRRL = UBRRL_VALUE;
10
   /* evtl. verkuerzt falls Register aufeinanderfolgen (vgl. Datenblatt)
11
      UBRR = UBRR_VALUE;
12
   */
13
#if USE_2X
14
   /* U2X-Modus erforderlich */
15
   UCSRA |= (1 << U2X);
16
#else
17
   /* U2X-Modus nicht erforderlich */
18
   UCSRA &= ~(1 << U2X);
19
#endif
20
 
21
   // hier weitere Initialisierungen (TX und/oder RX aktivieren, Modus setzen 
22
   UCSRB = (1<<RXEN)|(1<<TXEN); 
23
   UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1 
24
25
}
26
27
28
29
30
31
32
33
int uart_putc(unsigned char c)
34
{
35
    while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich */
36
    {
37
    }                             
38
 
39
    UDR = c;                      /* sende Zeichen */
40
    return 0;
41
}
42
 
43
 
44
45
46
47
uint8_t uart_getc(void)
48
{
49
    while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
50
        ;
51
    return UDR;                   // Zeichen aus UDR an Aufrufer zurueckgeben
52
}
53
54
55
56
int main(void)
57
58
{
59
uint8_t buffer;
60
uart_init();
61
62
while(true)
63
{
64
  buffer = uart_getc();
65
  uart_putc(buffer);
66
}
67
68
69
}

mein putty sagt leider nichts (com1 mit 2400er baudrate)
wo könnte der Fehle sein?

(Mod: Tippfehler im Topic korrigiert, Codeformatierung aktiviert)

von Philipp W. (johnnyflash)


Lesenswert?

Stephan M. schrieb:
> while(true)

Wo ist das #define für TRUE?

von Karl H. (kbuchegg)


Lesenswert?

Stephan M. schrieb:
> Hallo
> Ich probiere mich grade an der Kommunikation zwischen PC und usart des
> Atemga8 nur will der leider nicht so wie Ich es gerne hätte.
>
> Ich habe die Schaltung fast so wie in den Tutorials von
> mikrocontroller.net
> (http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART)
> nur habe ich ein SUB-D9-Male für den direkten anschluss an den PC ohne
> gekreuztes Kabel
> entsprechend pin 2 und 3 , 7 und 8 getauscht
>
> und ich habe ein st232cn anstelle eines MAX232


Als erstes den µC aus dem Sockel nehmen und im Sockel den Rx Pin mit dem 
Tx Pin verbinden.
Wann du am PC (in einem Terminalprogramm) etwas tippst, musst du das 
getippte wieder sehen können. Wenn nicht, dann stimmt dein 
Hardware-aufbau nicht (Kabel falsch gekreuzt, ST232 falsch beschaltet). 
WEnn das getippte im Terminal erscheint, dann den Gegentest machen: 
Brücke entfernen und das Echo muss aufhören.

Damit weißt du erst mal, dass deine ganze Verkabelung erst mal 
funkioniert.

Wenn das dann klappt, dann fängst du mit dem einfachst möglichen 
Testprogramm an:
1
.....
2
3
int main(void)
4
{
5
  uart_init();
6
7
  while(1)
8
  {
9
    uart_putc('x');
10
  }
11
}

von Stephan M. (Gast)


Angehängte Dateien:

Lesenswert?

Hi danke für die schnelle Antwort :-)
Ich habe mal RX und TX am D-Sub Anschluss verbunden und putty hat die 
eingetippten Zeichen angezeigt. Habe ich es aber hinter den st232cn die 
entsprechenden Pins verbunden funktioniert es nicht. Also wird der 
Fehler wohl an meiner Schaltung liegen.
Ich habe mal versucht was zusammenzuschneiden (sieht jetzt nicht so 
schön aus) es ist zwar eine D-Sub female anschluss aufgezeichnetb, 
angelötet ist aber ein D-Sub Mal Anschluss

von Karl H. (kbuchegg)


Lesenswert?

Dann richte dir eine LED her, die du mit 330 Ohm an GND anschliesst.
AUf dein Terminal legst du einen Stein, so dass es auf Dauersenden geht.
Mit dem anderen Ende der LED tippst du am Header (oder am ST) eine der 
beiden Leitungen an. Auf einer wird die LED flackern. Diese Leitung muss 
am ST am Pin 13 (R1In) ankommen. Wahrscheinlich wird sie bei dir am Pin 
14 (T1Out) ankommen und damit genau verkehrt.

PS: Es kann sein, dass der PC gegen den ST keine Chance hat und der die 
Leitung auf Dauer-Negativ zieht. D.h. ST aus dem Sockel nehmen.

von Stephan M. (Gast)


Lesenswert?

Edit
Ich habe bei V+ und V- die Kondensatoren falsch herum eingezeichnet

von Stephan M. (Gast)


Lesenswert?

So es Klapt jippii :-)
Pin13 und Pin 14 waren vertauscht ich hatte zwar schon mal die Kabel 
getauscht nur auf der falschen Seite des ST :-)

noch mal ein großes Dankeschön

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.