www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT90S2323 2 Probleme


Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
µC Typ: AT90S2323
Takt: 10 MHz Quarz
Programmer: Atmel AVRISP
Compiler: WinAVR
-----------------

Problem 1: _delay_ms() Befehl und Taktfrequenz
Egal welche Taktfrequnz ich im Makefile angebe, die Zeiten  die ich
beim delay-Befehl angebe, stimmen nachher nie.
Beim AT90S2323 gibt es keine Fusebits, mit denen ich den Takt
einstellen kann, denn den AT90S2323 kann ich nur mit einem ext. Quarz
betreiben.

Merkwürdigerweise, stimmen die Zeiten, wenn ich z.B. einen ATtiny 26
intern mit 1 MHz takte, egal was ich im Makefile eintrage.

Muss ich noch irgendwo die Taktfrequenz eintragen, ausser im Makefile,
oder geht der delay-Befehl nur mit 1 MHz ???

Problem 2: -- bzw ++
Wenn z.B. das hier schreibe:

...
t=10
for(;;)
{
t--;
//mach irgendwas;
if (t==0) goto next;
}
next:
....

Sobald ich ++ oder -- zum zählen benutze,
wächst mein Code plötzlich auf bis zu das 6 fache.
Das verstehe ich irgendwie nicht.

Autor: T.Stütz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du t als float/real/double definiert hast (Gleitpunktzahl) dann
kann ich mir das vorstellen (MathematikLibrary wird dann mit
eingebunden)

Gruss

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe t als int definiert. Also:
int t=10;

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das erste Problem hat sich erledigt. (siehe: Delay -Problem GCC Forum)

Das zweite, verstehe ich immer noch nicht.

Autor: ERDI - Soft (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Autsch, das tut weh. (Schmutziger geht die Programmierung ja ncht mehr.)


for(;;)
{
t--;
//mach irgendwas;
if (t==0) goto next;
}

das macht man doch besser so:

for(t = 0, t <= 10, t++)
{
   blubber schwall;
}

goto wird in der C-Programmierung nicht benutzt.

Zur Erklärung der for-Schleifenparameter:

das t = 0 setzt den Startwert der Variable beim Aufruf der Schleife
fest. Der zweite Parameter setzt deinen Endwert fest und der dritte
gibt an, wie gezählt werden soll (pre-, post-, increment oder
decrement)

So durchläuft er die Schleife so oft, bis t = 10.

Autor: tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ursprünglich hatte ich meinen ersten Code in einer switch-case
Konstruktion gehabt, aber irgendwie wollte die nicht so ganz funzen.
Wenn ich den Code noch finde, dann poste ich ihn mal.

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach meinem ANSI-C-Buch ist es egal, ob man in einer For-Schleife t++
oder ++t schreibt, es wird auf alle Fälle als postincrement aufgelöst.

Das mit dem goto ist keine gute Technik, aber wenn es ist erlaubt laut
C. Also nict so laut schimpfen.

Die obige Schleife lässt sich etwas eleganter auflösen:
t=10;
do
{
//irgendwas
}
while(t);

oder wenn ein Dekrement in der nicht in den Anweisungen stattfindet:

t=10;
do
{
//irgendwas
}
while(--t);

Das garantiert eine bestimmte Anzahl Durchläufe.

MW

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.