Tach zusammen!
Ich hab da leider wieder einmal ein (noob)-Problem:
Hier erstmal der
Schaltplan
Zur Erklärung:
SJ1 (Lötbrücke) ist geschlossen und der Reset-Pin ist per Fusebit als I/O definiert.
Über die 3 DIP-Switches kann ich einen Mode von 0-7 einstellen (Wertigkeiten 1/2/4).
Wenn an "Bremskontakt" 12V anliegen blinkt eine LED die an "Bremslicht" angeschlossen ist, entsprechend der eingestellten Modis mit unterschiedlichen Frequenzen.
Soweit funktioniert alles problemlos.
Wenn ich nur an "Race-Mode" meine 12V anlege wird der Mode "8" aktiviert und die LED blinkt mit 1Hz. <- funktioniert auch soweit
Hier das Problem:
Wenn der Race-Mode aktiviert ist und an "Bremskontakt" 12V angelegt werden (Im Prinzip nur eine Brücke zwischen "Bremskontakt" und "Race-Mode") soll die Blinkfrequenz von 1Hz auf 3Hz umgeschalten werden. Teilweise funktioniert das ganze problemlos.
Leider hängt sich der Controller meistens beim Umschalten auf und lässt entweder die LED aktiviert oder schaltet sie einfach aus.
Der Controller "erhohlt" sich auch im Normalfall nicht mehr sondern es muss die Versorgungsspannung getrennt werden.
Den Watchdog habe ich auch schonmal aktiviert und an einer Stelle reseten lassen an die der Controller nur gelangt, wenn das Programm sauber läuft.
Codeschnipsel (GCC) könnte ich erst heute Abend liefern. Aber im Grunde schaut die main so aus:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
while ( 1 )
{
get_mode();
if ( race_mode )
{
if ( active )
{
[blink_mit_3_hz]
}
else
{
[blink_mit_1_hz]
}
}
else
{
[blink_mit_eingestelltem_mode]
}
}
|
"get_mode" liest die 3 DIP-Schalter aus
"active" und "race_mode" fragen über die "standard-entprellfunktion" aus dem GCC-Tutorial von mikrocontroller.net die Pins ab.
Jemand nen zündenden Hinweis?