Ja, ich merke es auch gerade: es müsste auch in der von VODKACITY benutzten Reihenfolge laufen.
Nach dem Einschalten/Reset stehen sämtliche DDR- und PORT-Register auf 0x00. Somit ergibt sich: Eingang ohne Pullup. Also ein hochohmiger Eingang, das Potential am Pin wird nur von der Außenbeschaltung bestimmt. In der aktuelle Schaltung: der TTL-Eingang des ULN zieht den Pin über Widerstände auf Masse.
Nun wird das PORT-Register auf 0x00 gesetzt. Da es diesen Wert schon enthält, ändert sich nichts.
Schließlich wird das DDR-Register auf 0xFF gesetzt. Die Pins werden damit zu Ausgängen. Weil das PORT-Register auf 0x00 steht, werden alle Pins auf Masse gezogen. Damit ist die Initalisierung abgeschlssen. Die Pins wurden bisher nie auf high geschaltet. Die Treiber wurden also noch nicht aktivert, ebensowenig die internen Pullups.
Füg mal ein paar Verzögerungen hinzu, um zu prüfen, an welcher Stelle des Programms der unerwünschte Impuls tatsächlich auftritt. Das geht am einfachsten mit einer Funktion aus <util/delay.h>.
Füge in das Programm folgende Funktion ein, und rufe sie dann an den interessanten Stelle per warte(1000) auf.
Code:
#include <util/delay.h>
void warte (int loop) //loop: wartezeit in ms
{
int i;
for(i=0;i<loop;i++) _delay_ms(1);
}
Lesezeichen