Forum: Mikrocontroller und Digitale Elektronik AVR steigt immer aus


von Ra S. (mcfloppy)


Lesenswert?

Hallo, brauche ja nicht viel zu schreiben, hier die Ausgabe des
Terminalprogrammes:

2.�1. LED an
2.�1. LED an
2.�1. LED an
2.�1. LED an
2.�1. LED an
2.�1. LED an
2.�1. LED an
2.�1. LED an
2.�1. LED an
2.�1. LED an
2.�1. LED an
usw. usf.

und hier der Code:

/****************************************************************

Projekt: USART auf dem Testboard von www.Pollin.de


Aufgabe:


Changelog:

12 Mai 2006 Projektstart


****************************************************************/



#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>


// USART

//#ifndef F_CPU
#define F_CPU 7372800UL
//#endif
#define UART_UBRR_CALC(BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1L)
#define UART_BAUD_RATE 9600UL

volatile char x='t';

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

void uart_puts (char *s)
{
    while (*s)
    {   /* so lange *s != '\0' also ungleich dem
"String-Endezeichen" */
        uart_putc(*s);
        s++;
    }
}

/*
//SIGNAL(SIG_UART_RECV)
ISR(USART_RXC_vect)
{
    PORTD &= ~(1<<PD5);
    x = UDR;
    if(x=='1')
       PORTD |= (1<<PD6);
    if(x=='2')
       PORTD &=~(1<<PD6);
}
*/

int main( void  ) {
//Initialisierung


WDTCR &= ~(1<<WDTOE);
WDTCR |= (1<<WDE);
  UBRRH = (uint8_t)(UART_UBRR_CALC(UART_BAUD_RATE,F_CPU)>>8);
  UBRRL = (uint8_t)UART_UBRR_CALC(UART_BAUD_RATE,F_CPU);
  UCSRB |= (1<<TXEN)|(1<<RXEN)|(1<<RXCIE);         // UART RX & TX
einschalten
//  UCSRB |= (1<<TXEN)|(1<<RXEN);         // UART RX & TX einschalten
  UCSRC |= (1<<URSEL)|(3<<UCSZ0);       // Asynchron 8N1
  DDRD |= (1<<PD5)|(1<<PD6);
  PORTD |= (1<<PD5);
  uart_puts("1. LED an\n2. LED aus\n");
  sei();

while(1) {
asm volatile ("nop");
}
  uart_puts("restart");

return 0;
  /* NEVEREACHED */
}

von Michael (Gast)


Lesenswert?

Da fehlt der Löschbefehl für die Festplatte. Dann sollte es gehen.

von Quix01 (Gast)


Lesenswert?

> uart_puts("1. LED an\n2. LED aus\n");

ist m.E. kein Null-terminierter String, sofern der Compiler da nicht
irgend etwas hinten dran hängt. Somit liest uart_putc() fleißig im
Speicher weiter, bis es knallt...


Ciao Thomas.

von Dirk D. (dirkd)


Lesenswert?

> ist m.E. kein Null-terminierter String
Doch das sollte Null-Terminiert sein.

Aber wenn ich daß richtig sehe wird der Watchdog aktiviert und dann
nicht getriggert => Reset

von Ra S. (mcfloppy)


Lesenswert?

danke schonmal... werd ich nachher alles probieren. :) Hoffe es geht
dann

von Ra S. (mcfloppy)


Lesenswert?

so...
habe nun ein \0 eingefügt und den watchdog rausgeschmissen. aber nun
passiert sowas:

1. LED an
2. LED au.&#65533;L    &#65533;&#65533;,KH&#65533;
&#65533;&#65533;&#65533;&#65533;.&#65533;L
&#65533;&#65533;,KH&#65533;
&#65533;&#65533;&#65533;&#65533;.&#65533;L
&#65533;&#65533;,KH&#65533;
&#65533;&#65533;&#65533;&#65533;.&#65533;L
&#65533;&#65533;,KH&#65533;
&#65533;&#65533;&#65533;&#65533;.&#65533;L
&#65533;&#65533;,KH&#65533;
&#65533;&#65533;&#65533;&#65533;.&#65533;L
&#65533;&#65533;,KH&#65533;
&#65533;&#65533;&#65533;&#65533;.&#65533;L
&#65533;&#65533;,KH&#65533;
&#65533;&#65533;&#65533;&#65533;.&#65533;L
&#65533;&#65533;,KH&#65533;
&#65533;&#65533;&#65533;&#65533;.&#65533;L
&#65533;&#65533;,KH&#65533;
&#65533;&#65533;&#65533;&#65533;.&#65533;L
&#65533;&#65533;,KH&#65533;
&#65533;&#65533;&#65533;&#65533;.&#65533;L
&#65533;&#65533;,KH&#65533;
&#65533;&#65533;&#65533;&#65533;.&#65533;L      &#65533;

auch noch bissel komisch, oder?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.