USART am atmega328p will nicht

Gast #3776357
Lesenswert?

Hallo.

Ich bin gerade dabei eine Schaltung mit einem Atmega328p in betrieb zu 
nehmen und wollte als erstes die Serielle Kommunikation mit dem PC 
herstellen, zum Debuggen. Die Schaltung mit dem MAX232 habe ich schon 
mit einem Attiny2313 getestet und die Funktioniert soweit. Mit meinem 
Atmega328p zeigt sich jedoch keine Regung.
Da ich den gesamten Aufbau schon mehrfach durchgemessen habe, und mit 
dem Attiny das ja auch schon funktionierte, vermute ich, dass ich bei 
der Programmierung einen Fehler habe.
Der Attiny lief mit 8Mhz und der Atmega soll mit 20Mhz laufen.
Ich programmiere jetzt das erste mal in C einen µC, vorher habe ich die 
in Basic programmiert. Daher habe ich das meiste auch aus dem Datenblatt 
des Atmegs und dem Internet. Ich habe auch schon verschiedenste 
Einstellungen für die Register ausprobiert, die ich im Internet gefunden 
habe, da die aus dem Datenblatt und die, die ich mir selbst überlegt 
hatte nicht funktionierten.

Mein Programm sieht so aus:
1
#define F_CPU 20000000UL
2
#define BAUD 9600
3

4
#include <avr/io.h>
5
#include <util/delay.h>
6
#include <util/setbaud.h>
7

8
void UART_Init(void);
9
void UART_Transmit( unsigned char data );
10
void UART_Puts (char *s);
11

12
int main(void)
13
{
14
  UART_Init();
15
  
16
    while(1)
17
    {
18
       /* UART_Puts("Hallo");
19
    _delay_ms(1000);
20
    UART_Puts(" Du Da");
21
    _delay_ms(1000); */
22
     
23
     UART_Transmit('x');
24
     _delay_ms(2000);
25
    }
26
}
27

28
void UART_Init()
29
{
30
  /* Set baud rate auf 9600 */
31
  UBRR0H = UBRRH_VALUE;
32
  UBRR0L = UBRRL_VALUE;
33

34
  /*Enable receiver and transmitter*/ 
35
  UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
36
  
37
   /*Set frame format: 8data, 1stop bit, Asynchron*/
38
  UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01);
39

40
  
41
}
42

43
void UART_Transmit( unsigned char data )
44
{
45
  /* Wait for empty transmit buffer */
46
  while ( !( UCSR0A & (1<<UDRE0)) )
47
  ;
48
  
49
  /* Put data into buffer, sends the data */
50
  UDR0 = data;
51
}

Ich übertrage das mit AVR Dude so:
1
-c stk500v2 -b 125000  -P COM5 -p m328p -U flash:w:$(ProjectDir)Debug\$(ItemFileName).hex:i

Und das sind meine eingestellten und eben ausgelesenen Fuses:
1
lfuse reads as F7
2
hfuse reads as D9
3
efuse reads as 7




Mit freundlichen Grüßen
Killerawft
Gast #3777324
Lesenswert?

Ich habe als Taktquelle natürlich einen 20Mhz quarz angeschlossen und 
ich habe ein kleines Programm geschrieben, bei demdie LED im 
sekundentakt blinken sollte, jedoch leuchtet die nur schwach bei einer 
Pin ausgangsspannung von 2,5 Volt.

Das übertragene Programm sieht so aus
1
#define F_CPU 20000000UL
2

3
#include <avr/io.h>
4
#include <util/delay.h>
5

6
int main(void)
7
{
8
  DDRD = 0x01;
9
  
10
    while(1)
11
    {
12
        PORTD = 0x01;
13
    _delay_ms(1000);
14
    PORTD = 0x00;
15
    _delay_ms(1000);
16
    }
17
}
Gast #3791810
Lesenswert?

Falls jemand das selbe Problem hat, sag ich nochmal wie ich meins gerade 
gelöst habe. Ich hab ganz simpel einen neuen µC eingelötet. Der 
vorherige ist beim einlöten wohl etwas zu heiß geworden.

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