Hallo,
weil ich eigentlich auch gerade an einen Drehzahlmesser gedacht habe (und ich nehme an, es handelt sich noch um das Thema mit dem Benzinmotor)
habe ich das mal ausprobiert.
Ich habe leider auch nur einen ATmega16 herumliegen, das Programm ist also auch für Mega16, jedoch sollte es reichen, einfach die Pins, an die das Display angeschlossen ist, zu ändern.
Der Eingang ist Int0 (den es ja auch beim Mega8 gibt).
Die Umrechnung ist jetzt so ausgelegt, dass der Timer1 1Mio mal pro Sekunde tickt. Wenn man z.B. einen Quarz anderer Frequenz verwenden möchte müsste man das halt entweder im Prescaler oder in der Umrechnung ändern.
Der Code ist getestet und hat bei mir funktioniert.Code:$regfile "M16def.dat" $hwstack = 32 $swstack = 32 $framesize = 32 $crystal = 1000000 'Initialisiere Timer1 Config Timer1 = Timer , Prescale = 1 Enable Timer1 On Timer1 Isr_timer1 'Das LCD konfigurieren Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0 'Den Int0 konfigurieren, er dient zum erfassen der Pulse Config Int0 = Rising Enable Int0 On Int0 Isr_puls 'Die Interrupts global aktivieren Enable Interrupts 'Variablen Definieren Dim Timer1_overflows As Byte Dim Ticks As Long Dim Rpm As Long 'Variable auf Null setzen, nur um sicher zu gehen Timer1_overflows = 0 'Anfang Hauptprogramm +++++++++++++++++++++++++++++++++++++++++ Do 'Die Ticks in Umdrehunge pro Sekunde umrechnen Rpm = 60000000 / Ticks Cls Locate 1 , 1 Lcd "Umdrehungen: " Locate 2 , 1 Lcd Rpm 'Eine viertelsekunde warten, damit das Display nicht zu häufig Waitms 250 Loop 'Ende Hauptprogramm +++++++++++++++++++++++++++++++++++++++++ Isr_puls: 'Es wurde ein Puls registriert 'Anzahl der Ticks ermitteln Ticks = Timer1_overflows * 65536 Ticks = Ticks + Timer1 'Zurücksetzen Timer1 = 0 Timer1_overflows = 0 Return Isr_timer1: 'Timer 1 ist übergelaufen Timer1_overflows = Timer1_overflows + 1 Return
![]()
Natürlich, es wurde ja schon Code gepostet, aber das habe ich jetzt gerade eben ausprobieren müssen und villeicht nützt es dir ja etwas![]()
EDIT: Habe gerade gesehen, dass die Textphrase "Umdrehungen * 1/min: " garicht platz hat am LCD, siehe Foto.
Also im Code auf "Umdrehungen: " geändert...
Mfg Thegon







Zitieren

Lesezeichen