beeinflusst die isp-frequenz die baudrate? uart funzt nicht!

Gast #711061
Lesenswert?

hallo,

beeinflusst die isp-frequenz die baudrateneinstellungen?muss ich da 
außer den "1/4 ..." beachten? hier mein code für den ATMega32 und 
ATMega8515:

#include <avr/io.h>
#include <util/delay.h>

#ifndef F_CPU
/* In neueren Version der WinAVR/Mfile Makefile-Vorlage kann
   F_CPU im Makefile definiert werden, eine nochmalige Definition
   hier wuerde zu einer Compilerwarnung fuehren. Daher "Schutz" durch
   #ifndef/#endif

   Dieser "Schutz" kann zu Debugsessions führen, wenn AVRStudio
   verwendet wird und dort eine andere, nicht zur Hardware passende
   Taktrate eingestellt ist: Dann wird die folgende Definition
   nicht verwendet, sondern stattdessen der Defaultwert (8 MHz?)
   von AVRStudio - daher Ausgabe einer Warnung falls F_CPU
   noch nicht definiert: */
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 
16000000"
#define F_CPU 16000000L    // Systemtakt in Hz, das L am Ende ist 
wichtig, NICHT UL verwenden!
#endif


void sendUart(unsigned char c)
{
  while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich 
*/
    {
    }

    UDR = c;
}



int main(void)
{
    UCSRB |= (1<<TXEN);                // UART TX einschalten
    UCSRC |= (1<<URSEL)|(3<<UCSZ0);    // Asynchron 8N1

    UBRRH = 0;
    UBRRL = 11;

  while(1)
  {
    sendUart('@');
    _delay_us(10);
  }


  return 0;
}


mit hilfe eines logicanalyzers habe ich herausgefunden, dass man mit 
"UBRRL = 11;" in etwa die baudrate hinbekommt. laut datenblatt soll dort 
aber eine 51 eingetragen werden...kann mir jemand weiterhelfen???

thx...
Gast #711095
Lesenswert?

> beeinflusst die isp-frequenz die baudrateneinstellungen?

Wovon? Vom ISP? Ja. Von irgendwas, das später mal läuft? Nein.

> muss ich da außer den "1/4 ..." beachten?

Wie meinen?

> #include <avr/io.h>
> #include <util/delay.h>
>
...
> #define F_CPU 16000000L    // Systemtakt in Hz, das L am Ende ist

F_CPU muß vor den includes definiert sein.

> mit hilfe eines logicanalyzers habe ich herausgefunden, dass man mit
> "UBRRL = 11;" in etwa die baudrate hinbekommt. laut datenblatt soll
> dort aber eine 51 eingetragen werden...kann mir jemand weiterhelfen???

Also willst du 19200 Bit/s. Offensichtlich läuft dein AVR nicht mit 16 
Mhz Takt.  Ein Wert von 11 würde eher zu einem Takt von ca. 4 Mhz 
passen. Vermutlich sind die Fuses falsch eingestellt.
Dein Delay dürfte nicht viel bringen, da die Übertragung eines Bytes 
sowieso länger als 10 Mikrosekunden dauert.

PS: Deine Shift-Taste scheint nicht richtig zu tun.

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