Anzeige:

Fahrradtachometer über Attiny13 steuern

Hier finden sie die archivierten Beiträge des alten PHPBB Forums von www.loetstelle.net

Fahrradtachometer über Attiny13 steuern

Von Franjo am 03.04.2011 20:59

Hallo zusammen,

ich habe mir überlegt, meinen Fahrradtachometer nicht mit Spannungsimpulsen über einen externen Magneten zu versorgen, sondern die Spannungsimpulse eines Fahrraddynamos zu nutzen. Diese Impulse variieren je nach Fahrraddynamo pro Umdrehung. Ein Shimano-Dynamo z.B. sendet 28 Impulse, davon 14 als postive Halbwelle. Als Leerlaufspannung erhalte ich grob bei einer Erhöhung um 1km/h auch etwa 1 V mehr Spannung. Ich möchte deshalb mit Hilfe eines Zählers 14 Halbwellen zählen und dann einen Impuls an den Tachometer weitergeben. Aus den Beiträgen in diesem Forum habe ich mir Code herausgesucht und nach meinen Bedürfnissen umgeschrieben. Kann jemand mal über den Code schauen und mir mitteilen, ob er so funktioniert?

1]$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 16
$swstack = 10
$framesize = 16


Dim ImpulseVomDynamo As Byte

SignalZumTachometer Alias Portb.3
Config SignalZumTachometer = Output

SignalVomDynamo Alias Pinb.4
Config SignalVomDynamo = Input

Portb.4 = 0


Main:

If ImpulseVomDynamo = 14 Then
ImpulseVomDynamo = 0
SignalZumTachometer = 1
Waitms 100
SignalZumTachometer = 0
End If

'Debounce SignalVomDynamo, 0 , OnSignalVomDynamo
'Hier dürfte das Signal vom Dynamo sauber genug sein, es ist eine 'Sinuswelle, die durch eine Z-Diode auf einen Wert von x V begrenzt 'wird. Über die Höhe von x bin ich mir jedoch noch nicht im Klaren, ich 'schätze so etwa 2,5 bis 3 V

Goto Main
End


OnSignalVomDynamo

Incr ImpulseVomDynamo

Goto Main
1]
PS: Einen großen Dank an gerold für seine sehr gut verständliche Einführung in die Welt der Atmel-Controller

Von BellaD am 03.04.2011 21:37

moin

Code:
'Debounce SignalVomDynamo, 0 , OnSignalVomDynamo

debounce vertrödelt bei bascom 20msec je aufruf , daher könnten dir Impulse verloren gehen.
Besser wäre es einen Timer als Zähler für die Imp. zu benutzen,da er aber nur einen hat und der vielleicht noch für was anderes gebraucht wird,
würde ich den AnalogComperator dafür gebrauchen.
Referenzspannung an einen Pin, dein aufbereitetes Signal an den anderen und im Interup des AIN dann hochzählen.

Von Franjo am 03.04.2011 22:10

Erst mal Danke für die schnelle Antwort.
Da ich den Debounce-Befehl sehr wahrscheinlich nicht benötige, habe ich ihn auskommentiert. Ich bin absoluter Neuling und kann leider mit Deinen Alternativvorschlägen ohne tieferes Verständnis nicht viel anfangen. Würde mein Code denn ohne die " Debounce" - Zeile noch funktionieren?

Von BellaD am 04.04.2011 20:31

moin

ich hab gerade mal nachgelesen der Debounce befehl ist konfigurierbar

Config Debounce = 5 'when the config statement is not used a default of 25mS will be used but we override to use 5 mS

http://avrhelp.mcselec.com/index.html

mfg

Von Sam am 04.04.2011 20:43

Da wird man mit Debounce nicht weit kommen. Dafür ist das Ganze einfach zu schnell. Da solltest du mit externen Interrupts arbeiten.
Du musst auf jeden Fall die Spannung verstärken und begrenzen (Transistor und Z-Diode). Dann wartest du auf eine Flanke und startest einen Timer. Bei der nächsten Flanke wertest du den Timer aus. Wenn der Timer überläuft gehst du von Stillstand aus.

