Forum: Mikrocontroller und Digitale Elektronik Spannungsabfall an den Ports


von Stefan B. (-stefan-)


Lesenswert?

Hallo,

Hänge gedanklich gerade an folgendem Problem.
Mir viel auf, dass wenn ich die delay.h wie sie jeder kennt sprich 
unverändert etc anspreche fallen bei mir die Spannungen an den Ports 
beträchtlich ab. Also habe ich einen neuen Atemga ausgepackt. Hier die 
Ausgänge nicht mit externen Schaltungen belastet. Was dabei heraus kommt 
sieht man am besten mit dem Oszi und dem Quellcode.

Folgend 3 Versuche.

Wo ist mein Fehler?

Komme da gerade echt nicht weiter. Vielleicht übersehe ich auch nur eine 
Kleinigkeit.

von Stefan B. (-stefan-)


Angehängte Dateien:

Lesenswert?

1. Versuch:

Oszibild im Anhang. Quellcode hier:

#######################################################

#include <avr/io.h>

#define F_CPU 10000000UL
#include <util/delay.h>

int main (void){

  PORTD |= (1<<PD2);

  while(1){}

}

#####################################################

von Stefan B. (-stefan-)


Angehängte Dateien:

Lesenswert?

2. Versuch:

Oszibild im Anhang. Quellcode hier:

#######################################################

#include <avr/io.h>

#define F_CPU 10000000UL
#include <util/delay.h>

int main (void){

        _delay_ms(1):
  PORTD |= (1<<PD2);

  while(1){}

}

#####################################################

von Stefan B. (-stefan-)


Angehängte Dateien:

Lesenswert?

3. Versuch:

Oszibild im Anhang. Quellcode hier:

#######################################################

#include <avr/io.h>

#define F_CPU 10000000UL
#include <util/delay.h>

int main (void){

        _delay_ms(10):
  PORTD |= (1<<PD2);

  while(1){}

}

#####################################################

von Stefan B. (-stefan-)


Lesenswert?

Wie man sieht werden die High-Pegel immer kürzer was zum messbaren 
Spannungsabfall führt wenn man mit einem 0-8-15-Spannungsmesser ans Werk 
geht. Aber, wo ist der Fehler, dachte immer der Atmeag durchläuft die 
delay-Schleife, gibt Spannung auf den Port und tut dann in while(1) 
nicht mehr. Sprich es müsste immer ein High-Pegel am Atmega anliegen.

Ps. Das Problem tritt auch auf, wenn man die Delay-Anweisung selber 
schreibt. Was dann auch schnell auffällt dass das Problem auch eintritt 
wenn man for-Schleifen nutzt.

Zusätzliche Info:
Externer Quarz: 10Mhz
Optimierung des Compiers: Aus (Tritt aber auch auf, wenn man optimiert)
Stromversorgung über ISP: Die bleibt auch konstant.
Noch was vergessen????

Finde den Fehler einfach nicht

von (prx) A. K. (prx)


Lesenswert?

Watchdog Fuse eingeschaltet.

von Stefan B. (-stefan-)


Lesenswert?

Super, das war das Problem!!!!!!!!!!!!!!!!!!!!!!!

Vielen vielen Dank für die Antwort. Hat mir den Abend gerettet!

Vielen Dank,
Stefan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.