Das ist der kleine Schönheitsfehler an meinem Gedanken.Wenn ich mit DDRA = ... die Ausgänge auf Eingang schalte, leuchten die LED's ganz leicht noch - geht dass später mit nem Transistor weg?
Das PORTX.Y-Register legt ja fest, ob ein Anschluss, der als Ausgang konfiguriert ist, 1 oder 0 führt. Wenn der Anschluss als Eingang konfiguriert ist, ist das PORT-Register aber nicht ganz unbeteiligt: Ist es 1, wird ein eingebauter PullUp-Wierstand aktiviert, der den Eingangspin auf ein definiertes High zieht, wenn er komplett unbeschaltet in der Luft hängt. Das ist dann wichtig, wenn Du z.B. einen Taster oder sowas abfragst, denn frei in der Luft hängende Pins fangn sich sofort alle möglichen Störsignale (z.B. 50Hz-Brumm, aber auch hochfrequente Signale) ein.
Dieser PullUp-Widerstand nach +5V ist zwar hochohmig (ca. 50 kOhm), aber offensichtlich reichen diese 0,1mA schon aus, Deine LEDs ein bisschen leuchten zu lassen. Eine Transistorstufe würde das sogar noch verschlimmern, weil man mit 50 kOhm gegen +5V einen Transistor ohne weiteres komplett durchsteuern kann.
Die einfachste Lösung hierfür wäre, dass Du Deine LEDs nicht vom Controller nach Masse legst, sondern genau adersherum von +5V zum Controller. Da die LED ohnehin an +5V hängt, ist der 50 kOhm-PullUP nach +5V ohne Wirkung.
Das wird eigentlich auf fast allen Boards ohnehin so gemacht, weil der Strom, den ein LOW-Anschluss nach Masse ableiten kann höher ist als der Strom, den er im HIGH-Zustand z.B. an eine LED abgeben kann.
Man muss dann halt nur umdenken, denn RESET xyz schaltet die LED an, und SET schaltet sie aus. Aber das haben sch viele Bascom-Anwender geschafft.
Ich bin zwar absolut kein Profi, würde es aber genau so machen. Oder spricht irgendetwas dagegen?Nur wie SOll ich die Flaher laufen lassen? Mit ner Case abfrage in do und in der Timer_isr einfach "incr Blabla" ??
Lesezeichen