ATmega128 Problem

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

 }

}
Gast #151457
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.
Gast #151458
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.
Gast #151459
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
Gast #151460
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?
Gast #151461
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren