mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega128 Problem


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe folgende Probleme:

1.
Ist warte(); eingebaut, scheint er dort zu hängen.
Nehme ich die Funktion warte() aus dem Programm heraus, läuft er.
2.
Habe ich putchar('x'); eingebaut, gibt er endlos das Zeichen x aus,
schaltet aber nicht mehr die Ports.
Woran kann das liegen?

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier mein Code: (habe einige for-Schleifen der Übersicht wegen
herausgenommen)
#include<mega128.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>


void warte(void)
{
unsigned char a;
for (a=0;a<80;a++)
{
}
}

// *** START des C-Programms ***
void main(void){
unsigned int x;

  UCSR0B=  0b00011000;
  UCSR0C=  0b00000110;

  UBRR0L=87;

  // Initialsierung
  // Interupt



  DDRC.4 = 1;
  DDRC.5 = 1;
 warte();
  while(1)
 {
PORTC.4=1;
PORTC.5=0;
 //putchar('2');


  for (x=0;x<25000;x++)
{

}

}
PORTC.5=1;
PORTC.4=0;
for (x=0;x<25000;x++)
{
}

 }

}

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeichen x ist eine 2. 1 Klammer ist zuviel, liegt aber daran, daß ich
dort eine for_schleife entfernt hatte.

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du Deinen Quelltext auch noch formatieren würdest, müsste man keine
geschweiften Klammern zählen ...

Autor: Stefan May (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
for (a=0;a<80;a++)
{
}

Sowas optimiert der Compiler raus, sobald optimieren eingeschaltet ist!
Etwas besser:

for(a=0;a<80;a++)  asm volatile ("nop");

noch etwas besser:

volatile unsigned char a;
for(a=0;a<80;a++);

Oder noch viel besser:

Die delay-Routinen der AVR-Libc 1.2.x in avr/delay.h benutzen.

Außerdem gebe ich Rufus recht, Dein Quelltext ist wirklich
grottenschlecht zu lesen.
ciao, Stefan.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void warte(void)
{
delay_ms(10);

}
Sorry wegen dem schlechten Code.
Der ATmega128 hängt trotzdem in der Funktion. Kein Signal an den Ports.
Sobald warte(); raus ist geht es(ohne putchar). Hab auch die nop's
probiert.

Habe auch mal die putchar-Anweisung vor die while-Schleife gesetzt. Er
wiederholt ständig die 2, obwohl doch nur eine erscheinen dürfte. An
den Ports spielt sich gar nichts ab.

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hatte des öfteren solche "lustigen" effekte... jetzt sind die
stütz-Cs richtiger verbaut und jetzt haut alles hin.. irgendwie ist der
mega128 da kritischer wie die im dil gehäuse... also ich würd mal (wenn
vorhanden) mit einem oszi die versorgungs-pins abklappern und schaun
was sich da so tut...

73

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Prozessor, der vorher auf der Platine war, lief einwandfrei. Habe
ihn gegen einen neuen gleichen Typs ausgetauscht, da der alte sich
nicht programmieren ließ. An der äußeren Beschaltung wurde nichts
verändert. Also solten die Stützkindensatoren doch in Ordnung sein.
Die Verbindungen scheinen ok zu sein.
Kann es etwas mit den Fusebits zu tu haben?

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst einmal danke an alle.
Meine Vermutung war richtig. Die Fusebit für den
103-Kompatibilitätsmodus war programmiert. Wirklich dumm, daß diese im
Auslieferungszustand programmiert ist. Dachte ich mache nichts falsch,
wenn ich die programmiert lasse.
Dies führt wohl bei 128-Programmen zu oben beschriebenen Problemen.

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.