mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit Taktung myAVR-Board / delay.h


Autor: Tom Linz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seit ca. 1/2 Jahr arbeite ich mit dem MyAVR-Board. Seit einigen Tagen 
funktioniert dieses anscheinend nicht mehr vernünftig. Folgende Probleme 
treten auf:

Der interne Takt des ATMEGA8 scheint viel zu gering, z.B folgendes 
Testprogramm :
#include <avr/io.h>
#define F_CPU xxxUL 
#include <util/delay.h>

int main(void) {
    DDRC = 0xff; 
    PORTC=0b01010101;
    while(1){
        PORTC = 0; 
        PORTC = 0xff;
    }
return 0;
}


Hier kann man ein deutliches Blinken der LED bei den Standard 3.86 MHz 
feststellen, obwohl ich die richtige Taktrate definiert habe.

Also habe ich einen externen Quarzosziallator mit 1 MHz verwendet. Nun 
ist der Takt in Ordnung, nur wird z.B. ein Delay zwischen den Zuständen 
in der Endlosschleife unendlich lange ausgeführt.

Merkwürdig ist, das keines meiner ehemals lauffähigen Programme mehr 
läuft, z.B. das LCD-Display empfängt gar keine Befehle mehr und wird 
nicht mal mehr initialisiert.

Nun dachte ich, das ja auch hier die delay.h benutzt wird, und das in 
irgend einer Form hier ein Fehler vorliegt, aber die Neuinstallation von 
WINAVR hats auch nicht gebracht.

Leider kann ich nicht debuggen, mit dem myAVR-Board o.ä.  Den uC habe 
ich auch schon mal getauscht, was keine Änderung brachte. Netzteil, 
Batterie, LPT bringt alles keine Änderungen.

Wo kann hier nur der Fehler liegen, bzw. was kann ich noch testen?

Achso, AVRDUDE sagt:

C:\DOKUME~1\STANDA~1>avrdude -c sp12 -p m8

AVRDUDE: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.00s

AVRDUDE: Device signature = 0x1e9307

AVRDUDE done.  Thank you.



Ich habe absolut keine Ahnung, was hier schiefläuft.


Vielen Dank für eure Hilfe
Tom

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom Linz schrieb:

> Hier kann man ein deutliches Blinken der LED bei den Standard 3.86 MHz
> feststellen, obwohl ich die richtige Taktrate definiert habe.

Das glaub ich dir nicht. Nicht mit diesem Program :-)

> Also habe ich einen externen Quarzosziallator mit 1 MHz verwendet. Nun
> ist der Takt in Ordnung, nur wird z.B. ein Delay zwischen den Zuständen
> in der Endlosschleife unendlich lange ausgeführt.

Optimizer eingeschaltet?

Autor: Tom Linz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, das würde
"Compiler optimizations disabled; functions from won't work as designed" 
erklären. Allerdings habe ich doch an solchen Einstellungen gar nicht 
rumgeopert, da ich nicht mal weis, wie man die Compiler Optimierung 
ausstellen könnte, und muss jetzt auch fragen, wie ich denn den 
ursprünglichen Zustand widerherstellen kann.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVR-Studio

  Menü "Project"
  Menüpunkt "Configuration Options"

Im Dialog, ca. im unteren Fünftel
  Optimization: Auf -Os stellen

Autor: Tom Linz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende wie gesagt das myAVR-Board und die zugehörige myAVR-Workpad 
Plus-Demo. Da gibts solche Einstellmöglichkeiten meines Wissens nicht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom Linz schrieb:
> Ich verwende wie gesagt das myAVR-Board und die zugehörige myAVR-Workpad
> Plus-Demo. Da gibts solche Einstellmöglichkeiten meines Wissens nicht.

Irgendwo muss man das auch dort einstellen können.
Letztenendes landet im Aufruf des Compilers auf dessen Commandline ein

   -O0     keine Optimierung   (das ist Oh-null)
   -O1     erste Optimierungsstufe
   -O2     zweite Optimierungsstufe
   -O3     dritte Optimierungsstufe (alle auf geringste Laufzeit)
   -Os     Optimierung auf kleinen Code


-Os ist meistens die vernünftigste Einstellung.

-> Alle Menüs durchsuchen. Entweder du kannst die Optimierungsstufe 
irgendwo direkt einstellen, oder du gibst sie bei der Generierung das 
Makefiles an oder es wird ein Makefiletemplate verwendet, in dem sie 
enthalten ist.

Um es klar zu sagen: Wenn du das dort wirklich nirgend einstellen 
kannst, dann ist das Zeugs unbrauchbar und du solltest wirklich 
überlegen auf AVR-Studio mit WinAVR auszuweichen.

Autor: Tom Linz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, es ist nicht möglich diese Einstellung vorzunehmen. Ich habe alle 
Menüs abgesucht. Allerdings hat dieses Programm doch jetzt etliche 
Monate einwandfrei funktioniert, und plötzlich scheint der Fehler von 
hier zu stammen, obwohl man gar keine Möglichkeit hat die Optimierung zu 
ändern.

Leider kann ich im AVR-Studio das Board (LPT!) nicht programmieren, 
sonst wäre ich schon längst auf AVR-Studio umgestiegen. Aber 
myAVR-Studio hat wie gesagt bis jetzt immer einwandfrei funtkioniert.

Autor: Tom Linz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt herausgefunden, wie die Optimierung eingestellt wird:
// CompilerOption:  -Os
Wer auch immer sich diesen Blödsinn ausgedacht hat...

Jedenfalls funktionieren trotzdem weder die delay-Funktionen, noch 
provisorische For-Schleifen oder auch Timer. Was mache ich nur falsch?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.