www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AtMega88P - UART


Autor: Pk3 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche Daten über die USART - Schnittstelle zu übertragen. Jedoch 
hängt das Programm bei der Initialisierung ewig fest...
#define BAUD 9600UL      // Baudrate
 
// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
 
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! 
#endif 

void uart_init() {
  UCSRB |= (1 << RXEN) | (1 << TXEN);
    UCSRC |= (1 << UCSZ01) | (1 << UCSZ00);

    UBRRH = (UBRR_VAL >> 8);
    UBRRL = (UBRR_VAL & 0xFF);
}

Die Funktion "uart_init()" steht ganz am Anfang dess Programms und dort 
hängt es dann auch fest. Hab auch schon viel gegoogelt aber nichts 
trifft auf dieses Problem zu...
Hab die FuseBits im Anhang mitgesendet (von PonyProg2000)
Ich verwende AVR Studio und einen AtMega88P.

Woran liegt das? Sind vielleicht die FuseBits falsch gesetzt?
Habs auch schon genau so wie im Datenblatt gemacht aber das Problem 
bleibt das gleiche...

Bin für jede Antwort dankbar!

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
UCSRB hat der ATMega88P überhaupt nicht.
Der kennt nur UCSR0B.

Übersetze dein Programm für den richtigen Prozessor,
dann funktioniert das auch.

Autor: Pk3 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, hab das über Defines gemacht (sorry, hab vergessen sie mit zu 
senden):
#define    UCSZ0    UCSZ00
#define    UCSZ1    UCSZ01
#define    UCSRA    UCSR0A
#define    UCSRB    UCSR0B
#define    UCSRC    UCSR0C
#define    UBRRH    UBRR0H
#define    UBRRL    UBRR0L
#define    UDRE    UDRE0
#define    UDR    UDR0
#define    USBS    USBS0
#define    RXC    RXC0 
#define    RXEN    RXEN0
#define    TXEN    TXEN0

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pk3 schrieb:
> Anfang dess Programms und dort
>
> hängt es dann auch fest

Was heisst denn das? Da kann man sich nun viel oder gar nichts drunter 
vorstellen.

mfg.

Autor: Pk3 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sobald die Funktion "uart_init()" aufgerufen wird, wird das, was nach 
dem Funktionsaufruf kommt, nicht ausgeführt.

Beispiel:
#include <avr/interrupt.h>
#include <avr/io.h>

#include "lcd.h"
#include "uart0.h"


void io_init(void) {
  DDRB=0xFF;       
  PORTB=0xFF;

  DDRC=0xFF;       
  PORTC=0xFF;      

  DDRD=0xFF;       
  PORTD=0xFF;      
}

  
int main(void) {

  uart_init();


  // *** Wird nicht ausgeführt ***

  io_init();

  LCD_init();
  LCD_clear(7);
  LCD_ShowString(12, 120, colors[2], "Done.");


  while(1);
}

Hoffe jetzt ist es verständlicher ;)!
Hab noch herausgefunden, dass das Problem nur da ist, wenn TXEN und RXEN 
aktiviert sind. Also wenn ich diese Zeile
UCSRB |= (1 << RXEN) | (1 << TXEN);

weglasse, ist das Problem nicht mehr da. Aber dann ist der USART auch 
nicht richtig initialisiert und folglich kann man darüber auch nichts 
empfangen/senden...

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.