Re: Fahrradtachometer über Attiny13 steuern

Von Alv am 04.04.2011 20:44

Möglicherweise könnte man das auch ohne aufwendige Schaltung oder µC hinbekommen, indem man einfach den Radumfang im Tacho den 18 Impulsen anpaßt...

Wenn ich jetzt richtig geschätzt habe, dann müßte bei einem 28" Rad mit 2000 mm Umfang der Radumfang im Tacho auf 110mm eingestellt werden.

Von Franjo am 04.04.2011 22:12

Zunächst nochmals Danke für die Antworten.

@ALV: Natürlich könnte diese Aufgabe auch einfacher erledigt werden. Ich möchte allerdings die Arbeitsweise dieser Mikrocomputer kennenlernen, um evtl. andere, anspruchsvollere Projekte angehen zu können ( ein ASURO wartet bereits ).

Ich habe den Code heute mal kompilieren lassen, bis auf eine unbedeutende Fehlermeldung hat das BASCOM AVR-Programm den Code auch angenommen. Ohne einen Eingangsimpuls kann ich den Code allerdings mit der Simulation nicht testen. Gibt es irgendeine Möglichkeit, den Port PB4 mit einem Rechtecksignal 5 Vss anzusteuern und dann zu sehen, was an PB3 in Richtung Tachometer ausgegeben wird?

Von Franjo am 04.04.2011 22:42

Ich habe mal ausgerechnet, wieviele Impulse im Bereich von 1 km/h und 80 km/h erzeugt werden:

Ein 28 – Zoll- Rad legt pro Umdrehung einen Weg von 2174 mm zurück (http://de.wikipedia.org/wiki/Abrollumfang#Fahrr.C3.A4der).
Währenddessen werden 14 positive Halbwellen mit 14 ansteigenden Flanken erzeugt. Pro Flanke entspricht dies einem Weg von 0,1552 m.Fahre ich mit 1 km/h, so erzeuge ich pro Sekunde 1,78 Impulse ( 1000m/2,714m*14Imp/s/3600s).
Bei 80 km/h sind es dann 143,1 Impulse pro Sekunde. Am Ausgang entstünden dann etwa 10 Impulse pro Sekunde.

Ob diese Impulsfolge noch von dem vorgestellten Programm verarbeitet werden kann, weiß ich nicht, ich werde deshalb versuchen, mich in die Programmierung von Interrupts einzulesen. Sad

Von Franjo am 05.04.2011 13:52

So, hier nun der erste Versuch, mein Problem mit Interrupts zu lösen:

Code:
$regfile = "attiny13.dat"
$crystal = 4000000
$hwstack = 16
$swstack = 10
$framesize = 16


Dim Signalvomdynamo As Byte
SignalVomDynamo = 0

Config Pinb.0 = Input
Config Int0 = Rising
Signalzumtachometer Alias Portb.4
Config Signalzumtachometer = Output
Enable Interrupts
Enable Int0
On Int0 Zaehlen

Do

If Signalvomdynamo = 14 Then
      Signalvomdynamo = 0
   Signalzumtachometer = 1
   Waitms 50
   Signalzumtachometer = 0
End If

Loop

Zaehlen:

    Incr SignalVomDynamo

Return

End


Könnte mal jemand drüber schauen? Bascom - AVR meldet beim Kompilieren keinen Fehler

Wenn im Extremfall 180 Impulse/s ankommen, reichen dann 4MHz Takt für die Weiterverarbeitung aus?

Von Sam am 06.04.2011 15:57

Sieht soweit gut aus. Du könntest die Abfrage der Variable in der Hauptschleife komplett in die ISR (Zaehlen) setzen und den Controller in der Hauptschleife schlafen legen. Würde Strom sparen. Bei 4MHz langweilt sich der Controller zu Tode.

Anzeige: