Forum: Mikrocontroller und Digitale Elektronik Atmega 8 - 16Mhz - MAX232N


von Daniel H. (scretchy)


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

von Frankl (Gast)


Lesenswert?

Reset Pin beschaltet ?

von Malte (Gast)


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)

von Daniel H. (scretchy)


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

von Daniel H. (scretchy)


Lesenswert?

Habe gerade noch nen zweiten IC Programmiert unddurchgetauscht. Gleicher 
fehler.
Am IC liegt es nicht. Aufm STK funktionierts. Ich habe aufm STK mal an 
den Beinchen des Quarzes gemessen. Auf dem STK liegen ca 3,3VDC an. Auf 
meiner Platine wie gesagt nur 0,25V.
Quarz defekt?

MFG

von Daniel H. (scretchy)


Lesenswert?

Leider funktioniert das Beitrag bearbeiten nicht.
Habe gerade das Quarz rausgelötet und nen neues Reingelötet. Immernoch 
das selbe Problem.
Welche Spannung sollte ich denn wo am Quarz haben?
MFG

von holger (Gast)


Lesenswert?

>  unsigned int aktive = "0";

Buhahaha;)

von holger (Gast)


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.

von Daniel H. (scretchy)


Lesenswert?

Hallo holger.
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

MFG

von holger (Gast)


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.

von Daniel H. (scretchy)


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

von spess53 (Gast)


Lesenswert?

Hi

Hast du auch eine Masseverbindung zum PC?

MfG Spess

von Daniel H. (scretchy)


Lesenswert?

Habs jetzt mit ner 64er StartUp versucht. Kein Erfolg.
Masse habe ich einmal auf Pin 5 vom Comport auf meiner Platine und am 
Gehäuse vom ComPort.

MFG

von holger (Gast)


Lesenswert?

Wie gross ist dein F_CPU?

von Daniel H. (scretchy)


Lesenswert?

Pin 2, 3 und 5 habe ich auf dem ComPort  Belegt.

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

von holger (Gast)


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?

von Daniel H. (scretchy)


Lesenswert?

Ja auch damit Übersetzt.
Und ja ich Brenne die richtige HEX Datei.

von holger (Gast)


Lesenswert?

>Ja auch damit Übersetzt.

Und die Fehlermeldungen stören dich irgendwie gar nicht?

von Daniel H. (scretchy)


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

von holger (Gast)


Lesenswert?

Brenn mal die CKOPT Fuse auf 0.

von Daniel H. (scretchy)


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

von H.Joachim S. (crazyhorse)


Lesenswert?

Hatten wir selbiges Problem nicht schon vor kurzem mal? Auch wenn es 
eigentlich selbstverständlich ist, vielleicht sollte im Tutorial noch 
mal explizit darauf hingewiesen werden.

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.