- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 4 von 4

Thema: ATmega32 UART Problem

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.09.2011
    Beiträge
    7

    ATmega32 UART Problem

    Hallo Zusammen,

    ich habe ein Problem mit dem UART von meinem ATmega32.
    Sobald durch ein uart_putc() der Interrupt für UDR empty aktiviert wird hängt sich der gesammte AVR auf. Woran könnte das liegen? Im Terminal kommt nichts an und der Controller beginnt auch nicht zu blinken. Mein Code sieht momentan so aus.

    Code:
    ISR(UART_TX_VECTOR)
    {
        if(uart_tx_read == uart_tx_write)
        {
            UART_STATUS_B &= ~(1 << 5);
            return;
        }
    
        UART_UDR = uart_tx_buffer[uart_tx_read];
    
        uart_tx_read++;
    
        if(uart_tx_read >= UART_BUFFER_SIZE)
        {
            uart_tx_read = 0;
        }
    }
    
    void uart_init(long baud)
    {
        //Senden aktivieren
        UART_STATUS_B |= (1 << 3);
    
        //Empfang aktivieren
        UART_STATUS_B |= (1 << 4);
    
        //Baud setzen
        short UBRR = (F_CPU/(16*baud))-1;
        UART_BAUD_HIGH = UBRR >> 8;
        UART_BAUD_LOW = UBRR & 0xFF;
        UART_STATUS_C();
    
        //Interrupts global aktivieren
        sei();
    
        //Empfangsinterrupt aktivieren
        UART_STATUS_B |= (1 << 7);
    
        //Bufferzeiger setzen
        uart_tx_read = 0;
        uart_tx_write = 0;
    
        uart_rx_read = 0;
        uart_rx_write = 0;
    
    }
    
    
    unsigned char uart_putc(char c)
    {
        if(uart_tx_write + 1 == uart_tx_read || (uart_tx_read == 0 && uart_tx_write + 1 == UART_BUFFER_SIZE))
        {
            return 1;
        }
    
        uart_tx_buffer[uart_tx_write] = c;
    	uart_tx_write++;
    
        if(uart_tx_write >= UART_BUFFER_SIZE)
        {
            uart_tx_write = 0;
        }
    
    	UART_STATUS_B |= 1 << 5;
    
        return 0;
    }
    Die zugehörigen Includes
    Code:
    //ATmega32
    #if defined (__AVR_ATmega32__)
        #define UART_TX_VECTOR USART_UDRE_vect
        #define UART_RX_VECTOR USART_RXC_vect
        #define UART_UDR UDR
        #define UART_STATUS_B UCSRB
        #define UART_BAUD_HIGH UBRRH
        #define UART_BAUD_LOW UBRRL
        #define UART_STATUS_C()
    #endif
    und die Main:
    Code:
    #include <avr/io.h>
    #include <util/delay.h>
    #include "uart.h"
    
    
    int main(void)
    {
    	uart_init(9600);
    
    	uart_putc('a');
    
    	DDRC = 0x0F;
    	while(1)
    	{
    		PORTC |= 0x0F;
    		_delay_ms(500);
    		PORTC &= ~(0x0F);
    		_delay_ms(500);
    	}
    
    	return 0;
    }
    Geändert von loewe.xy (27.01.2013 um 17:50 Uhr) Grund: Angaben korrigiert

Ähnliche Themen

  1. [ERLEDIGT] BTM222 <-UART-> ATmega32 Problem
    Von robo_tom_24 im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 29.05.2012, 22:31
  2. ATmega32 mit zwei UART's
    Von Mauro im Forum AVR Hardwarethemen
    Antworten: 14
    Letzter Beitrag: 19.05.2010, 19:54
  3. ATMega32 UART problem --> Problem gelöst
    Von ChristophB im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 12.03.2010, 18:45
  4. ATmega32 Problem UART Reihenfolge Register
    Von vajk im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 20.09.2009, 17:54
  5. nochmal: 1x PC, 2x UART (ATMEGA32)
    Von boeseTURBO-CT im Forum AVR Hardwarethemen
    Antworten: 33
    Letzter Beitrag: 27.08.2004, 08:49

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress