Forum: Mikrocontroller und Digitale Elektronik Atmega64L geht nicht mehr nach UART einstellung


von OMG (Gast)


Lesenswert?

Hallo Folks,

hoffe ihr könnt mir helfen da ich alles schon versucht habe.
Also das Problem :

Als AVR nutze ich einen ATMEGA64L bei 3.3V davor hängt ein FTDI232RL 
(I/O auch auf 3.3V) dran.
Beide sind über UART verbunden, der FTDI232RL funzt einwandfrei. Das 
habe
ich über HTERM getestet (also senden und empfangen verbunden).
Als Anzeige ob der AVR läuft habe ich am Ausgang PA7 eine LED (lowCurr)
dran. Diese funtzt auch so lange ich nicht auf die Idee komme meinen 
UART0
einzustellen. Soll bedeuten sobald ich im AVR nur zu der LED noch den 
UART0
einstellen will läuft auch die LED nicht.

hier das Prog: (UART rausgeflagt damit LED läuft)

void uart_init(void)
{
//modus
//UCSR0B |= (1<<RXEN0)|(1<<TXEN0);        // enable receiver and 
transmitter
//UCSR0C &= ~(1<<USBS0);              // 1 stop bit
//UCSR0C |= (1<<UCSZ01)|(1<<UCSZ00);        // 8Bit Data
//UCSR0C &= ~(1<<UPM01)|(1<<UPM00);        // Parity Disabled
DDRE  |= (1<<DDE0)|(1<<DDE1);          //TX/RX Pins als output
//baudrate 2400 @8Mhz
unsigned int ubbr = 207;
  UBRR1H = (ubbr>>8);
  UBRR1L = ubbr;
}

void uart_putc(int data)
{
    while (!(UCSR0A & (1<<UDRE0)));  /* warten bis Senden moeglich */
    UDR0 = data;                     /* sende Zeichen */
}

int uart_getc(void)
{
  // wait for data to be received
  while(!(UCSR0A & (1<<RXC0)));

  // get and return received data from buffer
  return UDR0;
}

main(void)
{
char funktion;
DDRA |= (1<<DDA7);              //PA7 als Ausgang
uart_init();
  while(1)
  {
    PORTA |= (1<<PA7);
    uart_putc(121);
  }
}

Hoffe jemand hat da eine Idee ich bin am ende:(

von Timmo H. (masterfx)


Lesenswert?

Naja wenn du in der uart_init alles auskommentierst, dann wird der UART 
ja auch nicht richtig initialisiert :D

Achja, das "UCSR0B |= (1<<RXEN0)|(1<<TXEN0);" sollte als letztes 
passieren.

> DDRE  |= (1<<DDE0)|(1<<DDE1);          //TX/RX Pins als output

Der UART setzt die Ports automatisch, nichtsdestotrotz wäre RX auf jeden 
fall ein Input und kein Output.

> while(1)
>  {
>    PORTA |= (1<<PA7);
>    uart_putc(121);
>  }

Ich weiß ja nicht wie deine LED gepolt ist, aber wenn die Kathode 
schaltest, wäre sie in diesem Fall immer aus, da du den Port nie wieder 
auf "0" setzt.

von OMG (Gast)


Lesenswert?

Also habe noch weiter rumprobiert und wenn ich alle Routinen
in die main packe klappt alles wie Butter. Nur warum nicht wenn
ich seperate Routinen nehme.

@Timmo
meine LED ist Hige aktive also sollte sie immer leuchten was sie ja auch 
tut
solange ich keinen Uart nutze bzw. ich alles in der main stehen habe.

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.