www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR32 RS232 Probleme


Autor: Thorsten Grube (stubi2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Bitte nachsicht ist mein erster Beitrag hier. Bin aber über Anregungen 
was ich das nächste mal besser machen kann, dankbar.

Ich habe mir ein Testboard mit Display, EEProm, Max232, etc. gekauft.
Die Taster, die Dioden, das Display funktionieren alle wie sie sollen. 
Aber die Serielle Schnittstelle bekomme ich nicht zum laufen.

Im Programm (GCC) sind ein paar Dinge die ich nicht verstehe. Bin in C++ 
noch ein neuling, programmiere sonst nur Programme für PC's.

Auf dem Board ist ein Quarz, auf dem steht:"A8.000J". Ich denke mal das 
sollen 8Mhz sein.

Im Programm wird aber mit einem anderen Wert gerechnet????
evalboard.h
#define version 1.0
#define EEPROM __attribute__((section(".eeprom")))
#define XTAL_CPU      8867238         /* 8.8Mhz 8867238*/
#define UART_BAUD_RATE      9600      /* 9600 baud */

#define i24c64  0xA0
#define i24cxx_max 0xffff  /*Grösse des EEProms*/

Ich muss aber gestehen, das ich da noch nicht ganz durchsteige.
Verwendet wird eine Libary: uart.c

Hat vielleicht jemand für mich ein ganz ganz einfaches Programm in C 
welches nur einfach Daten auf die Schnittstelle schreibt. Damit könnte 
ich andere Probleme in dem Programm ausschliessen.

Ist ein bischen viel Text, sorry.

Autor: Thorsten Grube (stubi2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe schon mal weiter getestet.

Ich habe sichergestellt, das der Prozessor mit dem externen Quarz 
arbeitet.
Ein kleines Program was eine LED im sekundentakt blinken lässt, hat mir 
dabei geholfen.

Es würde mir schon helfen, wenn mir einer ein ganzes Programm schicken 
kann, welches Daten über eine Schnittstelle sendet. Bitte keine 
Code-Schnippsel, dafür sind meine Kenntnisse noch zu gering.

Autor: Gemed Izmir (bobkins)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Thorsten,

hier ist ein kleines Programm mit meiner uart.c und uart.h. Du musst 
natürlich sicher sicherstellen, dass Sender und Empfänger am UART auf 
die selbe Baudrate eingestellt sind. Hier ist die Baudrate in der 
uart_init() auf 9600 Baud eingestellt (UBRRL = 207). Für andere 
Baudraten müsstest du im Datenblatt des ATMega nachschauen oder hier 
nochmal fragen.

Gruß
bobkins

uart.h
void uart_init(void);
void uart_puts(unsigned char *s);
void uart_put(unsigned char c);
uint8_t uart_get(void);

uart.c
#include <avr/io.h>
#include "uart.h"

void uart_init(void)
{
    UCSRB |= ( 1 << TXEN )|( 1 << RXEN ); // UART TX, RX einschalten
    UCSRC |= ( 1 << URSEL )|( 1 << UCSZ0 )|( 1 << UCSZ1 );  // Asynchron 8N1
    UCSRA |= ( 1 << U2X); // double speed mode
  UBRRH  = 0; // Highbyte ist 0
    UBRRL  = 207; // Lowbyte 207 = 9,6 kBaud
  // Berechnung laut Datenblatt
  
  // Flash Receive-Buffer (entfernen evtl. vorhandener ungültiger Werte)
    do
    {
        uint8_t dummy;
        (void) (dummy = UDR);
    }
    while (UCSRA & (1 << RXC));
}

// Diese Funktion schreibt Strings auf den UART indem die uart_charsenden-Funktion Zeichen für Zeichen aufgerufen wird
void uart_puts(unsigned char *s)
{
    while (*s)
    {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
        uart_put(*s);
        s++;
    }
}

void uart_put(unsigned char c)
{
    while (!(UCSRA & (1<<UDRE))); /* warten bis Senden moeglich */
    UDR = c;                      /* sende Zeichen */
}

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

und hier das eigentliche Programm:
#include <avr/io.h> 
#include <stdint.h>
#include "uart.h"
#include <util/delay.h>

int main ()
{
  unsigned char zeichen=0;

  uart_init(); // erstmal den uart-Kram initialisieren

  while(1)
  {
    uart_put(65); // Zeichen mit ASCII-Code 65 (A) per UART  senden
    uart_put('A'); // Zeichen senden

    uart_puts("Hallo Welt!"); // Einen string senden

    zeichen = uart_get(); // Zeichen empfangen
    uart_put(zeichen); // ... und wieder zurückschicken

    _delay_ms(500);
  }

  return 0;
}

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thorsten Grube (stubi2) wrote:
> Ich habe mir ein Testboard mit Display, EEProm, Max232, etc. gekauft.

Gemed Izmir (bobkins) wrote:
> Für andere Baudraten müsstest du im Datenblatt des ATMega
> nachschauen....

Gemed's Glaskugel scheint ja super zu funktionieren, meine ist leider 
zur Reparatur.....
Deshalb wäre es schön, wenn Thorsten mal sagt was er für einen 
Controller auf dem Board hat....

Autor: 1234 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein AVR32 ? Ein etwas hoher Einstieg fuer die kleine Ahnung...

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1234 (Gast) wrote:
> Ein AVR32 ? ....

na toll, da können wir dann raten:
ein AT32AP700x
oder
ein AT32UC3A
oder
ein AT32UC3B
?

Autor: Thorsten Grube (stubi2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nah dann wollen wir mal die Glaskugel in den Schrank packen und schauen 
was auf dem Prozessor drauf steht.

Übrigens: Ich dachte das AVR32 schon eindeutig genug sei. Sorry bin halt 
noch nicht so fitt wie andere.

ATMEA32, 16PU, 0807D

Danke für die Hilfe, wird mich schon einmal einen Schritt weiter 
bringen, werde das gleich einmal ausprobieren.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thorsten Grube (stubi2) wrote:
> ATMEA32, 16PU,

na, dann sind wir doch schon mal nen Schritt weiter. Also kein AVR32, 
sondern ein ATMEGA32, 16MHz max.Taktfrequenz, DIL-Gehäuse, Bleifrei.

Zieh dir doch mal das Datenblatt dazu von der Atmel-Seite. Da steht 
genau drin, welche Werte die Register haben müssen, um bei einer 
bestimmten Quarzfrequenz eine bestimmte Baudrate zu bekommen.

Autor: Thorsten Grube (stubi2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hilfe. Ich werde einen Neuen Beitrag aufmachen, da die 
Überschrift ja nun gar nicht mehr passt.

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.