Hallo Chris!
Ich habe jetzt ein wenig getestet.
Der Transistor an PB.4 ist komplet überflüssig. Er ist zu empfindlich und braucht zum störungsfreien Schalten einen zusätzlichen Pulldown-Widerstand. Dann bleibe ich doch lieber bei der Lösung mit dem Spannungsteiler.
Also hier der aktuelle Schaltplan:
Bild hier
Und hier das neue Programm. Ich habe das Eingangssignal ein wenig entstört. Es wird jetzt drei mal hintereinander das Bremssignal geprüft und nur wenn dieses drei mal hintereinander auf 1 steht, dann gilt das Signal als störungsfrei. Ohne dieses Entstören schaffte ich es dauernd beim Berühren eines Drahtes ein Bremssignal auszulösen. Das ist jetzt nicht mehr.
Code:
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 32
$swstack = 5
$framesize = 20
Const Half_light = 40
Const Full_light = 255
'PWM-Ausgang
Pwm_out Alias Portb.0
Config Portb.0 = Output
'Bremslicht Eingang
Break_light_in Alias Pinb.4
Config Pinb.4 = Input
'Timer0 als PWM: 9600000 / 64 / 256 / 2 = 292,9 Hz
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 64
Pwm0a = Half_light
'Watchdog aktivieren
Config Watchdog = 512
Start Watchdog
'Rauschfreies Bremssignal
Declare Function Get_break_signal() As Byte
Do
If Get_break_signal() = 1 Then
Pwm0a = Full_light
Waitms 100
Pwm0a = Half_light
Waitms 100
Else
Pwm0a = Half_light
End If
Reset Watchdog
Loop
End
Function Get_break_signal() As Byte
Local Bt As Byte
For Bt = 1 To 3
Nop : Nop : nop
If Break_light_in = 0 Then
Get_break_signal = 0
Exit Function
End If
Next Bt
Get_break_signal = 1
End Function
Weiters habe ich den Watchdog Timer aktiviert. Falls der ATtiny13 einmal abstürzen sollte, dann wird dieser nach spätestens 512 ms neu gestartet.
Der µC-Teil der Schaltung funktionerte bei meinen Tests zwischen 7,5 und 13,8 Volt einwandfrei. Allerdings habe ich die 5 V Versorgung nicht nachgebaut. Diese kam vom Labornetzteil und änderte sich nie. Aber bei 7,5 V Eingangsspannung dürfte auch der LM78L05 noch schöne 5 V liefern. Ich hatte beim Test nur eine LED dran hängen. Deshalb kann ich nicht sicher beurteilen, wie die Schaltung funktioniert, wenn man 25 LEDs dran hängen hat. Das auszuprobieren bleibt bei dir hängen.
Jetzt möchte ich auch noch erklären, weshalb ich nicht auf eine Lösung mit einem ATmega32 eingegangen bin. Mit dieser ATtiny13-Schaltung hast du ein komplett unabhängiges Modul, welches du direkt in die Rückleuchte einbauen kannst. Komplett unabhängig von irgendwelchen anderen Mikrocontrollern und Funktionen. Wenn etwas kaput wird, dann tauscht du es einfach aus. Und wenn das Rücklicht oder das Bremslicht nicht funktionieren, dann weißt du sofort wo du nach einem Fehler zu suchen hast. Das sind in meinen Augen alles Vorteile gegenüber einer Zentralrechner-Strategie. Lieber kleine, überschaubare Module, als einen zentralen "Point of Failure", dessen Funktion kaum mehr durchschaubar ist.
Und noch etwas: Stecke den ATtiny13 in einen Sockel. Man hat ja nicht immer einen Computer in der Nähe, den man am Renngerät anstecken kann. Dann kann man zumindest den ATtiny13 ausbauen und zum Computer bringen.
mfg
Gerold
PS: Die Fuse- und Lock-Bits des ATtiny13 habe ich auf diesen Wert gesetzt:
Low Fuse: 01111010
High Fuse: 11111111
Lockbits: 11111111
- Serial program downloading (SPI) enabled; [SPIEN=0]
- Int. RC Osc. 9.6 Mhz; Start-up time: 14 Ck + 64 ms; [CKSEL=10 SUT=10]
- Brown-out detection disabled; [BODLEVEL=11]
- Mode 1: No memory lock features enabled
.
Lesezeichen