ATmega128 Problem

Gast #151453
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?
Gast
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++)
{
}

 }

}
Gast
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.
Gast
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.
Gast
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
Gast
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?
Gast
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.