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


von Tom Linz (Gast)


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 :
1
#include <avr/io.h>
2
#define F_CPU xxxUL 
3
#include <util/delay.h>
4
5
int main(void) {
6
    DDRC = 0xff; 
7
    PORTC=0b01010101;
8
    while(1){
9
        PORTC = 0; 
10
        PORTC = 0xff;
11
    }
12
return 0;
13
}

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

von Karl H. (kbuchegg)


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?

von Tom Linz (Gast)


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.

von Karl H. (kbuchegg)


Lesenswert?

AVR-Studio

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

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

von Tom Linz (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


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.

von Tom Linz (Gast)


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.

von Tom Linz (Gast)


Lesenswert?

Ich habe jetzt herausgefunden, wie die Optimierung eingestellt wird:
1
// 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?

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.