Atmega 8 - 16Mhz - MAX232N

OP #1885567
Lesenswert?

Hallo.
Ich experimentiere seid einiger Zeit mit dem STK500 und es klappt auch 
alles sehr gut soweit. Jetzt bin ich soweit, dass ich etwas fest bauen 
möchte ohne STK.

Ich brauche eine Box mit zuerst einem Knopf. Sobald man diesen betätigt, 
soll eine Zahl über RS232 gesendet werden. Ein Visual Basic Programm 
Wertet dann die Zahl aus und führt eine Entsprechende funktion aus. Bis 
jetzt ist nur eine Taste verbaut, soll später aber mehrere hinzukommen.
Bisher wird wenn man PB0 auf Masse zieht die 1 gesendet. Also als Binär 
die "49".
Wie gesagt auf dem STK500 kein Ding.

Jetzt hab ich mir ein Atmega8 mit Stecksockel auf eine Platine gelötet. 
Spannungsversorgung macht ein 7805 mit nachgeschaltetem 100nF KerKo.
Den MAX232n habe ich wie in dem Tutorial: 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART auf die 
Platine gelötet. Desweiteren habe ich einen 16Mhz Quarz an XTAL1 und 
XTAL2 angeschlossen. Von den beiden Eingängen dann einen 22pF Kerko auf 
Masse.
Jetzt ziehe ich den Programmierten Atmega vom STK und steck ihn auf die 
Platine. Spannung dran, ComPort dran. Hterm auf. Connect Hterm.
PB0 auf Masse.
Jetzt empfange ich aber "?"ASCII, "FF"Hex, "255"DEC, "11111111"Bin.
Ich habe an der Software etc nichts geändert.

Was mache ich falsch? Wie kann ich weiter vorgehen um den Fehler 
einzugrenzen? Kommt der MAX232 mit der Geschwindigkeit nicht klar?
Am Quarz messe ich 0,25V.

Hier noch der verwendete Programmcode:
1
#include <avr/io.h>
2
#include <stdlib.h>
3
#include <stdint.h>
4
#include <util/delay.h>
5
#include <avr/interrupt.h>
6

7
#define BAUD 9600UL
8
#define UBRR_VAL ((F_CPU + BAUD * 8) / (BAUD * 16) - 1)
9
#define BAUD_REAL (F_CPU / (16 * (UBRR_VAL + 1)))
10
#define BAUD_ERROR ((BAUD_REAL * 1000) / BAUD)
11
 
12
#if ((BAUD_ERROR < 990) || (BAUD_ERROR > 1010))
13
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! 
14
#endif
15

16
void long_delay(unsigned int ms)
17
{
18
  for(; ms > 0; ms--) _delay_ms(1);
19
}
20

21
void uart_init(void)
22
{
23
  UCSRB |= (1<<TXEN) | (1 << RXEN);  // UART TX einschalten
24
  UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1 
25
 
26
  UBRRH = UBRR_VAL >> 8;
27
  UBRRL = UBRR_VAL & 0xFF;
28
}
29

30
/* ATmega16 */
31
int uart_putc(unsigned char c)
32
{
33
    while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich */
34
    {
35
    }                             
36
 
37
    UDR = c;                      /* sende Zeichen */
38
    return 0;
39
}
40
 
41
 
42
/* puts ist unabhaengig vom Controllertyp */
43
void uart_puts (char *s)
44
{
45
    while (*s)
46
    {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
47
        uart_putc(*s);
48
        s++;
49
    }
50
}
51

52
uint8_t uart_getc(void)
53
{
54
    while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
55
        ;
56
    return UDR;                   // Zeichen aus UDR an Aufrufer zurueckgeben
57
}
58

59

60
int main(void)
61
{
62
  uart_init();
63
  DDRB  = 0x00; /* alle Pins von Port B als Eingang */
64
  PORTB = 0xff; /* alle PullUPs von Port B Aktiv */
65
  unsigned int aktive = "0";
66
  while(1)
67
  {
68
    if(!(PINB & (1 << PB0)))
69
    {
70
      if(aktive == "0")
71
      {  
72
        uart_puts("1");
73
        aktive = "1";
74
        long_delay(1000);
75
      }
76
    }
77
    else
78
    {
79
      aktive = "0";
80
    }
81
  }
82
  return 0;
83
}

Danke schonmal
Grüße Daniel
Gast #1885591
Lesenswert?

Mit wieviel MHz wurde der AVR den auf dem STK500 betrieben? Viele Leute 
stecken da fröhlich einen Quarz drauf, vergessen aber umzujumpern und 
benutzen unwissentlich die STK-eigene Takterzeugung (die glaube ich bei 
4 oder 8 MHz voreingestellt ist)
OP #1885616
Lesenswert?

Hallo.
Nein Reset Pin hängt in der Luft.
Auf dem STK habe ich auch ein 16Mhz Quarz. Es sei denn ich habe einen 
Jumper falsch gesteckt gehabt.
Auf dem STK funktioniert es mit folgenden Jumperstellungen:
XTAL1 gejumpert
OSCSEL zu den Stecksockeln für die IC's hin gejumpert. Nicht auf dem Pin 
wo die 1 steht. In Crystal das 16Mhz Quarz.

MFG
Gast #1885675
Lesenswert?

>Habe gerade das Quarz rausgelötet und nen neues Reingelötet. Immernoch
>das selbe Problem.

Lass ihn mal ganz weg. Wenn immer noch was kommt über RS232
dann stehen die Fuses auf Int.RC Oscillator.

>Welche Spannung sollte ich denn wo am Quarz haben?

Kannst du mit dem Multimeter nicht messen.
Gast #1885686
Lesenswert?

>Brauch ich nicht wieder rauslöten.
>Die FuseBits stehen auf "Ext. Crystal/Resonator High Freq.; Start-up
>time: 16K CK + 0ms"
>Sollte alles richtig sein

Sieht alles danach aus das du mit der falschen Baudrate sendest.
OP #1885691
Lesenswert?

Ja danach sieht es tatsächlich aus. Stecke gerade wie wild um. Auf dem 
STK funktionierts. Aufer PLatine nicht.
Das komische ist, dass an den Beinchen vom Quarz auf dem STK 3,3V liegen 
und auf meinem gelötetem 0V.
Oder liegt das an der StartUp Time? Das das ding sich erst einschwingen 
muss?

MFG
Gast #1885715
Lesenswert?

>Achso srry habe ich im AVR Studio in den Projekteinstellungen
>hinterlegt.
>Habe 16000000Hz eingestellt.

Und das Programm auch damit übersetzt?
Schon mal kontrolliert ob du vieleicht die
falsche HEX Datei brennst?
OP #1885733
Lesenswert?

Naja schon,
weiß aber iwie nicht genau was der Fehler ist. Bzw. Es funktioniert ja.
Nur warum nicht auf meinem gelötetem Board.

Wenn ich RXD und TXD vom ComPort aus am MAX232 Brücke. Und dann in Hterm 
was sende, kommt es auch wieder an.
Wenn ich jetzt aber auf der IC Seite vom MAX232 Brücke kommt nichts mehr 
an. Da ist doch was faul oder?
MFG
OP #1885752
Lesenswert?

Das ist mir jetzt peinlich!
Erstmal vielen dank für die schnelle Hilfe holger und alle anderen.
Bin nach dem Tutorial von Mikrocontroller vorgegangen.
Habe auf den Schaltplan geschaut und alles verlötet wie im Bild.
Jedoch habe ich unten die Spannungsversorgung misachtet, weil ich iwie 
nicht verstanden habe was damit gemeint ist. Nachdem ich eben ein Blick 
ins Datenblatt geworfen habe, und mir VCC und GND ins Auge gestochen 
sind war mir einiges Klar.
VCC und GND dran und schon läuft das ding.
Bin davon ausgegangen das das mit den Pins 2und6 abgegolten ist. Wie 
auch immer das Funktioniert.

Naja so kanns gehen.
Vielen Dank nochmal und schönen Abend noch.
MFG Daniel

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren