Forum: Mikrocontroller und Digitale Elektronik ATmega8 Timingproblem ?


von Rush (Gast)


Lesenswert?

Hi alle zusammen,

ich habe folgendes Problem:
Undzwar habe ich eine Temperaturregelung aufgebaut. Auf dem ersten 
Layout hat diese einwandfrei funktioniert.

Nun hab ich das Layout ein wenig abgeändert, neue Platine geätzt. Und es 
tut sich garnichts mehr. Sprich mein Display bleibt komplett leer.

Ich benutze den internen Quarz mit 8 Mhz.

Als erstes habe ich mir dann ein Testprogramm geschrieben welches mir 
nur "Test" auf das Display ausgeben sollte. Zu sehen bekam ich nur 
Hyroglyphen.
Ich stellte das interne Quarz auf 4 Mhz und siehe da, ich bekam "Test" 
angezeigt.
Im AVR Studio hatte ich in den Projekteigenschaften 8MHz eingestellt.

Dann habe ich in den Projekteigenschaften den Quarz auf 16 MHz gestellt, 
und den internen quarz auf 8Mhz und siehe da es funktionierte auch.

Wie kann so was sein?

Dann hatte ich mein Programm zur Temperaturregelung geflasht. Den 
internen Quarz auf 8Mhz gestellt, in den Eigenschaften 16Mhz 
eingestellt. Es funktionierte aber nicht.

Das Programm funktioniert auf dem neuen Layout überhaupt nicht. Wie kann 
das sein. Auf dem ersten Layout lief es schließlich auch. Vom Schematic 
her hat sich auch nichts geändert, wirklich nur das Layout...


Hat jemand schonmal ähnliche Erfahrungen gemacht?
Oder kann mir evtl. jemand sagen was ich evtl. falsch gemacht habe?
Vielleicht Controller kaputt ?

MfG Konrad

von Thilo M. (Gast)


Lesenswert?

>Ich benutze den internen Quarz mit 8 Mhz.

Ist kein Quarz, sondern ein RC-Oszillator (ungenau, temperaturabhängig).

Aber zum Problem: es liegt wohl an der Initialisierung des Displays. 
Verlängere mal die Pausen zwischen den Befehlen bei der Initialisierung. 
Im Datenblatt des Displays müssten die drinstehen, vergleiche sie mit 
deinem Programm.

von Peter D. (peda)


Lesenswert?

Rush wrote:

> Dann hatte ich mein Programm zur Temperaturregelung geflasht. Den
> internen Quarz auf 8Mhz gestellt, in den Eigenschaften 16Mhz
> eingestellt. Es funktionierte aber nicht.

Welchen Grund hast Du denn, den Compiler anzulügen?

Da kann ich gut verstehen, daß dann der MC eingeschnappt ist.

Warum willst Du dem Compiler nicht sagen, mit welcher Frequenz der MC 
wirklich läuft?


Peter

von Andreas K. (a-k)


Lesenswert?

Was du im Studio dem Compiler mitteilst, das beeinflusst die Delays in 
<util/delay.h>, und sonst nichts. Der Controller wird dadurch nicht 
schneller und nicht langsamer und auch die Fuses, die den real 
verwendeten Takt definieren, werden davon nicht beeinflusst.

Steht also der Compiler auf 16, die Hardware auf 8MHz, sind nur die 
Delays doppelt so gross wie sie sein sollten.

von Hannes L. (hannes)


Lesenswert?

Es gibt keinen internen Quarz.

Für eine Temperatur-Regelung sollten die 1MHz intern 
(Auslieferungszustand) völlig ausreichen.

Die im Datenblatt des LCD-Controllers angegebene Wartezeit vor der 
Initialisierung bezieht sich auf das Anliegen einer (auch im Datenblatt 
angegebenen) bestimmten Spannung. Wenn man diese nicht messen kann, 
sollte man die Wartezeit sehr großzügig bemessen. Ich nehme meist 500ms.

LCDs gleicher Bauart, aber unterschiedlicher Herkunft können 
unterschiedlich schnell getaktet sein. Was bei einem LCD gut geht, 
bereitet einem anderen LCD Probleme.

Falls "gefundener" Code verwendet wird, kann es sein, dass dieser mit 
Warteschleifen arbeitet (Takte zählen), deren Startwerte vom 
Compiler/Assembler berechnet werden. Arbeitet man mit anderen Taktraten 
als vorgesehen, kann es passieren, dass die Startwerte nicht in die 
Schleifenzähler passen (z.B. die oberen Bits verloren gehen), was 
falsche Verzögerungswerte zur Folge hat.

Eine Bemerkung wie: "Der Fehler steckt in Zeile 235 Deines Codes" habe 
ich mir jetzt verkniffen.

...

von Rush (Gast)


Lesenswert?

Ich habe den Compiler deshalb "angelogen" weil mein Testprogramm dann 
seltsamerweise funktioniert hatte.

Mich wunderts eben dass ich meinen Code überhaupt überarbeiten muss. 
Habe schließlich nur das Platinenlayout geändert und so zu sagen den 
Controller umgesteckt. Das LCD ist auch genau das geblieben.


Aus welchem Grund sollte ich dann an der Software bzw. Timings was 
ändern wenn die Hardware exakt die selbe geblieben ist ?

von Andreas K. (a-k)


Lesenswert?

Rush wrote:

> Ich habe den Compiler deshalb "angelogen" weil mein Testprogramm dann
> seltsamerweise funktioniert hatte.

Dann sind deine Delays falsch dimensioniert, und durch den dadurch 
eingebauten Rechenfehler passt es wieder.

> Mich wunderts eben dass ich meinen Code überhaupt überarbeiten muss.
> Habe schließlich nur das Platinenlayout geändert und so zu sagen den
> Controller umgesteckt. Das LCD ist auch genau das geblieben.

Hast du ihn sozusagen umgesteckt, oder hast du wirklich den Controller 
selbst ohne Reprogrammierung umgesteckt?

Könnte ja sein, dass du vorher mit der werkseitig voreingestellten 
Frequenz von ca. 1MHz gearbeitet hast.

von w124Dennis (Gast)


Lesenswert?

na da haben wir es doch,
durch das "vorgaukeln" einere höheren frq macht dein compiler in den 
delay funktionen länger dauernde schleifen. somit dauert dann zb bei 
einer freq von 8mhz und vorgegaukelten 16mhz ein delay 1ms -> 2ms

vermutlich hast du ein hardware fehler.
läuft denn der controller überhaupt???
einfaches testprogram mit pinwackeln ausprobiert???
zeig doch mal deine pläne (spl und boards)

gruß Dennis

von Rush (Gast)


Lesenswert?

Gut werde ich machen wenn ich zu Hause bin.
Hab die Sachen an der Arbeit leider nicht mit

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.