UART bei AVR Studio 4 / 6

OP #3571657
Lesenswert?
• ▲
▼
Hallo,
ich habe hier ein Olimex Protoboard mit einem MEGA 16 und möchte die 
UART zum Laufen bringen. Dazu nutze ich wie bisher die Library von P. 
Fleury.
Da ich das AVR Studio 6 ezum ersten mal nutze, habe ich es mit einem 
kleinen Testprogramm versucht (s.u.).
Das seltsame ist jetzt: Beim AVR Studio 4 läuft es, wenn ich den Code 
mit Copy & Paste in das Studio 6 kopiere, läuft es nicht mehr.
Also der Code wird einwandfrei compiliert, aber sobald ich das Programm 
in den AVR lade tut sich am Terminalprogramm gar nichts mehr.
Woran kann das liegen ? Irgendwelche Compilerflags ?

Gruß
Karlheinz



#define  _AVR_ATmega16_  1

#ifndef F_CPU
#define F_CPU  8000000
#endif

#include <stdio.h>
#include "avr/io.h"
#include "uart.h"

#define UART_BAUD_RATE  9600

int main()
{
  uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );

  while (1)
  {
    uart_puts("Test\n\r");
  }
  return 0;
}
#3571679
Lesenswert?
• ▲
▼
Karlheinz Druschel schrieb:
> #define  _AVR_ATmega16_  1

Die Zeile lass mal lieber weg. Sollte es dann in der 4er-Version nicht 
mehr funktionieren, ist etwas grundlegendes mit deinen 
Projekteinstellungen oder der Installation nicht in Ordnung.

> #ifndef F_CPU
> #define F_CPU  8000000
> #endif

Das ist eine leider unausrottbare Unsitte. Diese Zeilen nutzen gar 
nichts, sondern setzen dir nur unbemerkt ein nach Murphy garantiert 
falsches F_CPU. Lass das einfach weg.

F_CPU gehört an einer zentralen Stelle im Projekt gesetzt, beim Studio 
in den Projektsettings. Solltest du das mal vergessen, dann ist das 
Programm nicht mehr kompilierbar, und der Compiler zeigt das durch seine 
Fehlermeldungen.

> #include <stdio.h>
> #include "avr/io.h"
> #include "uart.h"
>
> #define UART_BAUD_RATE  9600
>
> int main()
> {
>   uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
>
>   while (1)
>   {
>     uart_puts("Test\n\r");
>   }
>   return 0;
> }

Das sieht soweit in Ordnung aus.

Oliver
#3571686
Lesenswert?
• ▲
▼
Karlheinz Druschel schrieb:

> #define  _AVR_ATmega16_  1
?
Wozu das hier?

Wenn das Projekt richtig aufgesetzt ist, dann kommt das entsprechende 
µC-define aus der IDE

>
> #ifndef F_CPU
> #define F_CPU  8000000
> #endif

Nimm da mal den #ifndef raus.

Ich halte die ehrlich gesagt für keine gute Idee.
Entweder man stellt den Wert für F_CPU in der IDE ein oder im Source 
Code. Aber nicht beides.
Wenn in beiden (Programm und IDE) eine Definition für F_CPU vorliegt, 
dann soll das ruhig ein Fehler sein, der behoben werden muss. Denn über 
kurz oder lang kennst sich nämlich kein Mensch mehr aus, was denn jetzt 
eigentlich benutzt wird. Verschlimmert wird das nur dadurch, dass im 
Programm ein F_CPU definiert wird, wenn von der IDE nichts kommt. Denn 
oft genug stimmen dann die benutzten Werte quer über mehrere Source Code 
Files nicht zusammen.
Idealerweise wird der Wert für F_CPU in der IDE eingestellt.
OP #3571990
Lesenswert?
• ▲
▼
Mit euren Bemerkungen habt ihr sicher recht, und ich sehe sie als 
lehrreich an.
Bloß habe ich beim 6er Studio nichts gefunden, wo ich die Taktfrequenz 
über die IDE vorgeben kann (beim 4er geht das ja).
Die Ursache hier war der fehlende sei(), die Bibliothek nutzt Interrupts 
:-)
Trotzdem Danke

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.