Hallo!
Habe ein sehr seltsames Problem mit meinem ATmega16.
Habe ihn soeben mit einem total einfachen Programm programmiert:
1 | #include <avr/io.h>
|
2 | #include <utils/delay.h>
|
3 |
|
4 | void main (void)
|
5 | {
|
6 | DDRC = 0xFF; //PortC als Ausgang schalten
|
7 |
|
8 | PORTC = 0xFF;
|
9 | _delay_ms(5000);
|
10 | PORTC = 0;
|
11 |
|
12 | }
|
Was das Prog machen soll ist klar: Zunächst setzt es PortC als Ausgang.
Danach soll PORTC auf HIGH gehen, 5 sekunden warten und anschließend
soll PortC auf LOW gehen.
Da ich an den Ports die Basis der Transistoren (mit Basiswiderstand
versteht sich) angeschlossen habe, an dessen Collectoren Relais
(Steuerkreis) hängen, klackern sie seitdem völlig sporadisch hin und
her. Weder ein 5 sekündiges Warten noch irgendein nachvollziehbares
Ereignis tritt auf.
Habe nun die Spannungen direkt an den Pins des Port C vom Controller
gegen Masse gemessen.
Direkt da treten die Probleme auf: Spannung schwankt eben wie sie gerade
will.
An der Spannungsversorgung des Controllers kann es nicht liegen, da ich
zusätzlich LEDs (die an Port D hängen) angeschlossen habe, die konstant
"durchleuchten". Wäre es also die Spannungsversorgung, würden die ja im
gleichen Takt wie die Relais flackern/klacken.
Kann es an der "delay_ms"-Funktion liegen? Habe nämlich einen 14,...
MHz-Quarz an den Controller angeschlossen, da ich auch über den UART
kommunizieren möchte. Aber jetzt erstmal möchte ich die Relais anständig
zum Laufen kriegen :-(
Die Fuses habe ich für den Quarz übrigens auch auf "ext. Crystal"
gesetzt.
Vielen Dank