Forum: Mikrocontroller und Digitale Elektronik delay_ms


von Yves Däschle (Gast)


Lesenswert?

Hallo,
ich bin gleich zu Anfang auf einen blöden Fehler gestoßen. Hab mein
mnega32 Board fertig gehabt, alles angeschlossen und erstes Programm -
blinken einer LED programmiert!
Dabei habe ich _delay_ms (1000); aufgerufen.

Beim AVR hat nach rumexperimentieren mit den fuses aber 4 mal so schnel
genlinkt, also ca 250ms. (12Mhz Quarz)

In der Libc Anleitung habe ich dann gelesen:
"The maximal possible delay is 262.14 ms / F_CPU in MHz."

Bedeutet das, dass diese Funktion aus "delay.h" nur 262.14ms kann
oder 262.14 "geteilt" durch die Herzzahl. Bin ein wenig verwirrt,
denn ich habe dann weiter an den fuses rumgespielt, bis gar nichts mehr
ging. Wenn die Funktion, nur die eben erwähnten 262ms kann, hätte ich
meinen mega32 nicht "zerschießen" brauchen!?

Danke für die Hilfe!

von Bjoern Mueller (Gast)


Lesenswert?

in deinem fall ist das maximale delay 262.14ms/12 (da 12 Mhz) also ca.
22ms.

also entweder:
-eine eigene delay-routine schreiben
-eine halbeigene schreiben(zb for(i=0;i<50;i++) _delay_ms(20);)
-oder das eleganteste: timer verwenden

gruss, bjoern.

von Yves Däschle (Gast)


Lesenswert?

warum ging dann die zeitroutine ca 250ms???
(zählen 21, 22... und dann die anzahl blinkimpulse!)

ich wollte die routine ja nur verwenden um zu schauen ob ich die fuses
richtig eingerichtet habe und der externe quarz verwendet wird und
nicht der interne!

von Bjoern Mueller (Gast)


Lesenswert?

ach ja, zu den zerschossenen fuses:
dazu sollte die forensuche einiges hervorbringen. bist nicht der erste,
der das geschafft hat. je nach dem, was da jetzt eingestellt ist, kann
man den aber recht einfach wieder retten. meisst reicht ein von einem
2ten controller erzeugtes rechtecksignal. dafuer nimmste dein
led-blinke-programm und machst das delay schoen klein, und fertig ist
der recheckgenerator. das ganze an XTAL1 und mit ein bisschen glueck
kann man die fuses in diesem zustand wieder richtig einstellen.

naja, kann gehen, muss aber nicht. aber da du ja sowieso einen neuen
kaufen wirst/musst, kannst du das gleich mal ausprobieren.

wiegesagt, einfach mal im forum suchen und schon sollten dazu etliche
beitraege auftauchen.

gruss, bjoern.

von Bjoern Mueller (Gast)


Lesenswert?

das mit den komischen zeiten kann ich mir spontan auch nicht erklaeren,
aber ist auch schon spaet ;)

vllt lief der controller da noch ueber internen oszillator.

gruss, bjoern.

von Yves Däschle (Gast)


Lesenswert?

Das hab ich schon gemacht, aber im moment weis ich nicht was ich noch
testen soll hab das mit dem takt schon gemacht, bei den ersten
"verstellungen" gings ja. aber jetzt nimma :(
Vielleicht ist es ja auf RC eingestellt...
Naja die neuen sollten bald kommen!

mich interessiert nur warum die delay routine 250ms ging, ob der da
wohl den externen quarz genommen hat!?

von Yves Däschle (Gast)


Lesenswert?

ich hoffe es wird dann das nächste mal mit den gezeigten einstellungen
für yaap gehen, welche im AVR Tutorial gezeigt werden!!!

Das ist zwar 8 MHz, aber ich glaub müsste das gleich sein, dann werde
ichd as mit dem delay nochmal versuchen. Und für den Test eine kleine
"for" Schleifen nehmen!

von Bjoern Mueller (Gast)


Lesenswert?

dann musst du aber aufpassen und zwischen crytal und crystal oscillator
unterscheiden. am besten mal im datenblatt nachschauen. das waere
naemlich genau der fall, dass man externen rechtecktakt braucht, obwohl
man nen quarz meinte.

gruss, bjoern.

von Yves Däschle (Gast)


Lesenswert?

ja das hab ich schon kappiert... und wenn ich den externen crystal
oszillator einstelle, dann bekomm ich das ja auch weider hin..
funktionsgenerator oder so!

naja mal schaune, ich beschäftige mich noch ein wenig mit den fuses bis
die neuen controller kommen!

von Bjoern Mueller (Gast)


Lesenswert?

ich empfehle zum setzen der fuses den interaktiven modus von avrdude +
datenblatt.

wenn man das so macht, muss man sich zwangslaeufig mit der invertierten
logik der fuses auseinandersetzen und sich die werte vorher auf papier
schreiben. das dauert zwar beim ersten mal ne weile, aber dafuer hat
mans dann auch verstanden und klickt nicht wild drauf los, bis nichts
mehr geht.

naja, viel erfolg mit den controllern weiterhin, ist ein schoenes hobby
fuer kalte winterabende.

gruss, bjoern.

von D.N. (Gast)


Lesenswert?

kann man fuse nur einmal programmieren ?

von Klaus (Gast)


Lesenswert?

Hallo Leute!
Ich kann zum Thema leider nichts beitragen, aber ich hätte gerne
gewusst was es mit diesen ominösen Fuses aufsich hat.
So ein AVR scheint sehr anfällig zu sein für Hardwarefehler bzw.
falsche Handhabung.
Ich beabsichtige irgendwan mal so ein AVR zu zulegen um etwas Erfahrung
über so ein Teil zu bekommen.

Wäre nett wenn jemand etwas näheres weiss und Antwortet.


Danke im vorraus


Klaus

von Bjoern Mueller (Gast)


Lesenswert?

@D.N.
fuses kann man so oft setzen und wieder loeschen wie man mag. oder bis
man mal das falsche gesetzt hat -->
http://www.mikrocontroller.net/articles/AVR_Fuses

@Klaus
das wirklich tueckische ist das bei den fuse-bits 1=nicht gesetzt und
0=gesetzt bedeutet. also grade andersrum, als man es erwarten wuerde.
(das liegt an der weise, wie man flash-speicher beschreibt. kurz gesagt
kann man nicht einfach einen wert reinschreiben, sondern muss ihn erst
loeschen(danach hat jedes bit den wert 1) und kann dann die passenden
bits auf 0 setzen um auf seinen wert zu kommen)
dazu kommt noch, dass einige programmiertools gesetzte bits invertiert
darstellen, andere nicht.
das und die tatsache, dass es "gefaehrliche" fusebits gibt fuehrt
dann immer dazu, dass sich anfaenger schnell mal beim wilden klicken
aussperren und dies nicht so einfach rueckgaengig zu machen ist.

naja, aus fehlern lernt man und hat das naechste mal das datenblatt vor
sich liegen, wenn man an den fuses was aendern will. dort ist eindeutig
beschrieben, wofuer die einzelnen bits stehen, wird aber von
einsteigern oft nicht gelesen oder halt erst zu spaet. deswegen sollte
man sich das datenblatt auch komplett ausdrucken, oder wenigstens immer
griffbereit auf dem desktop haben. ohne kommt man auch bei allen anderen
sachen nicht sehr weit, da dort saemtliche controllerspezifischen
register und deren benutzung drinsteht.

gruss, bjoern.

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.