www.mikrocontroller.net

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


Autor: Daniel Hardi (scretchy)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <avr/io.h>
#include <stdlib.h>
#include <stdint.h>
#include <util/delay.h>
#include <avr/interrupt.h>

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

void long_delay(unsigned int ms)
{
  for(; ms > 0; ms--) _delay_ms(1);
}

void uart_init(void)
{
  UCSRB |= (1<<TXEN) | (1 << RXEN);  // UART TX einschalten
  UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1 
 
  UBRRH = UBRR_VAL >> 8;
  UBRRL = UBRR_VAL & 0xFF;
}

/* ATmega16 */
int uart_putc(unsigned char c)
{
    while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich */
    {
    }                             
 
    UDR = c;                      /* sende Zeichen */
    return 0;
}
 
 
/* puts ist unabhaengig vom Controllertyp */
void uart_puts (char *s)
{
    while (*s)
    {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
        uart_putc(*s);
        s++;
    }
}

uint8_t uart_getc(void)
{
    while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
        ;
    return UDR;                   // Zeichen aus UDR an Aufrufer zurueckgeben
}


int main(void)
{
  uart_init();
  DDRB  = 0x00; /* alle Pins von Port B als Eingang */
  PORTB = 0xff; /* alle PullUPs von Port B Aktiv */
  unsigned int aktive = "0";
  while(1)
  {
    if(!(PINB & (1 << PB0)))
    {
      if(aktive == "0")
      {  
        uart_puts("1");
        aktive = "1";
        long_delay(1000);
      }
    }
    else
    {
      aktive = "0";
    }
  }
  return 0;
}

Danke schonmal
Grüße Daniel

Autor: Frankl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reset Pin beschaltet ?

Autor: Malte (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Daniel Hardi (scretchy)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Hardi (scretchy)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Hardi (scretchy)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  unsigned int aktive = "0";

Buhahaha;)

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel Hardi (scretchy)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel Hardi (scretchy)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Hast du auch eine Masseverbindung zum PC?

MfG Spess

Autor: Daniel Hardi (scretchy)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie gross ist dein F_CPU?

Autor: Daniel Hardi (scretchy)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Daniel Hardi (scretchy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja auch damit Übersetzt.
Und ja ich Brenne die richtige HEX Datei.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ja auch damit Übersetzt.

Und die Fehlermeldungen stören dich irgendwie gar nicht?

Autor: Daniel Hardi (scretchy)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Brenn mal die CKOPT Fuse auf 0.

Autor: Daniel Hardi (scretchy)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.