noch ne frage - kann das PWM Signal eigentlich immer nur an PB.0 ausgegeben werden ? brächte noch ein 2'es PWM Ziel ist 2 PWM's mit 20/80'er Auflösung mit je einen weiteren Pin um zu schalten in 20/80 und 80/20 bei 25Hz.
guten Nacht ;-)
Druckbare Version
noch ne frage - kann das PWM Signal eigentlich immer nur an PB.0 ausgegeben werden ? brächte noch ein 2'es PWM Ziel ist 2 PWM's mit 20/80'er Auflösung mit je einen weiteren Pin um zu schalten in 20/80 und 80/20 bei 25Hz.
guten Nacht ;-)
Hallo semperit!Zitat:
Zitat von semperit
UNGETESTET:
Damit solltest du nicht nur PWM0A, sondern auch PWM0B (an PB1) zur Verfügung haben.Code:Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64
mfg
Gerold
:-)
PS: Mit einer Taktfrequenz von 9,6 MHz und einem Prescaler von 1024, solltest du auf ca. 36,6 Hz PWM-Frequenz kommen.
9600000/1024/256 = 36,62109375
Um genau auf 25 Hz zu kommen, müsstest du den ATtiny13 extern mit 6553600 Hz takten. Dieser Takt müsste an PB3 angeschlossen werden. Das wird wohl nichts.
25 * 256 * 1024 = 6553600
.
für die einstellbare Frequenz habe ich eine Lösung gefunden
Nur regiert der µC nicht darauf wenn ich PB.2 auf Masse ziehe. Dann sollte das PWM Signal sich eigentlich ändern.Code:$regfile = "ATtiny13.dat"
'$crystal = 4800000
Dim Hi As Byte
Dim Lo As Byte
Dim Phase As Bit
Dim Get_break_signal As Bit
Dim B As Byte
Const Reload = 95 'um 24 Hz zu erzeugen 4,8Mhz/8/64
$hwstack = 10 'Eingefügt Weil die Standardvorgaben
$swstack = 10 'für den Tiny13 zu
$framesize = 20 'hoch sind.
Ddrb = &B00000011
Portb = &B00000100
Lo = Reload - 13
Hi = Reload - Lo
Phase = 1
Config Timer0 = Timer , Prescale = 8
On Timer0 Timer_isr
Enable Timer0
Enable Interrupts
Declare Function Get_break_signal() As Byte
Do
nop
Loop
Timer_isr:
If Phase = 1 Then
If Get_break_signal() = 1 Then
Portb.0 = 1
Else
Portb.0 = 0
End If
Portb.1 = 0
Load Timer0 , Lo
Phase = 0
Else
If Get_break_signal() = 1 Then
Portb.0 = 0
Else
Portb.0 = 1
End If
Portb.1 = 1
Load Timer0 , Hi
Phase = 1
End If
Return
Function Get_break_signal() As Byte
Local Bt As Byte
For Bt = 1 To 3
If Portb.2 = 0 Then
Get_break_signal = 0
Exit Function
End If
Next Bt
Get_break_signal = 1
End Function
Hallo ihr Bremslichtbastler,
auch wenn das Thema schon 6 Jahre zurückliegt hab ich noch eine Frage dazu. Kann man die Schaltung auch so umbauen, dass es für das Bremslicht kein zweite 12 Volt Leitung benötigt wird? Ich habe mir vorgestellt, dass man ein zweite Masse dafür benutzt. Da könnte man einfach einen Bremslichtschalter nehmen der nur ein Kabel hat und die Masse schließt.
Viele Grüße
Lars
Grundsätzlich ist es möglich. Am einfachste wäre es wenn du einen "Hauptschalter" einbaust, der die Schaltung mit der Versorgung verbindet. Die beiden Schalter für Rücklicht und Bremslicht würde ich auf einen Eingang geben (z.B. PB3 Rücklicht, PB4 Bremslicht) und gegen Masse schalten. Du musst jedoch einen Pullup einbauen bzw einschalten. Das Programm musst du jedoch umschreiben. Ich würde mir auch noch Gedanken über die Stromversorgung machen (z.B. Schaltwandler), damit die Effizienz gesteigert wird.
MfG Hannes