www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik delay_ms


Autor: Yves Däschle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Bjoern Mueller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Yves Däschle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Bjoern Mueller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bjoern Mueller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Yves Däschle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!?

Autor: Yves Däschle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Bjoern Mueller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Yves Däschle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Bjoern Mueller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: D.N. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann man fuse nur einmal programmieren ?

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bjoern Mueller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.